如何将 bloc 模式与颤振应用程序集成?

Posted

技术标签:

【中文标题】如何将 bloc 模式与颤振应用程序集成?【英文标题】:how to integrat bloc pattern with a flutter app? 【发布时间】: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;
  

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

【问题讨论】:

【参考方案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'),
      ),
    );
  

【讨论】:

谢谢亲爱的,我真的打算这样做,但我认为这可能是一个更好的方法,再次感谢我将应用该方法,另一个问题是使用这种方法比使用颤振块包

以上是关于如何将 bloc 模式与颤振应用程序集成?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用颤振 Bloc 模式更新小部件外部的 UI

如何在不使用任何库的情况下在颤振中使用 bloc

在颤振块中为(注销)功能添加单独的块

Flutter bloc 模式多次重复调用函数

如何在颤动中使用 bloc 模式进行错误处理?

hydrad_bloc 不持久化数据