Tpp*_*Tpp 1 model dart flutter flutter-freezed
我有这个冻结的部分
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'user_model.freezed.dart';
part 'user_model.g.dart';
@freezed
class UserModel with _$UserModel {
factory UserModel({
required String id,
@Default('') String uniqueId,
@Default(DateTime.now()) DateTime dob,
}) = _UserModel;
factory UserModel.fromJson(Map<String, dynamic> json) =>
_$UserModelFromJson(json);
}
Run Code Online (Sandbox Code Playgroud)
但由于DateTime.now() ,我无法生成所需的文件。
如果我做这样的事情:
factory UserModel({
required String id,
@Default('') String uniqueId,
required DateTime dob,
}) = _UserModel;
Run Code Online (Sandbox Code Playgroud)
它会起作用,但我必须手动将生成的数据编辑为:
dob: (json['dob'] as Timestamp?)?.toDate() ?? DateTime.now()
Run Code Online (Sandbox Code Playgroud)
从
dob: DateTime.parse(json['dob'] as String),
Run Code Online (Sandbox Code Playgroud)
我不能一直手动编辑它。
请问如何生成包括日期时间的模型类。
您需要在冻结的模型类中手动添加序列化逻辑。
在这种特定情况下,您需要 firestore 时间戳序列化逻辑。
只需添加
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:json_annotation/json_annotation.dart';
class TimestampSerializer implements JsonConverter<DateTime, dynamic> {
const TimestampSerializer();
@override
DateTime fromJson(dynamic timestamp) => timestamp.toDate();
@override
Timestamp toJson(DateTime date) => Timestamp.fromDate(date);
}
Run Code Online (Sandbox Code Playgroud)
并为您的 DateTime 属性添加TimestampSerializer()注释,如下所示。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'user_model.freezed.dart';
part 'user_model.g.dart';
@freezed
class UserModel with _$UserModel {
factory UserModel({
required String id,
@Default('') String uniqueId,
@TimestampSerializer() required DateTime dob,
}) = _UserModel;
factory UserModel.fromJson(Map<String, dynamic> json) =>
_$UserModelFromJson(json);
}
Run Code Online (Sandbox Code Playgroud)
然后最后运行构建运行程序。你已准备好出发。
希望能帮助到你!快乐编码:)
| 归档时间: |
|
| 查看次数: |
3186 次 |
| 最近记录: |