【问题标题】:Download Data from firebase in flutter在颤振中从firebase下载数据
【发布时间】:2021-08-26 13:19:28
【问题描述】:

我想为我的 Flutter 应用构建一个contactScreen。因此我必须从 Firebase 下载一个数组。我只能在颤动中直接下载到 listView 并在编码时卡住。这是我的代码:

var currentUser = FirebaseAuth.instance.currentUser!.uid;
var contacts;
getUserData() async {
var userData = await FirebaseFirestore.instance
    .collection('users')
    .where('uid', isEqualTo: currentUser)
    .get();
contacts = userData['contacs']; //heres the error 
}

首先我想初始化 currentUser 的 UID,然后从 firebase 获取 currentUser 的联系人数组。为此,我构建了 getUserData() 方法来下载用户,然后初始化他的联系人数组。

最后一步在 Flutter 中不起作用,我无法访问联系人数组。我想要获取数据的方式是否正确?

【问题讨论】:

  • 你能分享一下错误吗
  • 运算符 '[]' 没有为类型 'Future>>' 定义。尝试定义运算符“[]”。
  • 我想我忘了调用一个方法或别的什么...

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

get() 调用之前,您至少缺少一个await

var userData = await FirebaseFirestore.instance
  .collection('users')
  .where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid)
  .get();

没有await,您的userDataFuture<QuerySnapshot<Map<String, dynamic>>> 类型,因为您收到错误消息。通过使用await,其类型将变为QuerySnapshot<Map<String, dynamic>>

【讨论】:

  • 嗨,我在上面编辑了我的帖子。在 Flutter 中,我们无法使用 init 方法访问数据,否则我们无法启动 getData() 方法。所以我改变了代码,如上面的帖子所示。你认为这应该有效吗?模拟器只显示“_JsonQuerrySnapshot”的实例......谢谢!
【解决方案2】:

您需要调用 await 或使用 FutureBuilder 像这样

FutureBuilder(
      future: FirebaseFirestore.instance
          .collection('users')
          .where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid)
          .get(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {

          return Column(
        children: [Text(snapshot.data['name'])], //error here
      );
        }
        return Loading();
      },
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-29
    • 2022-10-06
    • 2019-11-01
    • 2020-04-15
    • 2021-02-16
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多