从多个隔离执行 FirebaseFirestore 查询

问题描述 投票:0回答:1

我想要实现的大纲如下:

  1. 在主 Flutter 应用程序中,用户使用 FirebaseAuth 进行身份验证,然后可以执行 FirebaseFirestore 读/写。
  2. 应用程序可以通过 flutter_local_notifications 插件启动通知。这些通知的操作还应执行 FirebaseFirestore 读/写。

粗略的实现是我的 main() 函数做了这样的事情:

WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
// Later on ...
DocumentSnapshot myQuery = await FirebaseFirestore.instance.collection('myCollection').get();

通知实现的工作原理有点像这样:

@pragma('vm:entry-point')
void onDidReceiveBackgroundNotificationResponse(NotificationResponse notificationResponse) async {
   // This condition seems to be always true
   if (Firebase.apps.isEmpty) {
     await Firebase.initializeApp();
   }
   // This operation finishes successfully
   await FirebaseFirestore.instance.collection('myCollection').doc('myDoc').set(notificationResponse.payload.toMap());
}

虽然应用程序本身可以按预期执行所有操作,并且通知操作也成功执行,但它们不能组合使用。 执行通知操作后,应用程序内的查询将不再起作用,要求我调用 Firebase.initializeApp()

除了在每次查询之前检查 Firebase 是否已初始化(这不是一个可行的解决方案,因为应用程序还订阅了 FirebaseFirestore 流,这也停止工作),是否有一个解决方案,以便应用程序和通知隔离都可以执行 Firestore查询不会互相阻塞?

网上关于这个主题的信息似乎出奇的少,所以我真的希望你能帮助我。

flutter google-cloud-firestore dart-isolates flutter-local-notification
1个回答
0
投票

在初始化 Firebase 之前,请务必将

WidgetsFlutterBinding.ensureInitialized();
添加到您的隔离中。

© www.soinside.com 2019 - 2024. All rights reserved.