国家管理与setState和集团



使用bloc和setState进行状态管理好吗?基本上,当我需要在其他类(屏幕(中共享状态时,我使用bloc来控制状态,但我在可重复使用的组件中使用setState,如文本字段,我在其中控制错误消息、模糊文本等。我认为这也不必在业务逻辑中。所以我想知道这是不是一个好的做法。

谢谢!!!

即使使用BLoC,在有状态的小部件中使用setState也没有问题。I、 不幸的是,不要使用BloC,但如果你能在BloC中管理错误消息,那可能会更好,因为你只能使用BloC,而你可以使用无状态小部件,它的重建频率将低于有状态小部件。

在我看来,在同一个小部件中使用setState和BLoC没有什么大的危害。

不建议在BlocListener内部使用setState(如果可能(,因为BlocLister本身是用来控制状态的(它提高了UI的可读性和一致性(。相反,请尝试在需要重建的零件上使用BlocBuilder。这可能会限制你在UI方面实现你想要的,但如果操作正确,它也可以优化你的应用程序。例如,只在需要UI更新的窗口小部件上使用BlocBuilder(针对特定窗口小部件(

BlocBuilder<Bloc, BlocState>(
builder:(context, state){
bool isLoading = state is LoadingBloc;
return ElevatedButton(
onPressed: ()=>BlocProvider.of<Bloc>(context).add(BlocEvent),
style: ElevatedButton.styleFrom(size: Size.fromRadius(20),),
child: isLoading?CircularProgressIndicator():Text('Load data'),
);
}

这是一个使用BlocBuilder显示简单加载用户反馈的简单场景。然而,这种实现可能会限制您实现需要全局状态标志的复杂UI,而且在这种情况下,我很少在BlocListener中使用setState
NB-您可以按照与上述示例相同的方式实现您的文本字段

最新更新