首页 > 解决方案 > 如何在 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 包。

标签: firebaseflutterfirebase-realtime-database

解决方案


深入研究 Firebase Java SDK,我发现.useEmulator()只有 sethostport用于创建databaseURLand 简而言之只是一个重构包装器。

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

推荐阅读