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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:10:23