在StreamBuilder中,当我传递单个DocumentSnapshot的流时,快照返回空数据。另外,如您所见,我添加了数据和连接检查,但它始终显示没有配置文件数据,这意味着数据为空。在我遵循人们已实现的文章的示例时,是否缺少了某些内容
用户模型.dart
import 'package:cloud_firestore/cloud_firestore.dart';
class UserModel {
String? earningsUnit;
String? email;
String? fullName;
String? lastUpdate;
String? profileImageUrl;
String? superAdmin;
String? totalPoints;
String? totalWorkMinutes;
String? uid;
String? updatedBy;
UserModel({
this.earningsUnit,
this.email,
this.fullName,
this.lastUpdate,
this.profileImageUrl,
this.superAdmin,
this.totalPoints,
this.totalWorkMinutes,
this.uid,
this.updatedBy,
});
factory UserModel.fromDocumentSnapshot(Map<String,dynamic> data) {
return UserModel(
earningsUnit:
data.containsKey("earningsUnit") ? data["earningsUnit"] ?? "" : "",
email: data.containsKey("email") ? data["email"] ?? "" : "",
fullName: data.containsKey("fullname") ? data["fullname"] ?? "" : "",
lastUpdate:
data.containsKey("lastupdate") ? data["lastupdate"] ?? false : false,
profileImageUrl: data.containsKey("profileImageUrl")
? data["profileImageUrl"] ?? 0
: 0,
superAdmin: data.containsKey("superAdmin") ? data["superAdmin"] ?? 0 : 0,
totalPoints:
data.containsKey("totalPoints") ? data["totalPoints"] ?? 0 : 0,
totalWorkMinutes: data.containsKey("totalWorkMinutes")
? data["totalWorkMinutes"] ?? ""
: "",
uid: data.containsKey("uid") ? data["uid"] ?? "" : "",
updatedBy: data.containsKey("updatedby") ? data["updatedby"] ?? "" : "",
);
}
}
用户网络.dart
class UserNetwork {
final FirebaseFirestore _db = FirebaseFirestore.instance;
Stream<UserModel> retrieveUserData(String id) {
final stream = _db.collection('users').doc(id).snapshots();
return stream.map((snap) => UserModel.fromDocumentSnapshot(snap.data()!));
}
}
StreamBuilder实施
StreamBuilder(
stream: userNetwork
.retrieveUserData(FirebaseAuth.instance.currentUser!.uid),
builder: (BuildContext context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
if (snapshot.data != null) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
child: Text(
snapshot.data!.fullName ?? "",
style: const TextStyle(
fontWeight: FontWeight.w900,
fontSize: 25,
),
),
),
InkWell(
onTap: () {
Navigator.pushNamed(context, EditProfile.id);
},
child: Container(
padding: const EdgeInsets.fromLTRB(0, 0, 20, 0),
child: CircleAvatar(
backgroundImage:
NetworkImage(snapshot.data!.profileImageUrl!),
radius: 40,
),
),
),
],
);
} else {
return Center(
child: Text(
'No Profile Data',
style: cTextStyleMedium,
),
);
}
}
return Center(
child: CustomLoading(),
);
},
),
1条答案
按热度按时间vmjh9lq91#
我的坏,我使用的模型有不正确的数据类型。我只是使类型正确,它工作得很好。