Flutter模块用自定义Firebase App时Firestore报错找不到[DEFAULT]应用
自定义Firebase App时FirebaseFirestore仍尝试访问[DEFAULT]应用问题
我正在开发一个Flutter模块,底层会用到部分Firebase工具。由于该模块可能被其他项目复用,我希望创建一个非[DEFAULT]名称的Firebase App。目前初始化操作正常,但FirebaseFirestore仍尝试访问[DEFAULT]应用,抛出异常。
初始化代码
final getIt = GetIt.instance; void main() { WidgetsFlutterBinding.ensureInitialized(); // ... await Firebase.initializeApp(name: "module", options: DefaultFirebaseOptions.currentPlatform); // ... await DI.setupDependencies("module"); }
DI.setupDependencies(...)内部代码
final app = Firebase.app(firebaseAppName); getIt.registerSingleton(FirebaseStorage.instanceFor(app: app)); getIt.registerSingleton(FirebaseAuth.instanceFor(app: app)); getIt.registerSingleton(FirebaseFirestore.instanceFor(app: app)); // NOTE: 自定义Firebase App名称时不支持 // getIt.registerSingleton(FirebaseAnalytics.instanceFor(app: app)); // getIt.registerSingleton(FirebaseCrashlytics.instance); final fs = FirebaseFirestore.instanceFor(app: app); fs.collection("users").id; // 此处抛出异常 getIt<FirebaseFirestore>().collection("users").id; // 同样抛出相同异常
异常栈跟踪
E/flutter ( 8030): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() E/flutter ( 8030): #0 MethodChannelFirebase.app method_channel_firebase.dart:193 E/flutter ( 8030): #1 Firebase.app firebase.dart:56 E/flutter ( 8030): #2 FirebaseFirestorePlatform.instance platform_interface_firestore.dart:41 E/flutter ( 8030): #3 new FirebaseFirestorePlatform.instanceFor platform_interface_firestore.dart:33 E/flutter ( 8030): #4 FirebaseFirestore._delegate firestore.dart:50 E/flutter ( 8030): #5 FirebaseFirestore.collection firestore.dart:71 E/flutter ( 8030): #6 DI.setupDependencies di.dart:34 E/flutter ( 8030): #7 main
报错位置代码
/// Returns a [FirebaseAppPlatform] by [name]. /// /// Returns the default Firebase app if no [name] is provided and throws a /// [FirebaseException] if no app with the [name] has been created. @override FirebaseAppPlatform app([String name = defaultFirebaseAppName]) { if (appInstances.containsKey(name)) { return appInstances[name]!; } throw noAppExists(name); }
更新:FirebaseStorage功能正常测试
await Firebase.initializeApp(name: "module", options: DefaultFirebaseOptions.currentPlatform); final fs = FirebaseStorage.instanceFor(app: Firebase.app('module')); logger.info((await fs.ref('test.png').getDownloadURL()));
内容的提问来源于stack exchange,提问作者Oleg Novosad
相关产品推荐
相关产品推荐

