“List”类没有未命名的构造函数

问题描述 投票:0回答:4

我正在尝试编写一个模型,但我不断收到此错误。这是代码。

import 'package:flutter/material.dart';

class CardModel {
late List<CardResults> results;

CardModel({ required this.results});

CardModel.fromJson(Map<String, dynamic> json) {
if (json['cardResults'] != null) {
  results = List<CardResults>();
  json['cardResults'].forEach((v) {
    results.add(CardResults.fromJson(v));
  });
  }
 }
}
flutter list dart model
4个回答
10
投票
从 Dart 3.0 开始,

List<CardResults>()
不再是有效的 Dart 代码。 有关详细信息,请参阅https://github.com/dart-lang/sdk/issues/49529

您可以使用

<CardResults>[]
。但就我个人而言,我更喜欢在声明时创建完整的列表,而不是创建一个空列表并构建它。


4
投票

首先,

List
类型没有默认构造函数,因此不可能执行
List()
。因此,您可以使用
<CardResults>[]
List<CardResults>.empty()
创建一个空列表。

您可以在

List
类型此处了解有关可用构造函数的更多信息。


其次,您可以优化代码,而不是创建一个空列表并为每个项目调用 add ,您可以使用

map
方法,例如:

CardModel.fromJson(Map<String, dynamic> json) {
  if (json['cardResults'] != null) {
    results = json['cardResults'].map<CardResults>((v) => CardResults.fromJson(v)).toList();
  }
}

您可以了解更多关于

map
方法这里


第三,您可以将属性标记为

late
并使用
final
来实例化对象,而不是将属性标记为
factory constructor
。最后,您的
CardModel
应如下所示:

class CardModel {
  final List<CardResults> results;

  CardModel({required this.results});

  factory CardModel.fromJson(Map<String, dynamic> json) {
    return CardModel(
      results: json['cardResults']?.map<CardResults>((v) => CardResults.fromJson(v)).toList() ?? [],
    );
  }
}

您可以在这里了解有关工厂构造函数的更多信息。


1
投票

由于您是从 JSON 获取结果列表,因此您可以像这样映射获取模型列表:

class CardModel {
//assuming your list is a list of strings
List<String> results;

CardModel({required this.results});

factory CardModel.fromJson(Map<String, dynamic> json) {
  if (json['cardResults'] != null) {
  return CardModel(
      results: List<String>.from(json["cardResults"].map((x) => x)));
 }
 // return an empty list if cardResults is empty
 return CardModel(results: []);
 }
} 

0
投票

使用 [] 或 List.empty() 创建一个空列表。 列表 widgetList = new List.empty(); 帮助我谢谢你的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.