Firestore 是 Google 提供的一个 NoSQL 数据库,适用于移动和 Web 应用程序。它允许你存储和同步数据,并且可以轻松地与 Flutter 集成。
Flutter 是一个开源的 UI 工具包,用于构建跨平台的应用程序。它使用 Dart 语言进行开发。
嵌套数组中的地图 在 Firestore 中指的是一个字段包含一个数组,而数组中的每个元素又是一个地图(即键值对的集合)。
类型:
应用场景:
假设我们在 Firestore 中有一个集合 users
,每个文档包含一个字段 friends
,它是一个数组,数组中的每个元素是一个地图,表示一个朋友的信息。
{
"users": {
"userId1": {
"friends": [
{
"friendId": "friendId1",
"name": "Alice",
"age": 25
},
{
"friendId": "friendId2",
"name": "Bob",
"age": 30
}
]
}
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
void fetchUserFriends(String userId) async {
try {
QuerySnapshot querySnapshot = await FirebaseFirestore.instance
.collection('users')
.doc(userId)
.get();
if (querySnapshot.exists) {
var friendsData = querySnapshot.data()?['friends'] as List?;
if (friendsData != null) {
for (var friend in friendsData) {
print('Friend ID: ${friend['friendId']}');
print('Name: ${friend['name']}');
print('Age: ${friend['age']}');
}
}
} else {
print('User not found');
}
} catch (e) {
print('Error fetching user friends: $e');
}
}
问题1:数据类型不匹配
var friendsData = querySnapshot.data()?['friends'] as List?;
if (friendsData != null) {
for (var friend in friendsData) {
if (friend is Map<String, dynamic>) {
print('Friend ID: ${friend['friendId']}');
print('Name: ${friend['name']}');
print('Age: ${friend['age']}');
}
}
}
问题2:数据不存在
if (querySnapshot.exists) {
var friendsData = querySnapshot.data()?['friends'] as List?;
if (friendsData != null) {
// Process friends data
} else {
print('No friends data found');
}
} else {
print('User not found');
}
通过以上方法,你可以有效地从 Firestore 中嵌套在数组中的地图中获取数据,并处理可能遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云