具有多个 firebase 请求的颤振 bloc cubit 最佳实践

时间:2021-05-29 11:26:59

标签: firebase flutter google-cloud-firestore flutter-layout bloc

我正在使用 firebase 开发一个应用程序,我需要在一个屏幕上同时获取大量文档 当天的第一张图片,用户的统计信息,待处理的请求,好友统计信息,然后是国家/地区统计信息。

*对不起我的命名顺便说一句

class HomeSmileLoading extends HomeState {
const HomeSmileLoading();
@override
List<Object> get props => [];
}

与此类似,我有 HomeStatsLoading 、朋友统计数据......

这是我在应用程序开始时执行代码的方式

HomeCubit() : super(HomeInitial()) {
imageOfday();
getStats();
//...
}

我觉得有更好的方法可以做到这一点..
如果有人有任何提示或想法,我感谢您的帮助

1 个答案:

答案 0 :(得分:1)

好吧,您所做的并没有错,只是您将无法并行加载所有数据。此外,在您的案例中,一个 Cubit 负责处理您应该加载的所有不同数据 - 它不是很灵活。

我建议您做的是:

  1. 为每个数据源/特征创建一个不同的 Cubit(一个用于统计,一个用于请求等等)。

  2. 每个 Cubit 都有不同的状态:初始、加载中、加载中、错误 - 这些可以根据您的需要而有所不同。

  3. 为您的应用创建/提供 Cubit 时,在每个 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 并让它们只负责一件事情(例如处理身份验证、用户统计、任何特定数据等)是一种很好的做法。