Hen*_*hur 17 flutter bloc flutter-provider
我在一个小部件树中有一个 FloatingActionButton ,它有一个BlocProviderfrom flutter_bloc。像这样的东西:
BlocProvider(
builder: (context) {
SomeBloc someBloc = SomeBloc();
someBloc.dispatch(SomeEvent());
return someBloc;
},
child: Scaffold(
body: ...
floatingActionButton: FloatingActionButton(
onPressed: _openFilterSchedule,
child: Icon(Icons.filter_list),
),
)
);
Run Code Online (Sandbox Code Playgroud)
这将打开一个模态底部工作表:
void _openFilterSchedule() {
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return TheBottomSheet();
},
);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试SomeBloc使用BlocProvider.of<SomeBloc>(context)inside访问,TheBottomSheet但出现以下错误:
BlocProvider.of() called with a context that does not contain a Bloc of type SomeBloc.
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用/sf/answers/3957352801/ 中描述的解决方案,但仅适用于BottomSheet而不适用于ModalBottomSheet。
注意:这不限于BlocProvider或flutter_bloc。provider包中的任何 Provider都具有相同的行为。
我怎样才能访问BlocProvider.of<SomeBloc>(context)里面的showModalBottomSheet?
如果无法做到这一点,如何将/sf/answers/3957352801/解决方案适应Modal Bottom Sheet?
Rém*_*let 40
InheritedWidgets 和 Providers 的作用域是小部件树。不能在该树之外访问它们。
问题是,使用showDialog和类似的功能,对话框位于不同的小部件树中 - 它可能无法访问所需的提供程序。
因此,有必要在新的小部件树中添加所需的提供程序:
void myShowDialog() {
final myModel = Provider.of<MyModel>(context, listen: false);
showDialog(
context: context,
builder: (_) {
return Provider.value(value: myModel, child: SomeDialog());
},
);
}
Run Code Online (Sandbox Code Playgroud)
小智 13
showModalBottomSheet(底页)中的提供者
void myBottomSheet() {
final myModel = Provider.of<MyModel>(context, listen: false);
showModalBottomShee(
context: context,
builder: (_) {
return ListenableProvider.value(
value: myModel,
child: Text(myModel.txtValue),
);
},
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5479 次 |
| 最近记录: |