Flutter 如何正确使用带有GetIt定位器的提供程序

Flutter 如何正确使用带有GetIt定位器的提供程序,flutter,dart,google-cloud-firestore,flutter-provider,Flutter,Dart,Google Cloud Firestore,Flutter Provider,如何使用GetIt locator和use with Provider包以正确的方式注册singleton服务。现在我像下面描述的那样组织我的代码,它可以工作了。但我不确定这是否正确 也许有更好的办法 我目前的结构: 飞镖 我在这里注册我的存储库 class DI { static GetIt get = GetIt.instance; static void ensureInitialized() { get.registerLazySingleton(() =>

如何使用GetIt locator和use with Provider包以正确的方式注册singleton服务。现在我像下面描述的那样组织我的代码,它可以工作了。但我不确定这是否正确

也许有更好的办法

我目前的结构: 飞镖 我在这里注册我的存储库

class DI {
   static GetIt get = GetIt.instance;

   static void ensureInitialized() {
     get.registerLazySingleton(() => StatisticFirestoreRepository());
     get.registerLazySingleton(() => UserFirestoreRepository());

     ...
  }

}
base_repository.dart
classbaserepository{
最终FirebaseFirestore db=FirebaseFirestore.instance;
最终GoogleAuthServices.FirebaseAuth auth=GoogleAuthServices.FirebaseAuth.instance;
收集参考文献;
FirestoreService({String collection}){
db.settings=设置(persistenceEnabled:true);
this.ref=db.collection(collection);
}
未来的getDocumentById(QueryParams参数)异步{}
Future addDocument(QueryParams参数)异步{}
未来更新文档(QueryParams params)异步{}
未来removeDocument(QueryParams params)异步{}
...
}
user_repository.dart 存储特定功能属于用户实体

class UserFirestoreRepository extends BaseRepository {
  UserFirestoreRepository() : super(collection: 'users');

  Stream<DocumentSnapshot> streamUserProfileData() {}
  Stream<DocumentSnapshot> streamUserAchivementsData() {}
  Stream<DocumentSnapshot> streamUserSubscriptionsData() {}

  ...
}
类UserFirestoreRepository扩展了BaseRepository{ UserFirestoreRepository():super(集合:“用户”); streamUserProfileData(){} streamUserAchivementsData(){} streamUserSubscriptionsData(){} ... } stats_repository.dart 存储特定的函数属于Stats实体

class StatisticFirestoreRepository extends BaseRepository {
  StatisticFirestoreRepository() : super(collection: 'statistics');

  Stream<DocumentSnapshot> streamMemberStatsData() {}
  ...
}
class StatisticFirestoreRepository扩展了BaseRepository{
StatisticFirestoreRepository():super(集合:'statistics');
streamMemberStatsData(){}
...
}
用户\提供者.dart 这是我的供应商

class UserProvider with ChangeNotifier, FcmNotifier implements CrudInterface {
  final UserFirestoreRepository userRepository = DI.get<UserFirestoreRepository>();
  final StatisticFirestoreRepository statsRepository = DI.get<StatisticFirestoreRepository>();

  ...
}
使用ChangeNotifier类UserProvider,FcmNotifier实现CrudInterface{
final UserFirestoreRepository userRepository=DI.get();
final StatisticFirestoreRepository statsRepository=DI.get();
...
}
class UserProvider with ChangeNotifier, FcmNotifier implements CrudInterface {
  final UserFirestoreRepository userRepository = DI.get<UserFirestoreRepository>();
  final StatisticFirestoreRepository statsRepository = DI.get<StatisticFirestoreRepository>();

  ...
}