firebase - 使用自定义对象将 Firebase 中的地图数据检索到 Flutter
问题描述
我正在尝试从映射的 firebase 中获取一些数据,如下例所示。但我不知道该怎么做。我还希望能够通过颤振创建这些数据,并在每次有人进行身份验证时使用更新!
这是我创建用户的 auth.dart
Future emailPassword(String email, String password) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
User user = result.user;
await DatabaseService(uid: user.uid).updateUserData(
name: 'Nome da Ficha',
minLife: 0,
maxLife: 0,
minSanity: 0,
maxSanity: 0,
diceValue: 0,
diceSuccess: '',
imgUrl: [
'http://pm1.narvii.com/7061/94a9e73f84c28d8c8cb26d1aca69edec13075dfer1-500-500v2_00.jpg',
'foto1',
'foto2',
'foto3',
'foto4',
'foto5',
'foto6',
'foto7'
],
imageState: 0,
);
return _userFromUser(user);
} catch (err) {
print(err.toString());
return null;
}
}
用户模型:
class UserModel {
final String uid;
UserModel({this.uid});
}
class UserData {
final String uid;
final String name;
final int minLife;
final int maxLife;
final int minSanity;
final int maxSanity;
final int diceValue;
final String diceSuccess;
final List<dynamic> imgUrl;
final int imageState;
UserData({
this.uid,
this.name,
this.minLife,
this.maxLife,
this.minSanity,
this.maxSanity,
this.diceValue,
this.diceSuccess,
this.imgUrl,
this.imageState,
});
}
这是我的数据库服务:
class DatabaseService {
final String uid;
DatabaseService({this.uid});
//Referencia para uma Coleção específica
final CollectionReference userSheet =
FirebaseFirestore.instance.collection('userSheet');
Future updateUserData({
String name,
int minLife,
int maxLife,
int minSanity,
int maxSanity,
int diceValue,
String diceSuccess,
List<dynamic> imgUrl,
int imageState,
}) async {
return await userSheet.doc(uid).set({
'name': name,
'minLife': minLife,
'maxLife': maxLife,
'minSanity': minSanity,
'maxSanity': maxSanity,
'diceValue': diceValue,
'diceSuccess': diceSuccess,
'imgUrl': imgUrl,
'imageState': imageState,
});
}
// retorna um snapshot, mas mapeado para UserData
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
name: snapshot['name'],
minLife: snapshot['minLife'],
maxLife: snapshot['maxLife'],
minSanity: snapshot['minSanity'],
maxSanity: snapshot['maxSanity'],
diceValue: snapshot['diceValue'],
diceSuccess: snapshot['diceSuccess'],
imgUrl: List.from(snapshot['imgUrl']),
imageState: snapshot['imageState'],
);
}
//lista de todas as fichas dos usuários retornando em Stream
List<UserData> _allUserDataFromSnapshot(QuerySnapshot snapshot) {
return snapshot.docs.map((doc) {
return UserData(
name: doc['name'] ?? 'Nome da Ficha',
minLife: doc['minLife'] ?? 0,
maxLife: doc['maxLife'] ?? 0,
minSanity: doc['minSanity'] ?? 0,
maxSanity: doc['maxSanity'] ?? 0,
diceSuccess: doc['diceSuccess'] ?? '',
diceValue: doc['diceValue'] ?? 0,
imgUrl: List.from(doc['imgUrl']) ?? ['0'],
imageState: doc['imageState'] ?? 0,
);
}).toList();
}
//Obter Strams de uma Query do Firestore Collection
Stream<List<UserData>> get allUserData {
return userSheet.snapshots().map(_allUserDataFromSnapshot);
}
//Obter Streams do Usuário (sem ser habilidades)
Stream<UserData> get userData {
return userSheet.doc(uid).snapshots().map(_userDataFromSnapshot);
}
}
解决方案
推荐阅读
- javascript - 在 Javascript 构造函数中访问自己的属性?
- python - 为什么 Dask 在提交时实例化我的课程?
- android - 从同一个模块构建 AAR 和 APK
- postgresql - 为什么过滤时使用相同的字段会导致不同的执行时间?(不同的索引用法)
- c - C语言地址分配查询
- ios - 错误:架构 x86_64 的未定义符号:react-native (iOS) 中的“_OBJC_CLASS_$_RNPermissionHandlerPhotoLibrary”
- node.js - 此请求的币安签名无效错误
- python - 具有圆形距离的网格python
- c# - 按钮可以在 C# 中切换布尔值
- runtime-error - Xcode 12.5 损坏 NavigationLink