You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter结合GetX操作Firebase时创建UserModel实例参数报错如何解决

错误原因

  • 你定义的UserModel默认构造函数为3个必填位置参数,参数顺序固定为uid、email、name,你传入Map对象、用大括号包裹参数的写法不符合该构造函数的入参要求,所以触发参数数量不匹配的报错。
  • 你尝试传键值对Map的方式,需要UserModel有支持接收Map参数的对应构造函数才能使用,你当前的代码中没有定义这类构造函数,自然不生效。
  • 额外提示:你现有代码中的UserModel.fromDocumentSnapshot构造函数存在逻辑冗余问题,初始化列表已经对三个属性赋值,后续构造函数体内又用documentSnapshot的取值覆盖,会导致你传入的前三个参数完全无效。

解决方案

方案1:直接按现有构造函数规则传参

按位置参数的顺序直接传入对应值即可,不需要大括号:

UserModel _user = UserModel(
  _yeniUserUID, // 第一个参数:uid
  _yeniUser.email, // 第二个参数:email
  name // 第三个参数:name
);

方案2:新增构造函数支持Map/命名参数传参

如果想保留键值对传参的写法,给UserModel新增对应命名构造函数即可:

class UserModel {
  String uid;
  String name;
  String? email;

  UserModel(
    this.uid,
    this.email,
    this.name,
  );

  // 新增fromMap构造函数,支持从Map创建对象
  UserModel.fromMap(Map<String, dynamic> map) :
    uid = map['uid'],
    name = map['name'],
    email = map['email'];

  // 修正冗余的fromDocumentSnapshot构造函数
  UserModel.fromDocumentSnapshot(DocumentSnapshot documentSnapshot) :
    uid = documentSnapshot.id,
    name = documentSnapshot["name"],
    email = documentSnapshot["email"];
}

之后就可以用你之前的写法创建对象:

UserModel _user = UserModel.fromMap({
  'name': name,
  'email': _yeniUser.email,
  'uid': _yeniUserUID,
});

内容的提问来源于stack exchange,提问作者Tolga Yılmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:06