Flutter路由管理插件simple_router的使用
Flutter路由管理插件simple_router的使用
使用
最简单的方式是将由Router
提供的navigatorKey
设置到Material App中。这样你可以在应用程序的任何地方进行导航(包括没有BuildContext的地方),甚至包括BloC。
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: SimpleRouter.getKey(),
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Router Example'),
);
}
}
另外,你可以实现Router
的两个函数:onBeforePush
和onAfterPush
,这两个函数在导航发生之前和之后被调用。它们非常适合用来实现一些日志记录,例如当进入或离开页面时。
你可以选择Material或Cupertino过渡效果。要选择Cupertino效果,只需将SimpleRouter
的useCupertinoTransition
设置为true(默认值为false)。
完整示例代码
以下是一个完整的示例代码,展示了如何使用simple_router
插件进行路由管理。
import 'package:example/page2.dart';
import 'package:flutter/material.dart';
import 'package:simple_router/simple_router.dart';
void main() {
// 设置路由前后的回调函数
SimpleRouter.onBeforePush = (widget) {
print('[Router]: Navigated to ${widget.toString()}');
};
SimpleRouter.onAfterPush = (widget) {
print('[Router]: Navigated out of ${widget.toString()}');
};
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: SimpleRouter.getKey(), // 设置navigatorKey
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Router Example'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Home page',
)
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => SimpleRouter.forward(Page2()), // 跳转到Page2
child: Icon(Icons.chevron_right),
),
);
}
}
更多关于Flutter路由管理插件simple_router的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter路由管理插件simple_router的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
simple_router
是一个轻量级的 Flutter 路由管理插件,它简化了路由管理的复杂性,使得开发者可以更专注于业务逻辑。simple_router
提供了简单易用的 API 来管理页面之间的跳转和参数传递。
安装
首先,你需要在 pubspec.yaml
文件中添加 simple_router
依赖:
dependencies:
flutter:
sdk: flutter
simple_router: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
1. 初始化路由
在你的 main.dart
文件中,初始化 SimpleRouter
并定义路由:
import 'package:flutter/material.dart';
import 'package:simple_router/simple_router.dart';
void main() {
SimpleRouter.configure(
routes: {
'/': (context, args) => HomePage(),
'/details': (context, args) => DetailsPage(args: args),
},
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
onGenerateRoute: SimpleRouter.onGenerateRoute,
initialRoute: '/',
);
}
}
2. 页面跳转
使用 SimpleRouter
进行页面跳转:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Page'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 跳转到详情页并传递参数
SimpleRouter.push(context, '/details', args: {'id': 123});
},
child: Text('Go to Details'),
),
),
);
}
}
3. 接收参数
在目标页面中接收传递的参数:
class DetailsPage extends StatelessWidget {
final Map<String, dynamic> args;
DetailsPage({required this.args});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Details Page'),
),
body: Center(
child: Text('Details ID: ${args['id']}'),
),
);
}
}
4. 返回上一页
使用 SimpleRouter.pop
返回上一页:
class DetailsPage extends StatelessWidget {
final Map<String, dynamic> args;
DetailsPage({required this.args});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Details Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Details ID: ${args['id']}'),
ElevatedButton(
onPressed: () {
// 返回上一页
SimpleRouter.pop(context);
},
child: Text('Go Back'),
),
],
),
),
);
}
}
高级用法
1. 嵌套路由
simple_router
支持嵌套路由,你可以在一个页面中定义子路由:
SimpleRouter.configure(
routes: {
'/': (context, args) => HomePage(),
'/details': (context, args) => DetailsPage(args: args),
},
nestedRoutes: {
'/details': {
'/sub': (context, args) => SubDetailsPage(args: args),
},
},
);
2. 路由拦截
你可以在路由跳转之前进行拦截,例如检查用户是否登录:
SimpleRouter.configure(
routes: {
'/': (context, args) => HomePage(),
'/details': (context, args) => DetailsPage(args: args),
},
onBeforePush: (context, route, args) async {
// 检查用户是否登录
bool isLoggedIn = await checkLoginStatus();
if (!isLoggedIn) {
SimpleRouter.push(context, '/login');
return false; // 阻止当前路由跳转
}
return true; // 允许路由跳转
},
);