gpt4 book ai didi

flutter - 无法在 Flutter 的 showModal 上下文中访问 bloc

转载 作者:行者123 更新时间:2023-12-03 03:49:51 24 4
gpt4 key购买 nike

我用 dart BlocProvider<ABloc,AState> 包裹我的脚手架
但是当我使用 显示对话 功能和 显示对话 我想从上下文访问 ABloc 或 BlocBuilder
不包含 block 并抛出错误
在这种情况下有没有办法访问 bloc
(在我的对话框中,我显示了获取用户名的文本,所以我想访问 bloc)

class MyHomePageState extends StateLessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
lazy: false,
create: (context) => EditColorBloc(context.bloc<RetrieveColorBloc>()),
child: MainScafold());
}
}
class MainScafold extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("sina"),
),
floatingActionButton:FloatingActionButton(
child: Icon(Icons.add),
onPressed: () => showDialog(
context: context,
builder: (ctx) {
// show dialog and use
// context o BlocBuilder to access
// EditColorBloc
// throw error BlocProvider.of() called with a context that does
// not contain a Cubit of type EditColorBloc
}
)
}
}

最佳答案

更新 v6.1.0
(归功于 @Sebastian Dennis )context.bloc已弃用,取而代之的是提供者的 context.read , context.watch , 和 context.select .在下面的代码中,只需更改 context.bloc<TestBloc>context.read<TestBloc>
你不应该使用 BlocBuilder包装 Dialog .原因是您(很可能)没有重建整个 Dialog每当发生变化时。另一个更重要的原因是您的 Dialog正在构建中不包含您的 bloc ,所以你需要注入(inject)你的bloc实例到 Dialogcontext .
相反,请使用 BlocProvider.value并设置 value BlocProvider.of(context) 的参数(又名 context.bloc() ),并确保上下文不是 showDailog的方法上下文,但是原来build中的上下文方法。
这是一个工作示例。您只需更改 TestBlocTestState等到你自己的Bloc实例:

  @override
Widget build(BuildContext context) {
return BlocProvider<TestBloc>(
create: (context) => TestBloc(InitTestState()),
child: Scaffold(
body: BlocBuilder<TestBloc, TestState>(
builder: (context, state) => Center(
child: FlatButton(
child: Text("Show Dialog"),
onPressed: () => showDialog(
context: context,

// Relavent code change here
builder: (ctx) => BlocProvider<TestBloc>.value(
value: context.bloc<TestBloc>(),

child: Dialog(
child: FlatButton(
child: Text("Notify bloc"),
onPressed: () => context
.bloc<TestBloc>()
.add(TestEvent()),
),
),
)),
),
),
)));

关于flutter - 无法在 Flutter 的 showModal 上下文中访问 bloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63919070/

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