简体   繁体   English

class 'List' 没有未命名的构造函数

[英]The class 'List' doesn't have an unnamed constructor

I am trying to write a model but i keep getting this error.我正在尝试编写 model,但我一直收到此错误。 Here is the code.这是代码。

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));
  });
  }
 }
}

List<CardResults>() is no longer valid Dart code as of Dart 3.0.从 Dart 3.0 开始, List<CardResults>()不再有效 Dart 代码。 See https://github.com/dart-lang/sdk/issues/49529 for details.详情见https://github.com/dart-lang/sdk/issues/49529

You can instead use <CardResults>[] .您可以改为使用<CardResults>[] But personally, I prefer creating the completed list at the declaration, rather than creating an empty list and building it up.但就个人而言,我更喜欢在声明时创建完整的列表,而不是创建一个空列表并构建它。

First, List type doesn't have a default constructor so doing List() is not possible.首先, List类型没有默认构造函数,因此无法执行List() So, instead you can create an empty list using <CardResults>[] or List<CardResults>.empty() .因此,您可以使用<CardResults>[]List<CardResults>.empty()创建一个空列表。

You can learn more about available constructors for List type here .您可以在此处了解有关List类型的可用构造函数的更多信息。


Second, you can optimize your code and instead of creating an empty list and calling add for each item you can use map method, like:其次,您可以优化您的代码,而不是创建一个空列表并为每个项目调用添加,您可以使用map方法,例如:

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

You can learn more about map method here .您可以在此处了解有关map方法的更多信息。


Third, instead of marking a property as late you can make it final and use factory constructor to instantiate an object. Finally, your CardModel should look like this:第三,不是将属性标记为late ,而是将其设为final并使用factory constructor实例化 object。最后,您的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() ?? [],
    );
  }
}

You can learn more about factory constructors here .您可以在此处了解有关工厂构造函数的更多信息。

Since you are getting the list of results from a JSON, you can map get the model list like this:由于您从 JSON 获取结果列表,因此您可以 map 获取 model 列表,如下所示:

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: []);
 }
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM