1

我有带有 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),通过使用watchor Provider.of(),子树中的小部件应该监听变化。

这是预期的行为吗?难道我做错了什么?

任何帮助表示赞赏,谢谢!

4

1 回答 1

0

我遇到过同样的问题。关闭底页后,您需要处理肘。行为是底部表单小部件在关闭后被处理掉,因此我们需要重新创建我们的 cubit。

于 2021-09-13T15:46:46.450 回答