如何在Flutter Web应用程序中将Firebase.dart与Firebase模拟器FireStore数据库一起使用?

时间:2020-06-02 22:36:54

标签: firebase dart google-cloud-firestore flutter-web firebase-cli

我的应用程序是Flutter Web应用程序。它使用package:firebase/firebase.dart

我正在尝试使用Firebase Emulators UI。

该应用程序托管在Firebase上,可以读写Firestore。但是,当我使用Dashboard时,位于firebase emulators:start的本地托管应用仍在访问生产Firestore数据库。

如何进行设置,以便本地运行的应用使用localhost:5000上的Firestore模拟器?

我发现了类似this的线程,但是我没有使用localhost:8080。我已经尝试了类似的步骤(请参见下面的UPDATE),但是它们在我的上下文中不起作用。

这是我的cloud_firestore.dart文件:

main.dart

有什么想法吗?

谢谢!

更新: 我尝试了以下操作,但得到了相同的结果:

import 'package:algolia/algolia.dart';
import 'package:firebase/firebase.dart' as fb;
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:web_flutter/data/repository.dart';
import 'package:web_flutter/pages/auth/login.dart';
import 'package:web_flutter/pages/home/home_page.dart';
import 'package:web_flutter/services/authentication.dart';

Future<void> main() async {
  try {
    var app = fb.initializeApp(
        apiKey: 'someAPIkey',
        authDomain: 'some.domain.com',
        databaseURL: 'https://somedomain.firebaseio.com',
        projectId: 'myProj',
        storageBucket: '',
        messagingSenderId: 'someId',
        appId: '1:9anAppId');

    var searchClient = Algolia.init(
        applicationId: 'anAppId',
        apiKey: 'someAPIkey');

    runApp(MyApp(
        repository: Repository(app.firestore(), searchClient),
        authentication: Authentication(app.auth())));
  } on fb.FirebaseJsNotLoadedException catch (e) {
    print(e);
  }
}

class MyApp extends StatefulWidget {
  final Repository repository;
  final Authentication authentication;

  const MyApp({Key key, this.authentication, this.repository})
      : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

1 个答案:

答案 0 :(得分:2)

关键是导入dart:html,使我可以访问window。从那里,我能够执行与Firebase文档中使用的JavaScript类似的操作。

import 'dart:html';
import 'package:algolia/algolia.dart';
import 'package:firebase/firebase.dart' as fb;
import 'package:firebase/firestore.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:web_flutter/data/repository.dart';
import 'package:web_flutter/pages/auth/login.dart';
import 'package:web_flutter/pages/home/home_page.dart';
import 'package:web_flutter/services/authentication.dart';

Future<void> main() async {
  try {
    var app = fb.initializeApp(firebaseConfig);

    if (window.location.hostname == 'localhost') {
      app.firestore().settings(Settings(
            host: '0.0.0.0:8080',
            ssl: false,
          ));
    }

我不知道在所有情况下所有人是否都会0.0.0.0担任主持人。我从启动模拟器时列出的主机那里得到的。