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

具有多个firebase请求的Flatter bloc cubit最佳实践,firebase,flutter,google-cloud-firestore,flutter-layout,bloc,Firebase,Flutter,Google Cloud Firestore,Flutter Layout,Bloc,我正在使用firebase开发一个应用程序,在一个屏幕上,我需要一次获取大量文档 一天的第一张图片,用户的统计信息,待处理的请求,朋友的统计信息,然后是国家统计信息 *对不起我的名字顺便说一句 class HomeSmileLoading extends HomeState { const HomeSmileLoading(); @override List<Object> get props => []; } 我觉得有更好的方法可以做到这一点如果有人有任何建议或想法,我感谢

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

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

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

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

好吧,你所做的没有错,只是你无法并行加载所有数据。此外,在您的案例中,一个单独的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(),
    )
    
    MultiBlocProvider(
    供应商:[
    BlocProvider(
    create:(BuildContext context)=>statsubit()…getStats(),
    ),
    BlocProvider(
    创建:(BuildContext上下文)=>ImageCubit()…imageOfday(),
    ),
    BlocProvider AnyOtherCubit()…loadData(),
    ),
    ],
    child:ChildA(),
    )
    

  • 将每个功能划分为三个部分,并让它们只负责一件事(例如,处理身份验证、用户统计、任何特定数据等),这是一种很好的做法。

    非常感谢各位,我非常感谢
    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(),
    )