如何将 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 模式与颤振应用程序集成?的主要内容,如果未能解决你的问题,请参考以下文章