Flutter 如何正确使用带有GetIt定位器的提供程序
如何使用GetIt locator和use with Provider包以正确的方式注册singleton服务。现在我像下面描述的那样组织我的代码,它可以工作了。但我不确定这是否正确 也许有更好的办法 我目前的结构: 飞镖 我在这里注册我的存储库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(() =>
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>();
...
}