生成部件'UserModel.g.dart'后;成功地,我在尝试进行时出现了以下错误
if (user != null) {
var uid = user.providerData.first.uid;
var displayName = user.providerData.first.displayName;
var email = user.providerData.first.email;
var phoneNumber = user.providerData.first.phoneNumber;
var providerId = user.providerData.first.providerId;
var photoUrl = user.providerData.first.photoURL;
UserModel userModel = UserModel(phoneNumber,
uid: uid,
displayName: displayName,
email: email,
providerId: providerId,
photoUrl: photoUrl);
Query query = users.where('uid', isEqualTo: uid);
query.get().then((querySnapshot) => {
if (querySnapshot.size < 1) {addUser(userModel)}
});
}
}
这是我的UserModel.dart,文件中没有任何错误。
import 'package:json_annotation/json_annotation.dart';
part 'UserModel.g.dart';
@JsonSerializable()
class UserModel {
late String? uid;
late String? displayName;
late String? email;
late String? phoneNumber;
late String providerId;
late String? photoUrl;
UserModel(this.phoneNumber, {required this.uid, required this.displayName, required this.email,
required this.providerId, required this.photoUrl});
factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
Map<String, dynamic> toJson() => _$UserModelToJson(this);
}
当然,我可以手动映射每个值。但按照这里的建议https://flutter.dev/docs/development/data-and-backend/json,以防止
当您的项目变得更大时,手动解码不会很好地执行。手工编写解码逻辑可能变得难以管理并且容易出错。如果在访问不存在的JSON字段时出现拼写错误,则代码在运行时会抛出错误。
我使用了json_serializable插件来实现它的自动化。但我得到了以下错误:应为"Map<"类型的值;字符串,动态>',但得到了一个类型为"UserModel$"的
这个错误是由于不兼容造成的,还是我做错了什么?请回复。非常感谢。:(
我猜这就是你的问题所在。
query.get().then((querySnapshot) => {
if (querySnapshot.size < 1) {addUser(userModel)}
});
使用在模型类中创建的toJson
方法传入Map
,而不是自定义的UserModel
对象。
{addUser(userModel.toJson())}