簡體   English   中英

class 'List' 沒有未命名的構造函數

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

我正在嘗試編寫 model,但我一直收到此錯誤。 這是代碼。

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

從 Dart 3.0 開始, List<CardResults>()不再有效 Dart 代碼。 詳情見https://github.com/dart-lang/sdk/issues/49529

您可以改為使用<CardResults>[] 但就個人而言,我更喜歡在聲明時創建完整的列表,而不是創建一個空列表並構建它。

首先, List類型沒有默認構造函數,因此無法執行List() 因此,您可以使用<CardResults>[]List<CardResults>.empty()創建一個空列表。

您可以在此處了解有關List類型的可用構造函數的更多信息。


其次,您可以優化您的代碼,而不是創建一個空列表並為每個項目調用添加,您可以使用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實例化 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() ?? [],
    );
  }
}

您可以在此處了解有關工廠構造函數的更多信息。

由於您從 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