【发布时间】:2021-06-13 08:33:40
【问题描述】:
我的应用程序使用带有 auto_router 0.6.9 包的 Flutter,我希望 用户能够输入网址 http://localhost/#/book/123 并能够访问 book 123 并显示book123、他们的姓名和电子邮件(如果他们已登录)。我已经用 auto_router 弄清楚了路由部分,但是当用户直接将地址输入浏览器时,应该将参数传递到页面中。
我想知道有没有办法在显示页面之前解析 url 并传入所需的参数。感谢您的帮助或提示!
我的 router.dart 页面:
@MaterialAutoRouter(
routes: <AutoRoute>[
// some other pages...
MaterialRoute(path: "/book/:id", page: MultiProvider),
],
)
class $ModularRouter {}
为多提供者参数类生成的 router.gr.dart 是:
/// MultiProvider arguments holder class
class MultiProviderArguments {
final Key key;
final List<SingleChildWidget> providers;
final Widget child;
final Widget Function(BuildContext, Widget) builder;
MultiProviderArguments(
{this.key, @required this.providers, this.child, this.builder});
}
我的图书菜单页面包含导航:
(这是我通常如何在另一个页面中调用 BookPage 的示例)
child: GestureDetector(
onTap: () => ExtendedNavigator.of(context).push(
Routes.multiProvider(id: book[index].bookID),
arguments: MultiProviderArguments(
providers: [
Provider<UserData>.value(
value: userdata,
),
Provider<List<BookInfo>>.value(
value: book,
),
],
child: BookPage(
bookId: book[index].bookID,
name: userdata.userName,
email: userdata.email,
),
),
),
...
BookPage 接受 3 个参数 bookId、name 和 email:
class BookPage extends StatefulWidget {
final String bookId;
final String name;
final String email;
BookPage({
this.bookId,
this.name,
this.email,
});
...
}
...
class _BookPageState extends State<BookPage> {
...
Widget build(BuildContext context) {
final currentUser = Provider.of<UserData>(context, listen: false);
final currentBook = Provider.of<List<BookInfo>>(context, listen: false);
...
}
}
【问题讨论】: