Flutter父类子类构造器问题:无法访问父类变量
Flutter父类子类构造器参数传递问题解决
问题核心
你遇到的报错是因为子类TennisAttributes的构造函数没有声明userRating参数,导致在父类的fromJson方法中实例化子类时,无法传入userRating参数。父类UserSportAttributes的userRating是带默认值的可选参数,但子类构造器没有暴露该参数,也没有在调用super时传递对应值。
两种解决方案
方案一:让子类支持传入userRating参数
修改TennisAttributes的构造器,添加与父类一致的userRating(及可选的gamesPlayed)参数,并传递给父类构造:
class TennisAttributes extends UserSportAttributes { TennisAttributes({ required int selfRating, required String description, int userRating = 0, int gamesPlayed = 0, }) : super( selfRating: selfRating, description: description, userRating: userRating, gamesPlayed: gamesPlayed, ); }
修改后,父类fromJson中的调用即可正常传入userRating:
static UserSportAttributes fromJson(Map<String, dynamic> json, String sportName) { if (sportName == "Tennis") { return TennisAttributes( selfRating: json['SelfRating'], userRating: json['UserRating'], // 不再报错 description: json['Description'], ); } // 其他运动类型的处理逻辑... }
(注:给父类fromJson指定返回类型UserSportAttributes,能提升代码类型安全性)
方案二:子类不暴露userRating,沿用父类默认值
如果不需要外部给子类传入userRating,可以直接在父类fromJson中只传递子类构造器要求的参数,此时userRating会自动使用父类的默认值0:
static UserSportAttributes fromJson(Map<String, dynamic> json, String sportName) { if (sportName == "Tennis") { return TennisAttributes( selfRating: json['SelfRating'], description: json['Description'], ); } // 其他运动类型的处理逻辑... }
内容的提问来源于stack exchange,提问作者Jaime Ferreira
相关产品推荐
相关产品推荐

