如何在Flutter应用程序中连接到本地实时数据库模拟器



我正在为Flutter应用程序使用实时数据库和函数。我已经为数据库和函数设置了本地模拟器,所以我可以在本地测试函数,而不需要部署成本。现在我想把我的Flutter应用程序连接到这些本地模拟器上,但我很难找到如何做到这一点。

FlutterFire文档描述了如何为Firestore做到这一点(https://firebase.flutter.dev/docs/firestore/usage#emulator-用法(,但不适用于实时数据库。当然,即使我使用的是实时数据库,也必须有一种连接到模拟器的方法吗?

我尝试过以下几种:

String host = Platform.isAndroid ? '10.0.2.2:4000' : 'localhost:4000';
FirebaseDatabase database = FirebaseDatabase(
app: Firebase.app(),
databaseURL: host,
);

但这给了我一个错误:

未处理的异常:PlatformException(错误,指定的Firebase数据库url无效:10.0.2:4000,null(

我在pub上使用firebase_core和firebase_database包。

深入挖掘Firebase Java SDK,我发现.useEmulator()只设置hostport来创建databaseURL,简而言之,它只是一个重构包装器。

以下代码应适用于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
}
}
}

根据Android的Firebase文档,使用实时数据库模拟器需要调用database.useEmulator("10.0.2.2", 9000)。对FlutterFire代码的快速搜索显示没有这样的调用,所以模拟器的使用似乎还没有在FlutterFire中实现。

我也找不到它的开放问题,所以你可能想提交一个功能请求。

以下代码对我有效。它几乎类似于@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中找到。

最新更新