我们可以像这样使用“Firestore”吗?

时间:2021-02-13 09:36:18

标签: firebase flutter google-cloud-firestore

我在 Github 上下载了 Flutter 聊天应用程序,并从中学习。最初的开发人员使用 Firestore,但在我的中,我收到错误“未定义名称‘Firestore’。 尝试将名称更正为已定义的名称,或者像这样定义名称。

我搜索了这个并阅读了 cloudfirestore 文档,我们可以使用“FirebaseFirestore”(也许我错了)。我正在学习用 flutter 编写后端,到目前为止我做了 UI 部分。所以这是我第一次尝试使用 Flutter 学习后端。

handleSignIn() async {
    final res = await googleSignIn.signIn();

    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();

    final auth = await res.authentication;

    final credentials = GoogleAuthProvider.getCredential(
        idToken: auth.idToken, accessToken: auth.accessToken);

    final firebaseUser =
        (await firebaseAuth.signInWithCredential(credentials)).user;

    if (firebaseUser != null) {
      final result = (await Firestore.instance
              .collection('users')
              .where('id', isEqualTo: firebaseUser.uid)
              .getDocuments())
          .documents;

      if (result.length == 0) {
        ///new user
        Firestore.instance
            .collection('users')
            .document(firebaseUser.uid)
            .setData({
          "id": firebaseUser.uid,
          "name": firebaseUser.displayName,
          "profile_pic": firebaseUser.photoURL,
          "created_at": DateTime.now().millisecondsSinceEpoch,
        });

        sharedPreferences.setString("id", firebaseUser.uid);
        sharedPreferences.setString("name", firebaseUser.displayName);
        sharedPreferences.setString("profile_pic", firebaseUser.photoURL);

        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => Home()));
      } else {
        ///Old user
        sharedPreferences.setString("id", result[0]["id"]);
        sharedPreferences.setString("name", result[0]["name"]);
        sharedPreferences.setString("profile_pic", result[0]["profile_pic"]);

        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => Home()));
      }
    }
  }

这是我得到的错误 enter image description here

你们能解释一下如何解决这个错误吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

我认为您没有在 pubspec.yml 中添加 cloud_firestore 依赖项。还有一件事,

您使用的是最新版本,请使用“FirebaseFirestore”而不是“Firestore”。

答案 1 :(得分:1)

  • 转到 Flutter 项目中的 pubspec.yaml 文件。 在依赖项下面添加这个(cloud_firestore: ^0.16.0),如下图所示。

  • 如果您使用 VScode,则可以跳过此步骤。如果您在更新后保存文件,它会自动执行此操作。 如果不是,请在您的项目中执行 flutter pub get。 (这会获取添加到项目中的新包,在我们的示例中为 cloud_firestore

  • 确保您能够在出现错误的文件中看到此导入。

<块引用>

import 'package:cloud_firestore/cloud_firestore.dart';

  • 接下来,在出现此错误的所有文件中更新 Firestore.instance -> FirebaseFirestore.instance

enter image description here