Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何从Firestore获取数组字段值_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 如何从Firestore获取数组字段值

Firebase 如何从Firestore获取数组字段值,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个Flitter应用程序,它使用Firestore存储用户数据。我需要有关检索存储在“friends”数组中的值的帮助。下图显示了我的Firestore的结构。如您所见,“friends”字段是一个具有两个值的数组:“123456”和“789123” 我想将这些值存储在名为friendsList的变量中,并尝试在getFriendsList()中执行此操作。为了测试并查看“friends”数组值是否存储在friendsList变量中,我使用getFriendsList()末尾的print

我有一个Flitter应用程序,它使用Firestore存储用户数据。我需要有关检索存储在“friends”数组中的值的帮助。下图显示了我的Firestore的结构。如您所见,“friends”字段是一个具有两个值的数组:“123456”和“789123”

我想将这些值存储在名为
friendsList
的变量中,并尝试在getFriendsList()中执行此操作。为了测试并查看“friends”数组值是否存储在
friendsList
变量中,我使用getFriendsList()末尾的print语句打印
friendsList
的值。但是当我检查控制台时,会打印“Future”的实例,而不是“friends”字段的值

如何将Firestore中“friends”数组字段的值分配到我的
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);
  }
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包装:情绪/组件/导航抽屉.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
FirebaseAuth auth=FirebaseAuth.instance;
用户当前用户;
字符串currentUserUID;
未来的朋友名单;
类LandingScreen扩展StatefulWidget{
静态常量字符串id='landing_screen';
@凌驾
_LandingScreenState createState()=>LandingScreenState();
}
类_LandingScreenState扩展状态{
final _auth=FirebaseAuth.instance;
@凌驾
void initState(){
super.initState();
getUserData();
}
void getUserData(){
getCurrentUser();
getCurrentUserUID();
getFriendsList();
}
void getCurrentUser(){
最终currentUser=\u auth.currentUser;
}
void getCurrentUserUID(){
currentUserUID=auth.currentUser.uid;
}
void getFriendsList(){
friendsList=FirebaseFirestore.instance
.收集(“用户”)
.doc(currentUserUID)
.get()
.然后((值){
返回值.data()[“朋友”];
});
打印(友人名单);
}

在then回调中,只需将您的列表分配给friendsList,并将您的friendsList更改为
列表
类型

FirebaseFirestore.instance
    .collection("Users")
    .doc(currentUserUID)
    .get()
    .then((value) {
       friendsList = value.data()["friends"];
       print(friendsList);
    });
根据您对async Wait语法的评论

final value = await FirebaseFirestore.instance
    .collection("Users")
    .doc(currentUserUID)
    .get();

friendsList = value.data()["friends"];

在then回调中,只需将列表分配给friendsList,并将friendsList更改为
list
type

FirebaseFirestore.instance
    .collection("Users")
    .doc(currentUserUID)
    .get()
    .then((value) {
       friendsList = value.data()["friends"];
       print(friendsList);
    });
根据您对async Wait语法的评论

final value = await FirebaseFirestore.instance
    .collection("Users")
    .doc(currentUserUID)
    .get();

friendsList = value.data()["friends"];

这起作用了,但我还需要添加async和await getFriendsList()。谢谢!也用async await语法@CuriousCoder更新了答案。这起作用了,但我还需要添加async和await getFriendsList()。谢谢!也用async await语法@CuriousCoder更新了答案