Flutter路由管理插件prism_flutter_go_router的使用
Flutter路由管理插件prism_flutter_go_router的使用
描述
prism_flutter_go_router
是一个为 Flutter 提供 go_router
实现的库。它属于 Flutter.Prism.Core
系列库的一部分。此库允许你构建模块化的应用程序,并且在保持模块隔离性和独立性的同时实现轻松导航。
特性
- 易于集成
go_router
:支持将go_router
集成到项目中。 - 支持常见的“标签页”应用:可以方便地处理具有多个标签页的应用场景。
开始使用
步骤 1:设置项目依赖
首先,在你的 pubspec.yaml
文件中添加以下依赖项:
dependencies:
prism_flutter_go_router: ^版本号
然后运行 flutter pub get
来安装依赖。
步骤 2:继承 GoRouterBootstrapper
修改你的启动逻辑,使其继承自 GoRouterBootstrapper
,并注册路由。
示例代码
void main() async {
// 创建并运行 Bootstrapper
final boostrapper = Bootstrapper();
await boostrapper.run();
runApp(child: const MyApp());
}
// 定义模块
class TestModule extends GetItModule {
[@override](/user/override)
Future<void> init(GetIt container) {
// 获取 RegionManager 并注册视图
final regionManager = container<RegionManager>();
regionManager.registerView(
"main",
RegionWidgetRegistration(
metadata: MultiChildMetadata("welcome", order: 1), // 设置元数据
registration: (context) => const WelcomeWidget(), // 注册欢迎页面
),
);
}
}
// 自定义 Bootstrapper
class Bootstrapper extends GoRouterBootstrapper {
[@override](/user/override)
ModuleCatalog createModuleCatalog() {
// 使用内存模块目录并添加模块
final catalog = MemoryModuleCatalog();
catalog.addModule(ModuleInfo((c) => TestModule()));
return catalog;
}
}
// 主 Widget
class MainWidget extends StatelessWidget {
const MainWidget({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return RegionBuilder(
regionManager: MyDI().instance.get<RegionManager>(), // 获取 RegionManager
regionName: "main", // 指定区域名称
multiChild: (children) => ListView(children: children), // 使用 ListView 显示子组件
);
}
}
更多关于Flutter路由管理插件prism_flutter_go_router的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
prism_flutter_go_router
是一个基于 go_router
的 Flutter 路由管理插件,旨在简化 Flutter 应用中的路由管理和导航。go_router
是 Flutter 官方推荐的路由管理库,提供了声明式的路由配置和强大的导航功能。
安装 prism_flutter_go_router
首先,你需要在 pubspec.yaml
文件中添加 prism_flutter_go_router
依赖:
dependencies:
flutter:
sdk: flutter
prism_flutter_go_router: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本使用
1. 配置路由
在 main.dart
文件中,你可以使用 prism_flutter_go_router
来配置路由。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:prism_flutter_go_router/prism_flutter_go_router.dart';
void main() {
final GoRouter router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const HomeScreen();
},
),
GoRoute(
path: '/details',
builder: (BuildContext context, GoRouterState state) {
return const DetailsScreen();
},
),
],
);
runApp(MyApp(router: router));
}
class MyApp extends StatelessWidget {
final GoRouter router;
const MyApp({Key? key, required this.router}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: router,
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Home')),
body: Center(
child: ElevatedButton(
onPressed: () {
context.go('/details');
},
child: const Text('Go to Details'),
),
),
);
}
}
class DetailsScreen extends StatelessWidget {
const DetailsScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Details')),
body: Center(
child: ElevatedButton(
onPressed: () {
context.go('/');
},
child: const Text('Go back to Home'),
),
),
);
}
}
2. 导航
在 prism_flutter_go_router
中,你可以使用 context.go
或 context.push
来进行导航。
context.go
:导航到指定路径,并替换当前路由栈。context.push
:导航到指定路径,并将新路由推入路由栈。
context.go('/details'); // 导航到详情页
context.push('/details'); // 推入详情页
3. 传递参数
你可以在导航时传递参数,并在目标页面中获取这些参数。
context.go('/details', extra: {'id': 123});
在目标页面中,你可以通过 state.extra
获取传递的参数:
class DetailsScreen extends StatelessWidget {
const DetailsScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final Map<String, dynamic>? args = GoRouterState.of(context).extra as Map<String, dynamic>?;
final int id = args?['id'] ?? 0;
return Scaffold(
appBar: AppBar(title: const Text('Details')),
body: Center(
child: Text('Details for ID: $id'),
),
);
}
}
高级功能
1. 嵌套路由
go_router
支持嵌套路由,你可以在一个路由下定义子路由。
GoRoute(
path: '/profile',
builder: (BuildContext context, GoRouterState state) {
return const ProfileScreen();
},
routes: [
GoRoute(
path: 'settings',
builder: (BuildContext context, GoRouterState state) {
return const SettingsScreen();
},
),
],
);
2. 路由守卫
你可以使用 redirect
来实现路由守卫,控制用户是否可以访问某个路由。
GoRouter(
routes: [
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const HomeScreen();
},
),
GoRoute(
path: '/admin',
builder: (BuildContext context, GoRouterState state) {
return const AdminScreen();
},
redirect: (BuildContext context, GoRouterState state) {
final bool isAdmin = checkIfAdmin(); // 自定义逻辑
if (!isAdmin) {
return '/'; // 重定向到首页
}
return null; // 允许访问
},
),
],
);