firebase 将流与函数一起传递到streambuilder时,快照提供空数据

xn1cxnb4  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(122)

在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(),
            );
          },
        ),

vmjh9lq9

vmjh9lq91#

我的坏,我使用的模型有不正确的数据类型。我只是使类型正确,它工作得很好。

相关问题