firebase - 具有多个firebase请求的flutter bloc cubit最佳实践
问题描述
我正在开发一个带有 firebase 的应用程序,在一个屏幕上我需要一次获取大量文档,即当天的第一张图片、用户的统计信息、待处理的请求、朋友的统计信息,然后是国家/地区的统计信息。
*对不起我的命名顺便说一句
class HomeSmileLoading extends HomeState {
const HomeSmileLoading();
@override
List<Object> get props => [];
}
与此类似,我有 HomeStatsLoading ,朋友统计...
这就是我在应用程序开始时执行代码的方式
HomeCubit() : super(HomeInitial()) {
imageOfday();
getStats();
//...
}
我觉得有更好的方法来做到这一点..
如果有人有任何提示或想法,我感谢你的帮助
解决方案
好吧,您所做的并没有错,只是您将无法并行加载所有数据。此外,在您的情况下,一个 Cubit 负责处理您应该加载的所有不同数据 - 它不是很灵活。
我建议你做的是:
为每个数据源/功能创建一个不同的 Cubit(一个用于统计,一个用于请求等)。
每个 Cubit 都有不同的状态:初始、加载、加载、错误 - 这些可能会根据您的需要而有所不同。
在为您的应用创建/提供 Cubits 时,在每个 Cubit 上调用 init/load 函数以加载初始数据:
MultiBlocProvider( providers: [ BlocProvider<StatsCubit>( create: (BuildContext context) => StatsCubit()..getStats(), ), BlocProvider<ImageCubit>( create: (BuildContext context) => ImageCubit()..imageOfday(), ), BlocProvider<AnyOtherCubit( create: (BuildContext context) => AnyOtherCubit()..loadData(), ), ], child: ChildA(), )
一个好的做法是按功能拆分 Cubits 并使它们只负责一件事情(例如处理身份验证、用户统计信息、任何特定数据等)。
推荐阅读
- azure-devops-rest-api - 如何获取与排队 CI 关联的搁置集?
- c# - 通过 TCP/IP 从 C# 应用程序向 IBM Doors 发送 DXL 命令
- c++ - C ++ Protobuf,尝试构建导入另一个文件描述符时出错
- c - CMake:如何在 Windows 上使用 clang 和 lld 编译 C 以及 MinGW-w64 运行时
- python - ImportError:无法从“googlesearch”导入名称“search”
- arrays - JSON 中的 .NET 嵌套数组
- javascript - 如何简化修改 JSON 对象的 JavaScript 代码
- php - 文件上传问题 - Yii2
- java - Spring Data / Hibernate Table DDL 创建
- c# - 如何使用 Oxyplot 在 C# WPF 中绘制具有给定旋转角度的椭圆?