Как использовать сервис Singleton Firebase на Flutter? - PullRequest
0 голосов
/ 17 апреля 2020

у меня 4 страницы. Я вызывал getRide() метод на каждых 4 страницах. это означает, что вызов базы данных 4 раза. Я прав? Можно ли создать синглтон для этого сценария?

Служба Firebase :

class FirebaseService {
    final Firestore _db = Firestore.instance;

    Stream<List<RideModel>> getRide() {
        return _db.collection('ride')
               .snapshots()
               .map((list) => list.documents.map((doc) => RideModel.fromFirestore(doc))
               .toList());
    }
}

Метод вызова :

@override
void initState() {
   super.initState();
   db.getRide().listen(getRide);
}

void getRide(List<RideModel> model) {
    if (!mounted) return;
    setState(() {
       rideModel = model;
    });
}

Я не могу пропустить rideModel через Навигатор. потому что при изменении данных в коллекции поездок необходимо изменить 4 страницы пользовательского интерфейса.

1 Ответ

1 голос
/ 18 апреля 2020

Кто-то говорит мне, что этот ответ является правильным для вышеуказанной проблемы.

Я нашел этот способ для решения этой проблемы.

Я использовал пакет get_it и создал локатор службы ,

GetIt locator = GetIt.instance;

void setupSingletons() async {
  locator.registerLazySingleton<FirebaseService>(() => FirebaseService());
}

А потом добавили в основной класс

void main() {
  setupSingletons();

  runApp(MultiProvider(
    providers: globalProviders,
    child: MyApp(),
  ));
}

И каждый экран, который я добавил,

class _Screen1 extends State<Screen1> {
//  final db = FirebaseService();
  FirebaseService db = GetIt.I.get<FirebaseService>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...