我们有一个原生 iOS 应用程序,我们正在将其逐步迁移到 Flutter,因为目前在 Flutter 中重写整个应用程序还不可行。我们严重依赖 Firebase 资源,例如 auth、Firestore 等,我们需要在原生代码和 Flutter 代码中使用它们。
我们能够在 Flutter 中初始化 Firebase 实例:
final app = await Firebase.initializeApp();
以及从 Firebase auth 获取通过本机代码进行身份验证的当前用户:
final userId = FirebaseAuth.instance.currentUser?.uid;
但是,我们无法访问 Firestore:
final users = await FirebaseFirestore.instance.collection('users').get();
每当我们尝试这样做时,都会收到错误:
由于未捕获的异常“FIRIllegalStateException”而终止应用程序,原因:“Firestore 实例已启动,且无法再更改其设置。”您只能在调用 Firestore 实例上的任何其他方法之前设置设置。'
似乎
FLTFirebaseFirestorePlugin
正在尝试重新定义当前Firestore实例的设置:
FIRFirestore *firestore = [FIRFirestore firestoreForApp:app database:databaseUrl];
firestore.settings = settings;
我们尝试了很多方法,但无法克服这个错误。
有人能够在 Flutter 模块和原生 iOS 中使用 Firestore 吗?
或者有什么可以应用的解决方法吗?
在这里发现完全相同的问题,但没有响应:在原生 iOS 和 Flutter 中初始化并使用 Firestore
此 GH 票证中还报告了:https://github.com/firebase/flutterfire/issues/9582
看起来 Firebase 和 Firestore 已经在 iOS 原生端创建了一个名为
DEFAULT
的 App 实例,并且当您调用 FirebaseFirestore.instance.collection('users').get();
时无法重新创建新的 Firestore 实例
我建议您通过在 Flutter 中初始化 Firebase 来传递
name
变量来创建 Flutter 中的另一个实例,如下所示:
final app = await Firebase.initializeApp(name: "ANOTHER_INSTANCE");