使用MultiBlocProvider时,如何从GoRouter访问url路径参数



目前我们正在我的公司构建一个学习Flutter和Bloc模式的应用程序。我们使用MultiRepositoryProvider作为主要小部件,并使用GoRouter进行路由。我的路线是这样的:

GoRoute(
path: '/game/:id',
builder: (context, state) => GameDetailScreen(),
),

MultiRepositoryProvider中,子级是MultiBlocProvider,此屏幕的提供者是:

BlocProvider(
create: (BuildContext context) {
return GameDetailBloc(context.read<FirestoreRepo>());
},
),

BlocProvider的create函数返回BuildContext,但我不清楚如何获得GoRoute状态以将url参数id传递给GameDetailBloc

在创建GameDetailScreen时,我们通过在GoRoute的构建函数中设置游戏的id来实现这一点。然后我们删除了CCD_ 11中的CCD_ 10,然后在构建小部件时从CCD_;正确的解决方案";对于这个问题。非常感谢您的帮助。谢谢

go_router的状态为params

因此将state传递到页面


路由器

GoRoute(
name: "test",
path: "/test/:id",
builder: (context, state) {
return SampleWidget(
goRouterState: state,  👈 Pass state here
);
},
),

用法

context.goNamed("test", params: {"id": "123"}),

页面中的重音

class SampleWidget extends StatelessWidget {
GoRouterState? goRouterState;
SampleWidget({super.key, this.goRouterState});
@override
Widget build(BuildContext context) {
print(goRouterState?.params.toString()); 👈 access anywhere like so
return const Scaffold(
body: ...
);
}
}

我不能完全理解这个问题。我试图根据我的理解来回答。如果你还有其他要求,请告诉我具体情况

Uri.base.toString().replaceAll(Uri.base.origin, '')

最新更新