gpt4 book ai didi

flutter - 如何访问 showModalBottomSheet 中提供的 (Provider.of()) 值?

转载 作者:IT王子 更新时间:2023-10-29 07:15:21 47 4
gpt4 key购买 nike

我在小部件树中有一个 FloatingActionButton,它有一个 BlocProvider来自 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),
),
)
);

打开模态底页:

void _openFilterSchedule() {
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return TheBottomSheet();
},
);
}

我正在尝试访问 SomeBloc使用 BlocProvider.of<SomeBloc>(context)里面TheBottomSheet但我收到以下错误:

BlocProvider.of() called with a context that does not contain a Bloc of type SomeBloc.

我已尝试使用 https://stackoverflow.com/a/56533611/2457045 中描述的解决方案但只适用于 BottomSheet而不是 ModalBottomSheet .


注意:这不限于 BlocProviderflutter_bloc .来自 provider 的任何提供商包具有相同的行为。

如何访问 BlocProvider.of<SomeBloc>(context)showModalBottomSheet里面?

如果无法做到这一点,如何调整 https://stackoverflow.com/a/56533611/2457045 Modal Bottom Sheet 的解决方案?

最佳答案

InheritedWidgets 以及 Provider 的范围都限定在小部件树中。无法在该树之外访问它们。

问题是,使用 showDialog 和类似的功能,对话框位于不同的小部件树中——它可能无法访问所需的提供程序。

因此有必要在新的小部件树中添加所需的提供者:

void myShowDialog() {
final myModel = Provider.of<MyModel>(context, listen: false);
showDialog(
context: context,
builder: (_) {
return Provider.value(value: myModel, child: SomeDialog());
},
);
}

关于flutter - 如何访问 showModalBottomSheet 中提供的 (Provider.of()) 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547784/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com