只需查看我根据您提供的 json 实现的代码即可。
这是您提供的 json。
[
{
"id":1,
"governorate_name":"test governorate",
"governorate_cities":[
]
},
{
"id":1,
"governorate_name":"test governorate 2",
"governorate_cities":[
{
"id":11,
"city_name":"test city",
"governorate_id":1
}
]
}
]
从上面的 json 我已经为它创建了一个模型类,只需检查一下
// To parse this JSON data, do
//
// final governorate = governorateFromJson(jsonString);
import 'dart:convert';
List<Governorate> governorateFromJson(String str) => List<Governorate>.from(json.decode(str).map((x) => Governorate.fromJson(x)));
String governorateToJson(List<Governorate> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Governorate {
Governorate({
this.id,
this.governorateName,
this.governorateCities,
});
int id;
String governorateName;
List<GovernorateCity> governorateCities;
factory Governorate.fromJson(Map<String, dynamic> json) => Governorate(
id: json["id"],
governorateName: json["governorate_name"],
governorateCities: List<GovernorateCity>.from(json["governorate_cities"].map((x) => GovernorateCity.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"id": id,
"governorate_name": governorateName,
"governorate_cities": List<dynamic>.from(governorateCities.map((x) => x.toJson())),
};
}
class GovernorateCity {
GovernorateCity({
this.id,
this.cityName,
this.governorateId,
});
int id;
String cityName;
int governorateId;
factory GovernorateCity.fromJson(Map<String, dynamic> json) => GovernorateCity(
id: json["id"],
cityName: json["city_name"],
governorateId: json["governorate_id"],
);
Map<String, dynamic> toJson() => {
"id": id,
"city_name": cityName,
"governorate_id": governorateId,
};
}
这就是我在列表视图中为名称显示示例 ui 的地方。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:json_parsing_example/models.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Users'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _isLoading = false;
List<Governorate> dataList = List();
Future<String> loadFromAssets() async {
return await rootBundle.loadString('json/parse.json');
}
@override
void initState() {
super.initState();
getData();
}
getData() async {
setState(() {
_isLoading = true;
});
String jsonString = await loadFromAssets();
final governorate = governorateFromJson(jsonString);
dataList = governorate;
setState(() {
_isLoading = false;
});
}
/*
// This will be in your case as per you code
Future<List<Governorate>> getGovernorates() async {
var governorates = List<Governorate>();
var governorate = await client.get('$endpoint/governorates');
String jsonString = governorate.body?.toString();
if(governorate.statusCode == 200){
return governorateFromJson(jsonString);
}
} */
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: _isLoading
? Center(
child: CircularProgressIndicator(),
)
: Container(
child: ListView.builder(
itemCount: dataList.length,
shrinkWrap: true,
itemBuilder: (context, i) {
return Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(dataList[i].governorateName),
));
}),
),
);
}
}
这可能是因为列表为空,只需检查以下代码并让我知道错误仍然发生
从模型类中更改以下工厂方法
factory NewMessagesModel.fromJson(Map<String, dynamic> json) => NewMessagesModel(
id: json["id"],
governorateName: json["governorate_name"],
governorateCities: json["governorate_cities"] ==null ?null:List<GovernorateCity>.from(json["governorate_cities"].map((x) => GovernorateCity.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"id": id,
"governorate_name": governorateName,
"governorate_cities":json["governorate_cities"] ==null?null : List<dynamic>.from(governorateCities.map((x) => x.toJson())),
};
}
只需检查注释代码,我已经带您获取 api 代码并进行了一些修改,以便它可以工作,并让我知道它是否工作。