![enter image description here](https://istack.dev59.com/DcEDO.webp)
简而言之
Below Go Router 7 i.e < 7.0.0 use `params`, `queryParams`
Above Go Router 7 i.e >=7.0.0 use `pathParameters`, `queryParameters`
摘要:
有三种方式:pathParameters
、queryParameters
、extra
- 使用
pathParameters
- 当你事先知道参数的数量时
- 用法:
path = '/routeName/:id1/:id2'
- 使用
queryParameters
- 当你不确定参数的数量时
- 用法:
path = '/routeName'
- 使用
extra
解释:
1. 使用 pathParameters
当您事先知道参数的数量时,请在 context.goNamed()
中使用 pathParameters
属性。
将其定义为:
GoRoute(
path: '/sample/:id1/:id2',
name: 'sample',
builder: (context, state) => SampleWidget(
id1: state.pathParameters['id1'],
id2: state.pathParameters['id2'],
),
),
称之为:
ElevatedButton(
onPressed: () {
var param1 = "param1";
var param2 = "param2";
context.goNamed("sample", pathParameters: {'id1': param1, 'id2': param2});
},
child: const Text("Hello"),
),
以以下方式接收:
class SampleWidget extends StatelessWidget {
String? id1;
String? id2;
SampleWidget({super.key, this.id1, this.id2});
@override
Widget build(BuildContext context) {
...
}
}
2. 使用 queryParameters
在 context.goNamed()
函数中,您可以访问到 queryParameters
。关于 queryParameters
最好的一点是,您不需要在路由路径中显式定义它们,并且可以通过 state.queryParameters
方法轻松访问它们。您可以将各种与用户相关的数据添加为查询参数。
将其定义为:
GoRoute(
name: "sample",
path: "/sample",
builder: (context, state) => SampleWidget(
id1: state.queryParameters['id1'],
id2: state.queryParameters['id2'],
),
)
称之为:
ElevatedButton(
onPressed: () {
var param1 = "param1";
var param2 = "param2";
context.goNamed("sample", queryParameters: {'id1': param1, 'id2': param2});
},
child: const Text("Hello"),
),
以以下方式接收:
class SampleWidget extends StatelessWidget {
String? id1;
String? id2;
SampleWidget({super.key, this.id1, this.id2});
@override
Widget build(BuildContext context) {
...
}
}
3. 使用 extra
当你想在路由之间传递一个 model/object
时,请使用此功能。
GoRoute(
path: '/sample',
builder: (context, state) {
Sample sample = state.extra as Sample;
return GoToScreen(object: sample);
},
),
参考
https://dev59.com/EX0QtIcB2Jgan1znbFEa#74813017以了解在路由之间传递
object
的方法。