我在我的应用程序中使用 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 部分是一个糟糕的组合吗?