【问题标题】:How to Get Array Field Values From Firestore如何从 Firestore 获取数组字段值
【发布时间】:2021-06-07 04:01:13
【问题描述】:

我有一个使用 Firestore 存储用户数据的 Flutter 应用。我需要帮助来检索存储在“朋友”数组中的值。下图显示了我的 Firestore 的结构。如您所见,“朋友”字段是一个包含两个值的数组:“123456”和“789123”。

我想将这些值存储在名为friendsList 的变量中,并尝试在getFriendsList() 中执行此操作。为了测试并查看“朋友”数组值是否存储在friendsList 变量中,我在 getFriendsList() 末尾使用了一个打印语句来打印friendsList 的值。但是当我检查我的控制台时,打印的是Instance of 'Future<dynamic>',而不是“朋友”字段的值。

如何将 Firestore 中的“朋友”数组字段的值分配到我的 friendsList 变量中?

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:mood/components/nav_drawer.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

FirebaseAuth auth = FirebaseAuth.instance;
User currentUser;
String currentUserUID;
Future<dynamic> friendsList;

class LandingScreen extends StatefulWidget {
  static const String id = 'landing_screen';

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

class _LandingScreenState extends State<LandingScreen> {
  final _auth = FirebaseAuth.instance;

  @override
  void initState() {
    super.initState();
    getUserData();
  }

  void getUserData() {
    getCurrentUser();
    getCurrentUserUID();
    getFriendsList();
  }

  void getCurrentUser() {
    final currentUser = _auth.currentUser;
  }

  void getCurrentUserUID() {
    currentUserUID = auth.currentUser.uid;
  }

  void getFriendsList() {
    friendsList = FirebaseFirestore.instance
        .collection("Users")
        .doc(currentUserUID)
        .get()
        .then((value) {
      return value.data()["friends"];
    });
    print(friendsList);
  }

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    在then回调中,只需将您的列表分配给friendsList并将您的friendsList更改为List&lt;dynamic&gt;类型

    FirebaseFirestore.instance
        .collection("Users")
        .doc(currentUserUID)
        .get()
        .then((value) {
           friendsList = value.data()["friends"];
           print(friendsList);
        });
    

    根据您对异步等待语法的评论,

    final value = await FirebaseFirestore.instance
        .collection("Users")
        .doc(currentUserUID)
        .get();
    
    friendsList = value.data()["friends"];
    

    【讨论】:

    • 这行得通,但我还需要添加异步并等待 getFriendsList()。谢谢!
    • 用异步等待语法更新了答案@CuriousCoder
    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2020-09-06
    • 2018-10-18
    • 1970-01-01
    相关资源
    最近更新 更多