Flutter 基础状态管理
Posted
技术标签:
【中文标题】Flutter 基础状态管理【英文标题】:Flutter base state management 【发布时间】:2021-05-03 07:39:19 【问题描述】:我正在通过构建应用程序来学习 Flutter。我已经实现了BLoC pattern
来调用rest api 并向小部件提供数据。但是根据我的理解,这是需要它的视图的一些数据。我想在大多数小部件上都有Settings
按钮,我可以在其中显示当前登录的用户信息,能够更改他的语言、主题、一些特定的选定数据等。基本上是应用程序的基本状态。 BLoC pattern
是这种方法吗?还是有更好的方法?
如果是,有什么方法可以做到这一点。如何处理多个StreamBuilder
,例如一个用于从 api 接收数据,一个用于更新状态?
我知道我可以用单例类来做这件事并使用get-it plugin
注册它,但如果有更好的方法我会跳过这个。
【问题讨论】:
【参考方案1】:Google 对管理状态的建议是使用Provider Package。 但始终取决于您需要做什么。
Provider的作者发布了一个更好的provider版本,叫做Riverpod。但我认为还没有准备好投入生产。
【讨论】:
【参考方案2】:如果有人遇到,我已经用flutter_bloc
插件做到了。 BlocProvider
在 @Fer Buero Trebino 提到的 provider
包之上工作
class ApplicationStateBloc extends Cubit<ApplicationState>
ApplicationStateBloc() : super(new ApplicationState());
void updateWhatEver(Whatever whatever)
state.whatever = whatever;
emit(state);
ApplicationState getCurrentState() => state;
然后为了不处理没有提供者和东西的上下文,在应用程序加载时注册它
void main()
setup();
runApp(
MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => ApplicationStateBloc()
)
],
child: App())
);
然后访问每个小部件中的状态很简单
BlocProvider.of<ApplicationStateBloc>(context).getCurrentState()
不确定是否符合最佳实践,我对 cmets 持开放态度,但现在它可以工作。
【讨论】:
以上是关于Flutter 基础状态管理的主要内容,如果未能解决你的问题,请参考以下文章