问题描述
生成部分“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
这个错误是由于不兼容导致的还是我做错了什么?请回复。非常感谢你。 :)
解决方法
我猜这就是您的问题所在。
query.get().then((querySnapshot) => {
if (querySnapshot.size < 1) {addUser(userModel)}
});
使用您在模型类中创建的 toJson
方法传入 Map
而不是您的自定义 UserModel
对象。
{addUser(userModel.toJson())}