如何修复Dart中‘All final variables must be initialized, but 'city' isn't’错误
解决Flutter错误:"All final variables must be initialized, but 'city' isn't"
错误原因
你声明了final City city;类成员变量,但未在构造函数中完成初始化。Dart要求所有final变量必须在对象创建时赋值,你之前的修改仅调整了参数类型,未解决核心的变量初始化问题。
解决方案
修正构造函数,将传入的city参数直接绑定到类的final成员变量,同时删除多余的id、name、imageUrl参数(这些属性应从city对象中读取,无需单独传入)。
修正后的完整代码
final City city; // 通过this.city直接将构造参数赋值给类成员,完成final变量初始化 CityCard(this.city, {super.key}); @override Widget build(BuildContext context) { return ClipRRect( borderRadius: BorderRadius.circular(18), child: Container( height: 150, width: 120, color: const Color(0xffF6F7F8), child: Column( children: [ Stack( children: [ Image.asset( city.imageUrl, width: 120, height: 102, fit: BoxFit.cover, ), city.isPopular ? Align( alignment: Alignment.topRight, child: Container( width: 50, height: 30, decoration: BoxDecoration( color: purpleColor, borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(36), )), child: Center( child: Image.asset( 'assets/star.png', width: 22, height: 22, ), ), ), ) : Container(), ], ), const SizedBox( height: 11, ), Text( city.name, style: blackTextStyle.copyWith( fontSize: 16, ), ), ], ), ), ); }
关键修改点
- 构造函数改为
CityCard(this.city, {super.key}):利用this.city语法,将构造参数直接赋值给类的final成员,完成初始化要求。 - 删除冗余参数:组件UI基于
City对象渲染,name、imageUrl等属性已包含在传入的city实例中,无需单独定义参数。
内容的提问来源于stack exchange,提问作者aldy waliyuddin
相关产品推荐
相关产品推荐

