Flutter快速路由管理插件quick_router的使用
Flutter快速路由管理插件quick_router的使用

一个用于Flutter的快速路由机制,用于处理紧急的深层链接。
开始使用
导入该包并创建尽可能多的QuickRoute
小部件。它们可以嵌套,这样它们将在父级路由分析路径时开始分析。
安装
flutter pub add quick_router
使用
在这个例子中,onGenerateRoute
被使用,但QuickRoute
只需要一个path
(URL),并且它将向下分析路径的段。
void main() {
runApp(MaterialApp(
onGenerateRoute: (settings) {
String url = settings.name; // URL作为基础...
return QuickRoute(path: url, match:"/library", child:Column(children:[
QuickRoute(match:"/horror", child:Text("Horror books")), // 将在/library/horror运行
QuickRoute(match:"/drama", child:Text("Drama books")), // 将在/library/drama运行
]));
}
));
}
单个组件
QuickRoute
是一个如果具有path
则会作为主要路由的小部件。任何子QuickRoute
将从父级路由匹配的路径段开始分析,并继续进行。
每个路由都会创建一个可以通过调用context.quickRouteContext?
访问的上下文,并且会暴露一个获取参数的方法param
。
方法T param<T>(String paramKey)
允许你将参数强制转换为特定类型。
获取URL参数
你可以通过构建上下文获取这些参数,如下所示:
@override
Widget build(BuildContext context) {
// 如果URL是/some/url/:someKey/etc/:count
// 并且实际URL是:/some/url/magic/etc/123
var myParamValue = context.quickRouteContext?.param<String>("someKey"); // = magic
var myParamValue2 = context.quickRouteContext?.param<int>("count"); // = 123
return Text("child param: $myParamValue;");
}
有三种类型的参数:
- URL段 这种形式如
/some/:wildcard/path
,在这种情况下wildcard
将是一个参数,匹配斜杠之间的任何内容。
// 假设匹配模式是:/some/awesome/:wildcard/path
// 而路径是:/some/awesome/impressive/path
var myParamValue = context.quickRouteContext?.param<String>("wildcard"); // == "impressive"
- 查询字符串 查询字符串部分中的任何内容都将添加到带有
?
前缀的参数集合中。因此/some/url?nice=string&foo=bar
将添加?nice
和?foo
到参数中。
// 假设匹配模式是:/some/awesome/path
// 而路径是:/some/awesome/path?and=some&query=value
var myParamValue = context.quickRouteContext?.param<String>("?query"); // == "value"
- 哈希 与查询字符串相同,但适用于哈希值:
/some/path#foo=bar&batman=forever
将包含#foo
和#batman
在参数中。
// 假设匹配模式是:/some/awesome/path
// 而路径是:/some/awesome/path#and=some&query=value
var myParamValue = context.quickRouteContext?.param<String>("#query"); // == "value"
更多关于Flutter快速路由管理插件quick_router的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter快速路由管理插件quick_router的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
quick_router
是一个用于 Flutter 应用的快速路由管理插件,它简化了路由配置和导航的过程。通过使用 quick_router
,开发者可以更方便地管理应用中的页面跳转和路由逻辑。
安装
首先,你需要在 pubspec.yaml
文件中添加 quick_router
依赖:
dependencies:
flutter:
sdk: flutter
quick_router: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
-
创建路由表
首先,你需要创建一个路由表,将路由名称映射到相应的页面组件。
import 'package:flutter/material.dart'; import 'package:quick_router/quick_router.dart'; class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Home')), body: Center( child: ElevatedButton( onPressed: () { QuickRouter.of(context).push('/details'); }, child: Text('Go to Details'), ), ), ); } } class DetailsPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Details')), body: Center( child: ElevatedButton( onPressed: () { QuickRouter.of(context).pop(); }, child: Text('Go Back'), ), ), ); } } final routes = { '/': (context) => HomePage(), '/details': (context) => DetailsPage(), };
-
配置路由
在
MaterialApp
中使用QuickRouter
来配置路由。import 'package:flutter/material.dart'; import 'package:quick_router/quick_router.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'QuickRouter Demo', initialRoute: '/', onGenerateRoute: QuickRouter.generateRoute(routes), ); } }
-
导航
使用
QuickRouter.of(context)
来进行页面跳转。// 跳转到详情页 QuickRouter.of(context).push('/details'); // 返回上一页 QuickRouter.of(context).pop(); // 替换当前页面 QuickRouter.of(context).replace('/newPage'); // 跳转到新页面并清除所有历史记录 QuickRouter.of(context).pushAndRemoveUntil('/newPage');
高级用法
-
传递参数
你可以在跳转页面时传递参数,并在目标页面中获取这些参数。
// 跳转时传递参数 QuickRouter.of(context).push('/details', arguments: {'id': 123}); // 在目标页面中获取参数 class DetailsPage extends StatelessWidget { @override Widget build(BuildContext context) { final args = QuickRouter.of(context).arguments as Map<String, dynamic>; final id = args['id']; return Scaffold( appBar: AppBar(title: Text('Details $id')), body: Center( child: ElevatedButton( onPressed: () { QuickRouter.of(context).pop(); }, child: Text('Go Back'), ), ), ); } }
-
中间件
quick_router
支持路由中间件,你可以在跳转前执行一些逻辑,例如检查用户是否登录。final routes = { '/': (context) => HomePage(), '/details': (context) => DetailsPage(), }; final middleware = [ (context, route) { if (route == '/details') { // 检查用户是否登录 if (!isLoggedIn) { QuickRouter.of(context).push('/login'); return false; // 阻止跳转 } } return true; // 允许跳转 } ]; onGenerateRoute: QuickRouter.generateRoute(routes, middleware: middleware),