firebase - 如何在 Flutter 应用中连接到本地实时数据库模拟器?
问题描述
我正在为我的 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 数据库 URL 无效:10.0.2.2:4000,null)
我在 pub 上使用 firebase_core 和 firebase_database 包。
解决方案
深入研究 Firebase Java SDK,我发现.useEmulator()
只有 sethost
和port
用于创建databaseURL
and 简而言之只是一个重构包装器。
下面的代码应该适用于 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
}
}
}
推荐阅读
- c# - 如何在 .net core 2.0 中创建自定义路由控制器
- performance - 对 Gradle 性能问题进行故障排除
- firebase - 如何解决flutter中的gradle googleplayservices版本错误?
- c - 为什么 gethostbyname() 在不存在的主机名上不会失败?
- typescript - 在 webpack 4 中使用 moment.js 和 ts-loader
- docker - Revel 和 Docker 容器
- r - 如何从 Yahoo! 抓取关键统计数据 用 R 融资?
- javascript - 导航栏在移动视图中不起作用
- r - RStudio - 选择要片段的代码 - 以编程方式更新 r.snippets
- javascript - 如何在css中的特定时间改变颜色?