我想要实现的大纲如下:
粗略的实现是我的 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查询不会互相阻塞?
网上关于这个主题的信息似乎出奇的少,所以我真的希望你能帮助我。
在初始化 Firebase 之前,请务必将
WidgetsFlutterBinding.ensureInitialized();
添加到您的隔离中。