[英]how do i get my android app which is connected to a realtime firebase database to create a toast on update in the realtime database?
[英]How do I connect to my local Realtime Database emulator in my Flutter app?
我正在为我的 Flutter 应用程序使用实时数据库和函数。 我已经为数据库和函数设置了本地模拟器,所以我可以在本地测试函数而无需部署成本。 现在我想将我的 Flutter 应用程序连接到这些本地模拟器,但是我在找出如何去做时遇到了一些麻烦。
FlutterFire 文档描述了如何为 Firestore ( https://firebase.flutter.dev/docs/firestore/usage#emulator-usage ) 执行此操作,但不适用于实时数据库。 即使我使用的是实时数据库,肯定也必须有一种方法可以连接到模拟器吗?
我尝试了以下方法:
String host = Platform.isAndroid ? '10.0.2.2:4000' : 'localhost:4000';
FirebaseDatabase database = FirebaseDatabase(
app: Firebase.app(),
databaseURL: host,
);
但这给了我错误:
未处理的异常:PlatformException(错误,指定的 Firebase 数据库网址无效:10.0.2.2:4000,空)
我在 pub 上使用 firebase_core 和 firebase_database 包。
根据适用于 Android 的 Firebase 文档,使用实时数据库模拟器需要调用database.useEmulator("10.0.2.2", 9000)
。 对 FlutterFire 代码的快速搜索显示没有这样的调用,所以似乎 FlutterFire 中还没有实现模拟器的使用。
我也找不到它的未解决问题,因此您可能想要提交功能请求。
深入研究 Firebase Java SDK,我发现.useEmulator()
仅设置用于创建databaseURL
host
和port
,简而言之,它只是一个重构包装器。
下面的代码应该适用于 FlutterFire 实时数据库包:
String host = Platform.isAndroid ? 'http://10.0.2.2:9000' : 'http://localhost:9000';
FirebaseDatabase database = FirebaseDatabase(
app: Firebase.app(),
databaseURL: host,
);
另外,请检查您的firebase.json
以获取要使用的正确端口。 数据库的默认值应该是9000
。
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions"
},
"storage": {
"rules": "storage.rules"
},
"emulators": {
"auth": {
"port": 9099
},
"functions": {
"port": 5001
},
"firestore": {
"port": 8080
},
"database": {
"port": 9000
},
"ui": {
"enabled": true
}
}
}
以下代码对我有用。 它几乎类似于@Florin Stan 的回答。 只是缺少数据库的命名空间。
String host = Platform.isAndroid ? 'http://10.0.2.2:9000' : 'http://localhost:9000';
dbInstance= FirebaseDatabase(
databaseURL: '$host?ns=YOUR_DATABASE_NAMESPACE',
);
数据库命名空间可以在 firebase 实时数据库模拟器 UI 中找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.