使用bloc和setState进行状态管理好吗?基本上,当我需要在其他类(屏幕)共享状态时,我使用bloc来控制状态,但我在可重用组件(如文本字段)中使用setState,在那里我控制错误消息,模糊文本等。我认为这也不一定要在业务逻辑中。所以我想知道这是不是一个好的做法。Thanks!
zf9nrax11#
在有状态小部件中使用setState没有问题,即使您使用的是BLoC。不幸的是,我没有使用BLoC,但是如果你可以在BLoC中管理错误消息,那就更好了,因为你可以只使用BLoC,而可以使用无状态的小部件,这将比有状态的小部件更不频繁地重建。在我看来,在同一个小部件中使用setState和BLoC没有什么大的危害。
setState
btxsgosb2#
建议不要在BlocListener中使用setState(如果可能),因为BlocListener本身就是用来控制状态的(它可以提高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。注意-你可以用与上面例子相同的方式实现你的文本域
2条答案
按热度按时间zf9nrax11#
在有状态小部件中使用
setState
没有问题,即使您使用的是BLoC。不幸的是,我没有使用BLoC,但是如果你可以在BLoC中管理错误消息,那就更好了,因为你可以只使用BLoC,而可以使用无状态的小部件,这将比有状态的小部件更不频繁地重建。在我看来,在同一个小部件中使用setState和BLoC没有什么大的危害。
btxsgosb2#
建议不要在BlocListener中使用setState(如果可能),因为BlocListener本身就是用来控制状态的(它可以提高UI的可读性和一致性)。相反,尝试在需要重建的零件上使用BlocBuilder。这可能会限制您在UI方面实现您想要的功能,但如果操作正确,它也可以优化您的应用程序。例如,只在需要UI更新的小部件上使用BlocBuilder(针对特定的小部件)
这是一个使用BlocBuilder显示简单加载用户反馈的简单场景。然而,这种实现可能会限制您实现需要全局状态标志的复杂UI,在这种情况下,我很少在BlocListener中使用setState。
注意-你可以用与上面例子相同的方式实现你的文本域