Firebase 如何在我的Flatter应用程序中连接到本地实时数据库模拟器?

Firebase 如何在我的Flatter应用程序中连接到本地实时数据库模拟器?,firebase,flutter,firebase-realtime-database,Firebase,Flutter,Firebase Realtime Database,我正在为我的颤振应用程序使用实时数据库和功能。我已经为数据库和函数设置了本地模拟器,因此可以在本地测试函数,而无需部署成本。现在我想将我的颤振应用程序连接到这些本地模拟器,但我在找到如何实现这一点上遇到了一些困难 FlatterFire文档描述了如何对Firestore()执行此操作,但对实时数据库没有描述。当然,即使我使用的是实时数据库,也一定有办法连接到模拟器 我尝试了以下方法: String host = Platform.isAndroid ? '10.0.2.2:4000' : 'lo

我正在为我的颤振应用程序使用实时数据库和功能。我已经为数据库和函数设置了本地模拟器,因此可以在本地测试函数,而无需部署成本。现在我想将我的颤振应用程序连接到这些本地模拟器,但我在找到如何实现这一点上遇到了一些困难

FlatterFire文档描述了如何对Firestore()执行此操作,但对实时数据库没有描述。当然,即使我使用的是实时数据库,也一定有办法连接到模拟器

我尝试了以下方法:

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_数据库包。

根据firebase Android文档,使用实时数据库仿真器需要调用
数据库。使用仿真器(“10.0.2.2”,9000)
。快速显示没有这样的调用,所以看起来模拟器的使用还没有在FlatterFire中实现


我也找不到它的数据库,因此您可能需要提交一个功能请求。

根据Firebase Android文档,使用实时数据库仿真器需要调用
数据库。useEmulator(“10.0.2.2”,9000)
。快速显示没有这样的调用,所以看起来模拟器的使用还没有在FlatterFire中实现


我也找不到它的应用程序,所以您可能需要提交一个功能请求。

深入研究Firebase Java SDK,我发现
.useEmulator()
仅设置
主机和
端口,用于创建
数据库URL
,简而言之,它只是一个重构包装器

以下代码应适用于FlatterFire实时数据库包:

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
    }
  }
}

深入研究Firebase Java SDK,我发现
.useEmulator()
仅设置
主机
端口
,用于创建
数据库URL
,简而言之,它只是一个重构包装器

以下代码应适用于FlatterFire实时数据库包:

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中找到。

以下代码适合我。这几乎类似于@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中找到。

我明白了。我创建了一个。希望这将在将来添加。我明白了。我创建了一个。希望这将在将来被添加。这对我不起作用。它对你有用吗?它对我没用。这对你的工作有用吗?