简单的JSON数据获取并在屏幕上显示,数据正在打印中显示,但在屏幕上显示NoSuchMethodErrorClass'ResponsiveObjectSettingByUser'的给定错误时,没有实例方法“ car”接收者:实例,
获取功能
--cb_type dm
初始化
--cb_type
模型类(ResponseObjectSettingByUser)
--cb_type
使用
在屏幕上显示数据Future<ResponseObjectSettingByUser> _list;
final String _url = '<LINK>';
Future<ResponseObjectSettingByUser> getUserSettings() async {
ResponseObjectSettingByUser responseData = null;
var response = await http
.get(_url + '<link>', headers: {
"Authorization":
'Bearer <TOKEN>',
});
var responseJson = json.decode(response.body);
if (response.statusCode == 200) {
responseJson = settingByUserModel(response.body);
print(responseJson.toJson().toString());
}
return responseJson;
}
JSON数据就是这样。
@override
void initState() {
super.initState();
_list = getUserSettings();
}
答案 0 :(得分:0)
您可以在下面复制粘贴运行完整代码
您可以在AsyncSnapshot<ResponseObjectSettingByUser>
中使用connectionState
并选中snapshot.data.array.car.length
并使用ListView
代码段
FutureBuilder(
future: _list,
builder:
(context, AsyncSnapshot<ResponseObjectSettingByUser> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('none');
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
case ConnectionState.active:
return Text('');
case ConnectionState.done:
if (snapshot.hasError) {
return Text(
'${snapshot.error}',
style: TextStyle(color: Colors.red),
);
} else {
return ListView.builder(
itemCount: snapshot.data.array.car.length,
itemBuilder: (context, index) {
工作演示
完整代码
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
ResponseObjectSettingByUser settingByUserModel(String str) =>
ResponseObjectSettingByUser.fromJson(json.decode(str));
String welcomeToJson(ResponseObjectSettingByUser data) =>
json.encode(data.toJson());
class ResponseObjectSettingByUser {
ResponseObjectSettingByUser({
this.array,
});
Array array;
factory ResponseObjectSettingByUser.fromJson(Map<String, dynamic> json) =>
ResponseObjectSettingByUser(
array: Array.fromJson(json["array"]),
);
Map<String, dynamic> toJson() => {
"array": array.toJson(),
};
}
class Array {
Array({
this.car,
});
List<Car> car;
factory Array.fromJson(Map<String, dynamic> json) => Array(
car: List<Car>.from(json["car"].map((x) => Car.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"car": List<dynamic>.from(car.map((x) => x.toJson())),
};
}
class Car {
Car({
this.id,
this.name,
this.numberKmsMin,
this.numberKmsMax,
this.priceMin,
this.priceMax,
this.powerHorseMin,
this.powerHorseMax,
this.status,
this.isSaved,
this.markId,
this.markName,
this.markImageUrl,
this.modelId,
this.modelName,
this.modelImageUrl,
this.bodyworkId,
this.bodyworkName,
this.fuelId,
this.fuelName,
this.motorizationId,
this.motorizationName,
this.rimsId,
this.rimsName,
this.serieId,
this.serieName,
this.interiorEquipmentId,
this.interiorEquipmentName,
this.upholsteryId,
this.upholsteryName,
this.upholsteryLeatherFabricName,
this.iluminationId,
this.iluminationName,
this.externalEquipmentId,
this.externalEquipmentName,
this.dateStartMin,
this.dateEndMax,
this.settings,
});
int id;
String name;
String numberKmsMin;
String numberKmsMax;
String priceMin;
String priceMax;
String powerHorseMin;
String powerHorseMax;
String status;
int isSaved;
int markId;
String markName;
String markImageUrl;
int modelId;
String modelName;
String modelImageUrl;
int bodyworkId;
String bodyworkName;
int fuelId;
String fuelName;
int motorizationId;
String motorizationName;
dynamic rimsId;
dynamic rimsName;
int serieId;
String serieName;
int interiorEquipmentId;
String interiorEquipmentName;
int upholsteryId;
String upholsteryName;
String upholsteryLeatherFabricName;
int iluminationId;
String iluminationName;
int externalEquipmentId;
String externalEquipmentName;
String dateStartMin;
String dateEndMax;
List<Setting> settings;
factory Car.fromJson(Map<String, dynamic> json) => Car(
id: json["id"],
name: json["name"],
numberKmsMin: json["number_kms_min"],
numberKmsMax: json["number_kms_max"],
priceMin: json["price_min"],
priceMax: json["price_max"],
powerHorseMin: json["power_horse_min"],
powerHorseMax: json["power_horse_max"],
status: json["status"],
isSaved: json["is_saved"],
markId: json["mark_id"],
markName: json["mark_name"],
markImageUrl: json["mark_image_url"],
modelId: json["model_id"],
modelName: json["model_name"],
modelImageUrl: json["model_image_url"],
bodyworkId: json["bodywork_id"],
bodyworkName: json["bodywork_name"],
fuelId: json["fuel_id"],
fuelName: json["fuel_name"],
motorizationId: json["Motorization_id"],
motorizationName: json["Motorization_name"],
rimsId: json["rims_id"],
rimsName: json["rims_name"],
serieId: json["serie_id"],
serieName: json["serie_name"],
interiorEquipmentId: json["Interior_equipment_id"],
interiorEquipmentName: json["Interior_equipment_name"],
upholsteryId: json["Upholstery_id"],
upholsteryName: json["Upholstery_name"],
upholsteryLeatherFabricName: json["Upholstery_Leather_fabric_name"],
iluminationId: json["ilumination_id"],
iluminationName: json["ilumination_name"],
externalEquipmentId: json["external_equipment_id"],
externalEquipmentName: json["external_equipment_name"],
dateStartMin: json["date_start_min"],
dateEndMax: json["date_end_max"],
settings: json["settings"] == null
? null
: List<Setting>.from(
json["settings"].map((x) => Setting.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"number_kms_min": numberKmsMin,
"number_kms_max": numberKmsMax,
"price_min": priceMin,
"price_max": priceMax,
"power_horse_min": powerHorseMin,
"power_horse_max": powerHorseMax,
"status": status,
"is_saved": isSaved,
"mark_id": markId,
"mark_name": markName,
"mark_image_url": markImageUrl,
"model_id": modelId,
"model_name": modelName,
"model_image_url": modelImageUrl,
"bodywork_id": bodyworkId,
"bodywork_name": bodyworkName,
"fuel_id": fuelId,
"fuel_name": fuelName,
"Motorization_id": motorizationId,
"Motorization_name": motorizationName,
"rims_id": rimsId,
"rims_name": rimsName,
"serie_id": serieId,
"serie_name": serieName,
"Interior_equipment_id": interiorEquipmentId,
"Interior_equipment_name": interiorEquipmentName,
"Upholstery_id": upholsteryId,
"Upholstery_name": upholsteryName,
"Upholstery_Leather_fabric_name": upholsteryLeatherFabricName,
"ilumination_id": iluminationId,
"ilumination_name": iluminationName,
"external_equipment_id": externalEquipmentId,
"external_equipment_name": externalEquipmentName,
"date_start_min": dateStartMin,
"date_end_max": dateEndMax,
"settings": settings == null
? null
: List<dynamic>.from(settings.map((x) => x.toJson())),
};
}
class Setting {
Setting({
this.id,
this.name,
});
int id;
String name;
factory Setting.fromJson(Map<String, dynamic> json) => Setting(
id: json["id"],
name: json["name"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
};
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<ResponseObjectSettingByUser> _list;
Future<ResponseObjectSettingByUser> getUserSettings() async {
ResponseObjectSettingByUser responseData = null;
/*var response = await http
.get(_url + '<link>', headers: {
"Authorization":
'Bearer <TOKEN>',
});*/
String jsonString = '''
{
"array": {
"car": [
{
"id": 131,
"name": "120",
"number_kms_min": "1000",
"number_kms_max": "10000",
"price_min": "10000",
"price_max": "1000",
"power_horse_min": "100",
"power_horse_max": "120",
"status": "1",
"is_saved": 0,
"mark_id": 1,
"mark_name": "BMW",
"mark_image_url": "https://cdn0.iconfinder.com/data/icons/car-brands/550/BMW_logo-512.png",
"model_id": 1,
"model_name": "Serie 1",
"model_image_url": "https://www.bmw.pt/content/dam/bmw/common/all-models/1-series/5-door/2019/navigation/bmw-1-series-modelfinder.png",
"bodywork_id": 1,
"bodywork_name": "Coupé",
"fuel_id": 1,
"fuel_name": "Gasolina",
"Motorization_id": 1,
"Motorization_name": "Manual",
"rims_id": 1,
"rims_name": "Preto fosco\r\n5 raios",
"serie_id": 1,
"serie_name": "120",
"Interior_equipment_id": 1,
"Interior_equipment_name": "Bancos desportivos\r\n",
"Upholstery_id": 1,
"Upholstery_name": "Preto",
"Upholstery_Leather_fabric_name": "Preto",
"ilumination_id": 1,
"ilumination_name": "Iluminação ambiente",
"external_equipment_id": 1,
"external_equipment_name": "Para-choques desportivos",
"date_start_min": "03/18",
"date_end_max": "09/19"
},
{
"id": 121,
"name": "120",
"number_kms_min": "1000",
"number_kms_max": "10000",
"price_min": "10000",
"price_max": "1000",
"power_horse_min": "100",
"power_horse_max": "120",
"status": "1",
"is_saved": 0,
"mark_id": 1,
"mark_name": "BMW",
"mark_image_url": "https://cdn0.iconfinder.com/data/icons/car-brands/550/BMW_logo-512.png",
"model_id": 1,
"model_name": "Serie 1",
"model_image_url": "https://www.bmw.pt/content/dam/bmw/common/all-models/1-series/5-door/2019/navigation/bmw-1-series-modelfinder.png",
"bodywork_id": 1,
"bodywork_name": "Coupé",
"fuel_id": 1,
"fuel_name": "Gasolina",
"Motorization_id": 1,
"Motorization_name": "Manual",
"rims_id": 1,
"rims_name": "Preto fosco\r\n5 raios",
"serie_id": 1,
"serie_name": "120",
"Interior_equipment_id": 1,
"Interior_equipment_name": "Bancos desportivos\r\n",
"Upholstery_id": 1,
"Upholstery_name": "Preto",
"Upholstery_Leather_fabric_name": "Preto",
"ilumination_id": 1,
"ilumination_name": "Iluminação ambiente",
"external_equipment_id": 1,
"external_equipment_name": "Para-choques desportivos",
"date_start_min": "03/18",
"date_end_max": "09/19"
},
{
"id": 111,
"name": "120",
"number_kms_min": "1000",
"number_kms_max": "10000",
"price_min": "10000",
"price_max": "1000",
"power_horse_min": "100",
"power_horse_max": "120",
"status": "1",
"is_saved": 0,
"mark_id": 1,
"mark_name": "BMW",
"mark_image_url": "https://cdn0.iconfinder.com/data/icons/car-brands/550/BMW_logo-512.png",
"model_id": 1,
"model_name": "Serie 1",
"model_image_url": "https://www.bmw.pt/content/dam/bmw/common/all-models/1-series/5-door/2019/navigation/bmw-1-series-modelfinder.png",
"bodywork_id": 1,
"bodywork_name": "Coupé",
"fuel_id": 1,
"fuel_name": "Gasolina",
"Motorization_id": 1,
"Motorization_name": "Manual",
"rims_id": 1,
"rims_name": "Preto fosco\r\n5 raios",
"serie_id": 1,
"serie_name": "120",
"Interior_equipment_id": 1,
"Interior_equipment_name": "Bancos desportivos\r\n",
"Upholstery_id": 1,
"Upholstery_name": "Preto",
"Upholstery_Leather_fabric_name": "Preto",
"ilumination_id": 1,
"ilumination_name": "Iluminação ambiente",
"external_equipment_id": 1,
"external_equipment_name": "Para-choques desportivos",
"date_start_min": "03/18",
"date_end_max": "09/19"
}
]
}
}
''';
http.Response response = http.Response(jsonString, 200);
if (response.statusCode == 200) {
String postProcessing =
response.body.replaceAll('\n', "").replaceAll('\r', "");
var responseJson = settingByUserModel(postProcessing);
print(responseJson.toJson().toString());
return responseJson;
}
}
@override
void initState() {
_list = getUserSettings();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: FutureBuilder(
future: _list,
builder:
(context, AsyncSnapshot<ResponseObjectSettingByUser> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('none');
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
case ConnectionState.active:
return Text('');
case ConnectionState.done:
if (snapshot.hasError) {
return Text(
'${snapshot.error}',
style: TextStyle(color: Colors.red),
);
} else {
return ListView.builder(
itemCount: snapshot.data.array.car.length,
itemBuilder: (context, index) {
return Card(
elevation: 6.0,
child: Padding(
padding: const EdgeInsets.only(
top: 6.0,
bottom: 6.0,
left: 8.0,
right: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(snapshot
.data.array.car[index].markName),
Spacer(),
Text(snapshot
.data.array.car[index].id.toString()),
],
),
));
});
}
}
}));
}
}