how to use singleton firebase service on Flutter?

老子叫甜甜 提交于 2020-04-30 08:21:26

问题


I have 4 pages. I called getRide() method in every 4 pages. it's means 4 times database call. Am I right? Is it possible to create a singleton for this scenario?

Firebase Service:

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());
    }
}

Calling Method:

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

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

I can't pass rideModel through Navigator. because when change data in ride collection need to change 4 pages UI.


回答1:


Someone tells me this answer is correct for the above problem.

I found this way to solve this problem.

I used get_it package and create service locator,

GetIt locator = GetIt.instance;

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

And then added to the main class

void main() {
  setupSingletons();

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

And every screen I added,

class _Screen1 extends State<Screen1> {
//  final db = FirebaseService();
  FirebaseService db = GetIt.I.get<FirebaseService>();


来源:https://stackoverflow.com/questions/61266590/how-to-use-singleton-firebase-service-on-flutter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!