Flutter接入Firebase次要应用Firestore时报[core/no-app]错误如何解决
问题原因
你初始化Firebase时仅创建了自定义命名的次要应用,没有初始化默认的[DEFAULT]应用。FlutterFire的部分底层逻辑(包括Firestore实例的初始化链路)默认要求必须存在一个已完成初始化的默认Firebase应用,哪怕你实际业务只用次要应用也需要先初始化默认应用,否则就会抛出[core/no-app]报错。
解决方法
根据你的实际使用场景二选一即可:
场景1:仅使用yostest2这一个Firebase项目
直接删除初始化时的name参数,将该项目初始化为默认应用即可,无需再额外创建次要应用实例。
修改后的main函数代码:
void main() async { // Avoid errors caused by flutter upgrade. WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( // 删掉name参数,默认初始化为[DEFAULT]应用 options: FirebaseOptions( apiKey: "AIzaSy...", appId: "1:68080...", messagingSenderId: "", projectId: "yostest2-xxxxx", storageBucket: "yostest2-xxxxx.appspot.com", databaseURL: 'https://yostest2-xxxxx.firebaseio.com', ), ); runApp(const MyApp()); }
对应业务代码可以简化为:
void _incrementCounter() async { await FirebaseFirestore.instance .collection("yos") .add({"timestamp": FieldValue.serverTimestamp()}); setState(() { _counter++; }); }
场景2:需要同时使用默认Firebase项目+这个次要yostest2项目
先完成默认应用的初始化,再初始化自定义命名的次要应用即可,原有业务逻辑不需要修改。
修改后的main函数代码:
void main() async { // Avoid errors caused by flutter upgrade. WidgetsFlutterBinding.ensureInitialized(); // 先初始化默认[DEFAULT]应用,填入默认项目的Firebase配置 await Firebase.initializeApp( options: FirebaseOptions( apiKey: "默认项目apiKey", appId: "默认项目appId", messagingSenderId: "默认项目senderId", projectId: "默认项目projectId", // 其他参数按需配置 ), ); // 再初始化次名命名应用 await Firebase.initializeApp( name: "yostest2-xxxxx", options: FirebaseOptions( apiKey: "AIzaSy...", appId: "1:68080...", messagingSenderId: "", projectId: "yostest2-xxxxx", storageBucket: "yostest2-xxxxx.appspot.com", databaseURL: 'https://yostest2-xxxxx.firebaseio.com', ), ); runApp(const MyApp()); }
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

