У меня возникла проблема, когда я попытался сопоставить a. json со списком объектов, сначала это. json used:
[{
"name": "Peru",
"capital": "Lima",
"region": "Americas",
"subregion": "South America",
"population": 31488700
}]
затем это модель:
import 'dart:convert';
import 'package:clean_architecture_tdd_course/features/country_info/domain/entities/country_info.dart';
import 'package:meta/meta.dart';
List<CountryInfoModel> countryFromJson(String str) => new
List<CountryInfoModel>.from(json.decode(str).map((x) => CountryInfoModel.fromJson(x)));
String countryToJson(List<CountryInfoModel> data) => json.encode(new List<dynamic>.from(data.map((x)
=> x.toJson())));
class CountryInfoModel extends CountryInfo {
CountryInfoModel({
@required String name,
@required String capital,
@required String region,
@required String subregion,
@required int population,
}) : super(name:name, capital:capital, region:region, subregion:subregion, population:population);
factory CountryInfoModel.fromJson(Map<String, dynamic> json) {
return CountryInfoModel(
name: json['name'],
capital: json['capital'],
region: json['region'],
subregion: json['subregion'],
population: (json['population'] as num).toInt()
);
}
Map<String, dynamic> toJson() {
return {
'name': name,
'capital': capital,
'region': region,
'subregion': subregion,
'population': population
};
}
}
и, наконец, есть тест для этого, в этой части я создаю пример модели, который использовался для активирования, если функция to json верна:
void main() {
final tCountryInfoModel = CountryInfoModel(name: 'Peru', capital: 'Lima', region: "Americas",
subregion: "South Americas", population: 31488700);
group('fromJson', () {
test(
'should return a valid model',
() async {
// arrange
final Map jsonMap =
json.decode(fixture('country_info.json'));
// act
final result = countryFromJson(jsonMap.toString());
// assert
expect(result[0], tCountryInfoModel);
},
);
Когда я запускаю тест, он выдает следующее:
type 'List<dynamic>' is not a subtype of type 'Map<dynamic, dynamic>'
test\features\country_info\data\models\country_info_model_test.dart 27:19 main.<fn>.<fn>