flutter - 在提供者构造函数中初始化 bloc 与初始化 bloc 实例变量的内联声明
问题描述
在创建了扩展 InheritedWidget 的 Bloc Provider 类之后,在 Provider 构造函数中初始化 bloc 实例变量和在声明变量时初始化它有什么区别?
class CommentsProvider extends InheritedWidget {
final CommentsBloc bloc;
CommentsProvider({Key key, Widget child})
: bloc = CommentsBloc(),
super(key: key, child: child);
}
class CommentsProvider extends InheritedWidget {
final CommentsBloc bloc = CommentsBloc();
CommentsProvider({Key key, Widget child})
: super(key: key, child: child);
}
解决方案
这两个是严格等价的,但两个选项都不好。
您不应该在Inheritedwidget中创建变异数据。您很容易失去您的状态,这被认为是不好的做法。
而是考虑将您的Inheritedwidge包装 到StatefulWidget中,或使用诸如provider
.
使用provider
,您不再需要制作此类课程。相反,您可以直接执行以下操作:
Provider(
builder: (_) => CommentsBloc(),
dispose: (_, bloc) => bloc.dispose(),
child: Whatever(),
)
推荐阅读
- sql - 如何在 PostgreSQL 中的“冲突更新时插入选择”语句中引用选定的行
- windows - 使用 Wireshark 捕获网络路由器流量
- prolog - SWI-Prolog 给我错误信息
- android - 使用 maven-publish 发布带有构建变体的 android apk 和 aar (android gradle plugin 4.0)
- c# - 从子触发器设置父 Visible 属性
- asp.net-core - ASP.NET Core MVC 错误处理禁用默认处理
- shiny - 渲染图像不输出闪亮
- android - Flutter-“extendBody: true” 完全没有任何作用。我想在导航栏后面扩展body
- java - Java 新手,尝试解决 OldMacdonald Had a Farm 歌曲练习的主要部分
- vba - 根据单元格值发送自动电子邮件