我有ScreenA和CubitA和StateA。在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()
,子树中的小部件应该侦听更改。
这是预期的行为吗?我做错什么了吗?
感谢您的帮助!
我遇到了同样的问题。一旦你合上底部的床单,你就需要处理掉这个小隔间。其行为是,底部的小部件一旦关闭就会被处理掉,因此我们需要重新创建我们的立方体。