Vam*_*hna 8 singleton dart flutter bloc
我知道我的一些 BLOC 在整个应用程序生命周期中只会被实例化一次。将这些 BLOC 类创建为单例是不好的做法还是反模式。Singleton 可以帮助在任何地方访问 BLOC,并确保该类仅实例化一次。
我还可以确保在另一个 BLOC 中使用一个 BLOC 并传递单例时是安全的,就好像它是“只是另一个”实现一样。
这样做可能会产生什么影响?
我有两个区块
AuthenTicationBloc 必须使用其中的 UserBloc。如果我将 UserBloc 设为单例,那么将其用作 UserBloc().
否则,我必须在 AuthenTicationBloc 中创建 UserBloc 作为实例变量,如下所示:
class AuthenTicationBloc {
UserBloc _userBloc;
AuthenTicationBloc({@required UserBloc userBloc}) : _userBloc = userBloc;
myMethod(){
//use the userBloc
_userBloc.setDetails();
}
}
runApp(
UserBloc userBloc = UserBloc();
Provider(
value: AuthenTicationBloc(userBloc: userBloc),
child: MyApp(),
),
);
Run Code Online (Sandbox Code Playgroud)
如果我必须在其他地方的小部件链中使用 UserBloc,我必须使 UserBloc 也按如下方式全局提供,对吗?
UserBloc userBloc = UserBloc();
MultiProvider(
providers: [
Provider<AuthenTicationBloc>(
value: AuthenTicationBloc(userBloc:userBloc),
),
Provider<UserBloc>(
value: userBloc,
),
],
child: MyApp(),
);
Run Code Online (Sandbox Code Playgroud)
行为保持不变。单例与 InheritedWidget 没有太大变化
但它会产生一些架构后果,因为您应该对“在整个应用程序生命周期中仅实例化一次”的 BLoC 使用 InheritedWidget。
意思就是:
另一方面,单例并不能防止 InheritedWidget 所犯的一些错误。
例如,使用 InheritedWidgets 不可能产生循环依赖,而使用单例肯定可以。
就代码而言,使用 Singleton 与 InheritedWidget 并没有获得多少好处。
Pub 上有大量的库可以让您的工作更轻松。包括提供商:
runApp(
Provider(
value: MyBloc(),
child: MyApp(),
),
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3685 次 |
| 最近记录: |