【发布时间】:2021-08-28 11:34:37
【问题描述】:
我有带有 CubitA 和 StateA 的 ScreenA。从 ScreenA,我打开一个模态底部表,并通过 BlocProvider.value() 传递 CubitA。 我在 BottomSheet 小部件中也有一个 BlocBuilder。
我可以在工作表内部正确使用 CubitA(例如:按下按钮时调用内部方法),但 BottomSheet 中的状态在更改后不会更新。
代码
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (_) {
final cubit = Provider.of<CubitA>(context);
return BlocProvider.value(
value: cubit,
child: BottomSheetContent(),
);
},
);
BottomSheetWidget
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.fromLTRB(30, 20, 30, 20),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(30),
topRight: Radius.circular(30),
)),
child: SafeArea(
top: false,
child: BlocBuilder<OffersMapCubit, OffersMapState>(
bloc: context.watch<OffersMapCubit>(),
builder: (context, state) {
THIS IS ONLY CALLED ONCE AT STARTUP BUT NEVER AGAIN
return Content()...
);
}),
),
);
}
根据文档 (https://pub.dev/packages/flutter_bloc),通过使用 watch 或 Provider.of(),子树中的小部件应侦听更改。
这是预期的行为吗? 我是不是做错了什么?
感谢任何帮助,谢谢!
【问题讨论】:
标签: flutter flutter-bloc flutter-showmodalbottomsheet