Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/smartwalle/sm_router
flutter router (navigator 2)
https://github.com/smartwalle/sm_router
flutter navigator2 router
Last synced: 1 day ago
JSON representation
flutter router (navigator 2)
- Host: GitHub
- URL: https://github.com/smartwalle/sm_router
- Owner: smartwalle
- License: mit
- Created: 2022-05-30T00:41:48.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-04-27T04:41:22.000Z (8 months ago)
- Last Synced: 2024-11-08T20:29:29.483Z (about 2 months ago)
- Topics: flutter, navigator2, router
- Language: Dart
- Homepage:
- Size: 194 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
Flutter Navigator 2.0 路由管理。
## 快速使用
#### 注册路由
```dart
KIRouter.handle("/", (ctx) =>
const Home();
);
KIRouter.handle("/test", (ctx) =>
const TestView();
);
```#### 设置 MaterialApp 的 routeInformationParser 和 routerDelegate
```dart
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);@override
Widget build(BuildContext context) {
return MaterialApp.router(
routeInformationParser: KIRouter.routeInformationParser,
routerDelegate: KIRouter.routerDelegate,
);
}
}
```#### 跳转到指定路由
```dart
KIRouter.push("/test?a=10");
```## KIRouterContext
KIRouterContext 对象主要提供以下信息:
* **routeName**:路由名称。例如: /test;
* **requestName**:请求名称,包含路由查询参数。例如: /test?a=10;
* **arguments**:路由参数,即 pushXXX 系列方法中提供的 arguments 参数(建议只在非 web 应用中使用);
* **queryParam**:路由查询参数,来源于 pushXXX 系列方法中的 routeName 参数,让 routeName 像 URL 一样可以指定参数(和 arguments 参数相比,在 web 应用中,param 参数不会因浏览器刷新而丢失)。例如: ctx.queryParam.get("a");
* **data**:自定义数据,可以从路由拦截器传递一些信息到路由处理器;## 拦截器
注册路由方法会返回一个路由节点对象,可以调用该路由节点对象的 use 方法为该路由添加路由拦截器。
一个路由可以添加多个拦截器,访问该路由时,其拦截器将被依次被调用,所有拦截器都通过之后才会执行路由处理器。
拦截器如果返回一个有效的 KIRedirect 对象,则表示本次访问被拦截,将显示该 KIRedirect 相关的页面,该路由后续的拦截器和处理器将不会被执行。
拦截器返回 null 对象,表示本次访问通过该拦截器的验证。
```dart
KIRouter.handle("/profile", (ctx) => const YourView()).use((ctx) {
if (isLogin) {
// 已登录,不需要拦截
return ;
}
// 未登录,需要显示登录页面
return KIRedirect("/login");
});
```### 全局拦截器
可以调用 KIRouter.use() 方法添加全局拦截器,全局拦截器作用于所有的路由。
访问一个路由的时候,将先执行全局拦截器,然后再执行路由的拦截器。