[英]The class 'FirebaseAnalytics' doesn't have an unnamed constructor
[英]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.