我有带有 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
or Provider.of()
,子树中的小部件应该监听变化。
这是预期的行为吗?难道我做错了什么?
任何帮助表示赞赏,谢谢!