提供程序和在构建过程中调用的flutter_bloc setState()或markNeedsBuild()

时间:2020-01-22 19:59:22

标签: flutter flutter-layout provider flutter-bloc

我在我的应用程序中使用了provider和flutter_bluc。现在,我正在为这种情况而苦苦挣扎:将新状态传递给BlocBuilder,该状态将重建Widget Tree UI的一部分。我想要的是还更新我的bottomNavigationVisibility,它扩展了ChangeNotifier。。我使用此 bottomNavigationVisibility来更新小部件树的另一部分。

这样,我可以轻松实现UIViews IMHO的良好分离逻辑。但是,现在我总是会收到此错误:

在构建过程中调用

setState()或markNeedsBuild()

以下是代码示例:

  @override
  Widget build(BuildContext context) {
    final bottomNavigationVisibility =
        Provider.of<ProviderBottomNavigation>(context);
    ...
 Container(
                height: 60.0,
                child: BlocBuilder<SoundsblocBloc, SoundsblocState>(
                    condition: (previousState, state) {
                  if (previousState is InitialSoundsblocLoading) return true;
                  return false;
                }, builder: (context, state) {
                  if (state is InitialSoundsblocLoaded) {
                    if (state.sounds
                        .where((sound) => sound.focused)
                        .toList()
                        .isEmpty) {

                      bottomNavigationVisibility.isVisibleT(false);
                    } else {
                      bottomNavigationVisibility.isVisibleT(true);
                    }
                  }

                  return ListView.builder(
                      itemCount: listOfSounds.length,
                      ...
                })),

class ProviderBottomNavigation extends ChangeNotifier {
  bool _isVisible = false;

  bool get isVisible => _isVisible;

  void isVisibleT(bool val) {
    _isVisible = val;
    notifyListeners();
  }
}

在返回特定的整体状态后,如何更改代码以从小部件B中更新小部件A中的ChangeNotifier?

另外,我是否可能会出错,并且将Provider与flutter_bloc一起用于单独的UI部件是很糟糕的组合

0 个答案:

没有答案