【问题标题】:Flutter base state managementFlutter 基础状态管理
【发布时间】:2021-05-03 07:39:19
【问题描述】:

我正在通过构建应用程序来学习 Flutter。我已经实现了BLoC pattern 来调用rest api 并向小部件提供数据。但是根据我的理解,这是需要它的视图的一些数据。我想在大多数小部件上都有Settings 按钮,我可以在其中显示当前登录的用户信息,能够更改他的语言、主题、一些特定的选定数据等。基本上是应用程序的基本状态。 BLoC pattern 是这种方法吗?还是有更好的方法?

如果是,有什么方法可以做到这一点。如何处理多个StreamBuilder,例如一个用于从 api 接收数据,一个用于更新状态?

我知道我可以用单例类来做这件事并使用get-it plugin 注册它,但如果有更好的方法我会跳过这个。

【问题讨论】:

    标签: flutter bloc flutter-state


    【解决方案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 持开放态度,但现在它可以工作。

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 2021-04-11
        • 2021-03-04
        • 2019-11-23
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 2019-08-04
        相关资源
        最近更新 更多