Nit*_*Sai 3 flutter bloc flutter-bloc
我正在Flutter Bloc一个项目中使用。
这是结构:
MultiBlocProvider(
providers: [
BlocProvider<BlocA>(
create: (context) {
return BlocA()
..add(FetchEvent());
},
),
BlocProvider<BlocC>(
create: (context) {
return BlocC()..add(FetchEvent());
},
),
],
child: IndexedStack(
index: _pageNum,
children: [
ChildA(),
ChildB(),
],
),
)
Run Code Online (Sandbox Code Playgroud)
里面ChildB我有 aNavigator.push()到 a ChildC,BlocC正在使用 ( BlocConsumer),但我收到错误,
Flutter could not find the correct Provider above BlocConsumer<BlocC> Widget
Run Code Online (Sandbox Code Playgroud)
编辑
有一个按钮可以在按下时ChildB导航到。ChildC喜欢,
TextButton( // this code exists inside a scaffold widget
child: Text("Page C"),
onPressed: () {
Navigator.push(context, CupertinoPageRoute(builder: (context) => ChildC()));
}
),
Run Code Online (Sandbox Code Playgroud)
这是集团消费者ChildC
Flutter could not find the correct Provider above BlocConsumer<BlocC> Widget
Run Code Online (Sandbox Code Playgroud)
编辑2
我找到了这个答案,显然,这是使用时的问题Navigator.push。不过,如果有人知道如何解决我的情况,请告诉我
提供者是有范围的。这意味着只有您的提供者的子树(您的子小部件)可以访问它。当您推送新页面时,它会将其推送到MaterialApp路由器(应用程序的默认根路由器),并且您的小部件树如下所示:
MaterialApp
|- Provider
| |- TextButton (with onPressed: () => Navigator.push())
|- ChildC
Run Code Online (Sandbox Code Playgroud)
如您所见,您的ChildC不在Provider(s) 下方。
解决这个问题的一种方法是将您的提供商移至您的之上MaterialApp:
Provider
|- MaterialApp
| |- TextButton (with onPressed: () => Navigator.push())
| |- ChildC
Run Code Online (Sandbox Code Playgroud)
您可以将页面推送到位于以下位置的嵌套路由器Provider:
MaterialApp
|- Provider
| |- Router
| | |- TextButton (with onPressed: () => Navigator.push())
| | |- ChildC
Run Code Online (Sandbox Code Playgroud)
BlockC上述信息ChildC:MaterialApp
|- Provider
| |- TextButton (with onPressed: () => Navigator.push())
|- ChildC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |