1

我在我的应用程序中使用 provider 和 flutter_bluc。现在我正在努力解决这个问题:一个新状态被传递给 BlocBuilder,它重建了 Widget Tree UI 的一部分。我还想要更新我的bottomNavigationVisibility,它扩展了ChangeNotifier。我使用这个bottomNavigationVisibility 来更新小部件树的另一部分。

这样我就可以轻松地为我的 UIViews 恕我直言实现良好的分离逻辑。但是,现在我总是收到此错误:

在构建期间调用 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();
  }
}

在返回特定的块状态后,我应该如何更改我的代码以从小部件 A 更新我的 ChangeNotifier,这在小部件 B 中观察到?

另外,我可能是错的,并且将 Provider 用于带有 flutter_bloc 的单独 UI 部分是一个糟糕的组合吗?

4

0 回答 0