Firebase 如何从Firestore获取数组字段值
我有一个Flitter应用程序,它使用Firestore存储用户数据。我需要有关检索存储在“friends”数组中的值的帮助。下图显示了我的Firestore的结构。如您所见,“friends”字段是一个具有两个值的数组:“123456”和“789123” 我想将这些值存储在名为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
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更新了答案