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
相关产品推荐
相关产品推荐

