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

Flutter中向List添加元素报构造函数名称不匹配错误

错误原因
  • Dart 中类的作用域内仅允许声明属性、构造函数、成员方法,不能直接编写逻辑执行语句。你在_DeckofCards的成员定义区直接写deckList.add(first);,Dart 会将这种标识符(参数)格式的代码识别为构造函数声明,由于deckList和当前类名_DeckofCards不匹配,就会抛出*"The name of a constructor must match the name of the enclosing class."*的错误。
  • 你的_GamingCard构造函数存在参数错误:第五个入参错误写为this.name,和第三个入参重名,原本这个位置的参数应该用来给image属性赋值。
  • 代码中导入的dart:ui下的Image是底层绘制类,若你需要使用 Flutter 常规的图片组件,应导入package:flutter/material.dart;如果只是存储卡片图片的资源路径,建议将image字段改为String类型存储路径字符串。
修复方式

将列表添加元素的初始化逻辑放到类的构造函数中执行,同时修正构造函数的参数错误,参考代码如下:

import 'package:flutter/material.dart';

class _GamingCard{
  int? value1;
  int? value2;
  String? name;
  String? type;
  Image? image;

  // 修正最后一个入参,对应image属性
  _GamingCard(this.value1, this.value2, this.name, this.type, this.image);
}

class _DeckofCards{
  List<_GamingCard> deckList = List<_GamingCard>.empty(growable: true);

  _GamingCard first = _GamingCard(1,10,'ace','heart',null);
  _GamingCard second = _GamingCard(1,10,'ace','cross',null);

  // 在构造函数内执行初始化添加逻辑
  _DeckofCards(){
    deckList.add(first);
    deckList.add(second);
  }
}

你也可以使用 Dart 的级联运算符,在声明deckList时直接完成元素初始化,不需要单独编写构造函数:

class _DeckofCards{
  _GamingCard first = _GamingCard(1,10,'ace','heart',null);
  _GamingCard second = _GamingCard(1,10,'ace','cross',null);
  
  List<_GamingCard> deckList = List<_GamingCard>.empty(growable: true)
    ..add(first)
    ..add(second);
}

内容的提问来源于stack exchange,提问作者Ulmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:24:17