Flutter const构造函数赋值List变量标红报错问题排查
问题原因
你的代码报错和类型匹配无关,Dart完全支持将已定义的同类型List变量赋值给List类型字段,核心问题是const编译时常量的约束不满足:
- 你给
StateRecord的构造函数加了const修饰,意味着用这个构造创建实例时,所有传入的参数必须是编译时就能确定值的常量 - 你定义的
HaryanaStateData是普通的顶层final变量,不是编译时常量,无法作为参数传入const构造函数,因此编译器标红拦截。
修正方案
根据你的业务场景二选一即可,两种方案都能满足你通过DataFile存储对应州PWData列表、后续访问数据的需求:
方案1(推荐,改造成本最低,灵活性高):去掉创建
StateRecord实例时的const关键字,不需要改动现有数据模型
修改后的StateList代码如下:final StateList = [ StateRecord( // 移除前面的const关键字 Stateid: "state01", StateName: "Andaman & Nicobar Island", DataFile: HaryanaStateData, Status: false, ), ];这个方案适合后续可能动态修改州对应数据列表的场景,没有常量约束。
方案2(适合静态固定数据,性能更优):如果你的所有州数据都是固定不变的静态资源,可以把相关数据都定义为编译时常量,保留const构造:
第一步:给PWData的构造函数加const修饰class PWData { final String id; final String name; final String designation; final String partySymUrl; final double partySymW; final double partySymH; final String pwPicUrl; final bool display; // 构造函数加const const PWData({ required this.id, required this.name, required this.designation, required this.partySymUrl, required this.partySymW, required this.partySymH, required this.pwPicUrl, required this.display, }); }第二步:给
HaryanaStateData的列表字面量加const,让它成为编译时常量final List<PWData> HaryanaStateData = const [ PWData( id: 'pw1', name: 'Haryana State Rajiv Singh Kataria', partySymUrl: 'assets/party_icon/bjp1.png', designation: 'MLA', pwPicUrl: 'assets/pw_pictures/amitabha.jpg', partySymW: 30, partySymH: 30, display: true, ), PWData( id: 'pw2', name: 'Haryana State Fist Last02', partySymUrl: 'assets/party_icon/congress1.png', designation: 'MLA', pwPicUrl: 'assets/pw_pictures/dharmindra.jpg', partySymW: 30, partySymH: 30, display: false, ), ];改完之后原来的const创建
StateRecord的代码就可以正常编译了。
内容的提问来源于stack exchange,提问作者Raj Kat
相关产品推荐
相关产品推荐

