如何解决如何将 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;
}
}
但是我一直在纠结如何添加多个区块以使应用程序更具模块化和可读性,如果我是否需要为每个区块创建一个提供程序,这方面的任何帮助也......提前致谢
解决方法
您不需要为每个集团创建一个提供者。您的 Provider 类是 InheritedWidget
,因此对其的冗余使用可能会导致性能问题。已经可以通过一个提供商访问您的所有区块。
提供者
所有块都在您的 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>()!;
}
}
我的应用程序
在您的第一个小部件中初始化提供程序(或者事先在您想在此处访问它的情况下):
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'),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。