如何 运行 在 Flutter 中隔离 Firebase 查询

How To Run Firebase Queries In An Isolate In Flutter

我正在尝试将文件单独上传到 Firebase 存储,但它似乎不起作用。我不断收到以下异常:

E/flutter ( 1527): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
E/flutter ( 1527): #0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
E/flutter ( 1527): #1      Firebase.app (package:firebase_core/src/firebase.dart:52:41)
E/flutter ( 1527): #2      FirebaseFirestore.instance (package:cloud_firestore/src/firestore.dart:43:21)
E/flutter ( 1527): #3      new ForumsProvider (package:trumate/src/providers/forums.provider.dart:31:41)
E/flutter ( 1527): #4      CommonProvider.videoPost (package:trumate/src/providers/common.provider.dart:100:29)
E/flutter ( 1527): <asynchronous suspension>
E/flutter ( 1527): #5      CommonProvider.backgroundVideoUpload (package:trumate/src/providers/common.provider.dart:112:5)
E/flutter ( 1527): #6      FlutterIsolate._isolateInitialize.<anonymous closure>.<anonymous closure> (package:flutter_isolate/flutter_isolate.dart:128

我正在使用 flutter_isolate: ^1.0.0+14 插件。但似乎 运行 隔离区内的 Firebase 查询是问题所在。

我的 main 有 await Firebase.initializeApp(); 所以我不知道我遇到了这样的错误。

Flutter 中的隔离完全隔离。把它想象成有点像进程(在两个隔离共享(几乎)没有内存的意义上),而不是在Java或C意义上的传统线程内存共享。

因此,如果您在主隔离区中初始化 Firebase(就像您在 main 中所做的那样),Firebase 将不会在您的其他隔离区中初始化。因此,请尝试在您的其他隔离区中再次初始化它。

我遇到了同样的问题,无法 运行 隔离区内的 Firestore。 我最终使用定时器来处理它:

_MyAppState() {
  _timer = new Timer.periodic(Duration(seconds: 2), (timer) async {
   //Call function that handles firestore
   var upload = await fireUpload();
   //Returns value to despose timer if job is completed
   if (upload == false){
     dispose();
   }
  });
}

//Kills the Timer function
@override
void dispose() {
  super.dispose();
  _timer.cancel();
}