在 Flutter 中,GoRouter 是一个强大的声明式路由管理库,适用于复杂的导航场景,支持深度链接、路由保护等功能。以下是实现步骤:
1. 添加依赖
在 pubspec.yaml 中添加依赖:
dependencies:
go_router: ^13.0.0 # 使用最新版本
运行 flutter pub get。
2. 基本配置
定义路由规则并配置 GoRouter:
import 'package:go_router/go_router.dart';
final GoRouter router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => const HomeScreen(),
),
GoRoute(
path: '/details',
builder: (context, state) => const DetailsScreen(),
),
],
);
3. 集成到应用
在 main.dart 中使用 MaterialApp.router:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: router, // 配置 GoRouter
);
}
}
4. 导航操作
- 跳转页面:
context.push('/details'); // 推入新页面
context.go('/details'); // 替换当前路由栈
- 传递参数:
// 定义带参数的路由
GoRoute(
path: '/details/:id',
builder: (context, state) {
final id = state.pathParameters['id']!;
return DetailsScreen(id: id);
},
);
// 跳转时传递参数
context.push('/details/123');
5. 高级功能
- 路由保护(例如登录验证):
final router = GoRouter(
redirect: (context, state) {
final isLoggedIn = checkLoginStatus(); // 自定义登录检查
if (!isLoggedIn && state.location != '/login') {
return '/login';
}
return null;
},
routes: [...],
);
- 深度链接:直接通过 URL 打开特定页面(需配置
path 匹配规则)。
注意事项
- 使用
push 保留路由栈,go 会重置栈。
- 通过
state.extra 传递复杂对象参数。
GoRouter 简化了路由逻辑,适合中大型应用。详细用法参考 官方文档。