具有多个 firebase 请求的 flutter bloc cubit 最佳实践
flutter bloc cubit best practice with multiple firebase request
我正在使用 firebase 开发一个应用程序,我需要在一个屏幕上同时获取大量文档
当天的第一张图片、用户统计信息、待处理请求、朋友统计信息,然后是国家/地区统计信息。
*对不起我的命名顺便说一句
class HomeSmileLoading extends HomeState {
const HomeSmileLoading();
@override
List<Object> get props => [];
}
与此类似,我有 HomeStatsLoading 、好友统计...
这就是我在应用程序启动时执行代码的方式
HomeCubit() : super(HomeInitial()) {
imageOfday();
getStats();
//...
}
我觉得有更好的方法来做到这一点..
如果有人有任何提示或想法,我感谢你的帮助
好吧,你所做的并没有错,只是你无法并行加载所有数据。此外,在您的情况下,单个 Cubit 负责处理您应该加载的所有不同数据 - 它不是很灵活。
我建议你做的是:
为每个数据创建一个不同的 Cubit source/feature(一个用于统计数据,一个用于请求等等)。
每个 Cubit 都有不同的状态:Initial、Loading、Loaded、Error - 这些可能会根据您的需要而有所不同。
当你的应用有creating/providing个Cubits时,在每个Cubits上调用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 并让它们只负责一件事(例如处理身份验证、用户统计、任何特定数据等)是一种很好的做法。
我正在使用 firebase 开发一个应用程序,我需要在一个屏幕上同时获取大量文档 当天的第一张图片、用户统计信息、待处理请求、朋友统计信息,然后是国家/地区统计信息。
*对不起我的命名顺便说一句
class HomeSmileLoading extends HomeState {
const HomeSmileLoading();
@override
List<Object> get props => [];
}
与此类似,我有 HomeStatsLoading 、好友统计...
这就是我在应用程序启动时执行代码的方式
HomeCubit() : super(HomeInitial()) {
imageOfday();
getStats();
//...
}
我觉得有更好的方法来做到这一点..
如果有人有任何提示或想法,我感谢你的帮助
好吧,你所做的并没有错,只是你无法并行加载所有数据。此外,在您的情况下,单个 Cubit 负责处理您应该加载的所有不同数据 - 它不是很灵活。
我建议你做的是:
为每个数据创建一个不同的 Cubit source/feature(一个用于统计数据,一个用于请求等等)。
每个 Cubit 都有不同的状态:Initial、Loading、Loaded、Error - 这些可能会根据您的需要而有所不同。
当你的应用有creating/providing个Cubits时,在每个Cubits上调用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 并让它们只负责一件事(例如处理身份验证、用户统计、任何特定数据等)是一种很好的做法。