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()

不确定是否符合最佳实践,我对 cme​​ts 持开放态度,但现在它可以工作。

【讨论】:

以上是关于Flutter 基础状态管理的主要内容,如果未能解决你的问题,请参考以下文章

Flutter——sdk:状态管理provider

Flutter——sdk:状态管理provider

Flutter如何状态管理

flutter学习-状态State管理

Flutter状态管理终极方案GetX第二篇——状态管理

Flutter 状态管理 实践记录