如何从 StreamBuilder 将数据正确保存到我的模型中

奥马尔

所以我想知道将数据保存到我的模型中的最佳方法是什么。我注意到关于 StreamBuilder 和模型的信息并没有太多。(我的意思是两者都在一起)。

这是我目前的模型。

class User {
  String _username, _name, _dateBorn, _gender;

  bool _isObserver, _notifyFriends, _recordAudio, _sendTweet;

  List<dynamic> _friendList;
  List<dynamic> _pendingFriends;

  User(
      this._username,
      this._name,
      this._dateBorn,
      this._gender,
      this._isObserver,
      this._notifyFriends,
      this._recordAudio,
      this._sendTweet,
      this._friendList,
      this._pendingFriends);

  String get username => _username;
  String get name => _name;
  String get dateBorn => _dateBorn;
  String get gender => _gender;

  bool get isObserver => _isObserver;
  bool get notifyFriends => _notifyFriends;
  bool get recordAudio => _recordAudio;
  bool get sendTweet => _sendTweet;

  set setNotifyFriends(bool value) => _notifyFriends = value;
  set setRecordAudio(bool value) => _recordAudio = value;
  set setSendTweet(bool value) => _sendTweet = value;

  List<dynamic> get friendList => _friendList;
  List<dynamic> get pendinFriends => _pendingFriends;
}

这是我当前的 FireStore 数据库。

在此处输入图片说明

现在我正在做的是这个。

StreamBuilder(
            stream:
                FirebaseFirestore.instance.collection('Usuarios').snapshots(),
            builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
              if (!snapshot.hasData) {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }

              var data = snapshot.data!.docs;
              var user;

              data.forEach((element) {
                if (element["username"] == me) {
                  user = User(
                    element["username"],
                    element["realName"],
                    element["date_birth"],
                    element["sexo"],
                    element["isObserver"],
                    element["config"]["notifyFriends"],
                    element["config"]["recordAudio"],
                    element["config"]["sendTweet"],
                    element["friends"],
                    element["pendingFriends"],
                  );
                }
              });

              return FriendsWidget(user);
            }),

但我很确定这不是一个好的做法,将数据提供给模型的最佳做法是什么?在不丢失实时更新数据功能的情况下?

谢谢!

斯瓦米纳坦五世

我们可以利用json_serializableFlutter 中可用包来简化 JSON 解析并将其分配给相应的模型类,而不是手动分配。

您可以创建方法fromJsontoJson解析 JSONObjects。但是,我们可能需要设置一些开发依赖项才能使其在我们的项目中工作。请参考Flutter 上的文档

用法很简单,如下所示

FirebaseFirestore.instance.collection('allUsers').snapshots().listen((event) {
    for (var element in event.docChanges) {
        final modelData = UserModel.fromJson(element.doc.data());
        // Do anything with your user. For example adding to list. 
    }
});

模型类

part 'user_model.g.dart';

@JsonSerializable()
class UserModel {
  @JsonKey(name: 'user_id')
  String userId;

  @JsonKey(name: 'name')
  String name;
  
  UserModel();

  factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);

  Map<String, dynamic> toJson() => _$UserModelToJson(this);
}

json_serializablewith 的用法firestore在下面的文章中有解释。把它作为参考。

firestore-with-flutter-json-annotation

flutter-using-json_serializable-to-serialise

https://livebook.manning.com/book/flutter-in-action/chapter-10/v-7/54

示例链接中的点点滴滴提供了详细信息。您可能需要解决它以最适合您的要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何确保当我将数据保存到它使一个逗号CSV?

如何将所有保存在Dropbox中的文件保存到我的HTML页面

如何在Streambuilder中查询Firestore文档并更新ListView

如何将Beautiful Soup输出保存到我的SQLite数据库中?

如何使用TF2将加载的h5模型正确保存到pb

阅读后如何从StreamBuilder中删除数据?

在使用StreamBuilder从Firebase加载数据之前,Flutter会显示红色错误屏幕,该如何解决?

Flutter如何刷新StreamBuilder?

如何从Streambuilder订购商品

Flutter:StreamBuilder中的AnimatedSwitcher

StreamBuilder未按预期显示数据

如何在Flutter Streambuilder中重新启动流?

如何使用Mockito在Flutter中测试StreamBuilder?

如何将电话联系人保存到我自己的数据库中

如何将多维数组的值正确保存到数组中?

在 StreamBuilder 中加载数据时如何显示进度指示器?

如何使用 StreamBuilder 显示来自 Firestore 文档的数据列表

如何使用 store 方法,以便它可以将数据保存到我的表中

如何在 Flutter 中为 StreamBuilder 的重建添加条件?

来自 StreamBuilder 的存储数据

如何使用 StreamBuilder onDismissible

如何正确显示来自 StreamBuilder 'Cloud Firestore' 的单个值

如何使用 StreamBuilder 将 firebase firestore 中的数据检索到 flutter 并使用 ListView.builder 显示值?

如何抓取 PNG 图像并将其正确保存到我的磁盘

如何在 SliverList 中构建 StreamBuilder

如何使用setstate更改streambuilder中的变量值?

StreamBuilder 获取新数据后如何调用函数?

将 StreamBuilder 转换为 StreamProvider

如何在 Flutter streambuilder 的流中捕获异常