目前我们正在我的公司构建一个学习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, '')