【问题标题】:how to integrat bloc pattern with a flutter app?如何将 bloc 模式与颤振应用程序集成?
【发布时间】:2021-09-27 14:17:33
【问题描述】:

所以最近我正在尝试将 bloc 模式集成到我已经构建的应用程序中 我从登录页面开始,那里有两个用于 gsm 和密码的文本字段 我将 bloc 包添加到 yaml 文件并安装了插件 bloc 然后从 gsm 字段开始为它创建一个块 然后我意识到对于密码我需要另一个集团 如果我进入注册页面,我可能需要四五个块 这是正常行为还是可能会影响应用程序的性能和流畅性,是否有更好的方法使用 bloc 模式... 使用流和接收器从头开始构建 bloc 模式会更好吗?我已经尝试过了,还创建了如下所示的提供程序:

    class Provider extends InheritedWidget {
  final bloc = Bloc();

  Provider({Key key, Widget child}) : super(key: key, child: child);

  @override
  bool updateShouldNotify(_) => true;

  static Bloc of(BuildContext context) {
    return (context.dependOnInheritedWidgetOfExactType<Provider>() as Provider)
        .bloc;
  }
}

但卡住了如何添加多个块以使应用程序更具模块化和可读性,如果我需要为每个块创建提供程序,这方面的任何帮助也......提前感谢

【问题讨论】:

    标签: flutter dart provider bloc


    【解决方案1】:

    您不需要为每个块创建提供程序。您的 Provider 类是 InheritedWidget,因此重复使用它可能会导致性能问题。已经可以通过单个 Provider 访问您的所有区块。

    提供者

    所有块都在您的 Provider 类中:

    class Provider extends InheritedWidget {
      final gsmBloc = GsmBloc(); // Bloc 1
      final passwordBloc = PasswordBloc(); // Bloc 2
      // add more ...
    
      Provider({
        Key key,
        Widget child,
      }) : super(key: key, child: child);
    
      @override
      bool updateShouldNotify(_) => true;
    
      static Provider of(BuildContext context) {
        return context.dependOnInheritedWidgetOfExactType<Provider>()!;
      }
    }
    

    我的应用

    在您的第一个小部件中初始化 Provider(或在您想在此处访问它时预先初始化):

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Bloc Pattern',
          home: Provider(
            child: MyHomePage(),
          ),
        );
      }
    }
    

    我的主页

    使用最近的上下文通过 Provider 访问您的集团:

    class MyHomePage extends StatefulWidget {
      @override
      Widget build(BuildContext context) {
        // Access your blocs through Provider
        final passwordBloc = Provider.of(context).passwordBloc;
    
        return Scaffold(
          appBar: AppBar('Flutter Bloc Pattern'),
          body: Center(
             child: Text('My Home Page'),
          ),
        );
      }
    }
    

    【讨论】:

    • 谢谢亲爱的,我真的打算这样做,但我认为这可能是一个更好的方法,再次感谢我将应用该方法,另一个问题是使用这种方法比使用颤振块包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2021-01-30
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多