如何 运行 在 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();
}
我正在尝试将文件单独上传到 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();
}