【发布时间】:2019-10-06 02:08:57
【问题描述】:
我想用 Flutter http 解析嵌套的 json。 我编写了我的代码,但在我的 ListView.builder 中没有显示数据。
我尝试使用嵌套 json 格式,但与 POST http 无关,因为我的 API 必须发送 API Key 才能获取响应值。
这个 Json 嵌套结果。
{
"status": 1,
"status_message": "Success!",
"result": [
{
"id": "1",
"ticket": "377292",
"departmentid": "1",
"clientid": "1",
"userid": "0",
"adminid": "1",
"assetid": "1",
"projectid": "1",
"email": "email@email.com",
"subject": "Test",
"status": "Answered",
"priority": "Normal",
"timestamp": "2019-04-02 16:06:32",
"notes": "",
"ccs": false,
"timespent": "0"
},
{
"id": "2",
"ticket": "424327",
"departmentid": "1",
"clientid": "1",
"userid": "1",
"adminid": "1",
"assetid": "1",
"projectid": "0",
"email": "email@email.com",
"subject": "test Tiket",
"status": "Open",
"priority": "Normal",
"timestamp": "2019-05-19 05:48:37",
"notes": "",
"ccs": false,
"timespent": "0"
}
]
}
这是我的 Flutter 代码,请您对我的问题提出建议。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:ticket_new/modal/ticketModel.dart';
import 'package:http/http.dart' as http;
class Report extends StatefulWidget {
@override
_ReportState createState() => _ReportState();
}
class _ReportState extends State<Report> {
List<TicketModel> _list = [];
var loading = false;
Future<Null> _fetchData() async{
setState(() {
loading = true;
});
final response = await http.post("http://192.168.43.253/edc/api/index.php", body: {
'key' : '5fpqRt23yU2kgJcl7fDo6ARIzsU5zIGAOIYtNPDBNokQcRViNfKnbaSiNow61lXG',
'method' : 'get',
'resource' : 'tickets',
});
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
setState(() {
for (Map i in data) {
_list.add(TicketModel.fromJson(i));
}
loading = false;
});
} else {
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
_fetchData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: loading
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: _list.length,
itemBuilder: (context, i){
final x = _list[i];
return Container(
padding: EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(x.result.email),
Text(x.result.subject),
],
),
);
},
),
),
);
}
}
这是我在颤振代码中的模型构造函数。
class TicketModel{
final int status;
final String status_message;
final ResultTicket result;
TicketModel({this.status, this.status_message, this.result});
factory TicketModel.fromJson(Map<String, dynamic> json) {
return new TicketModel(
status: json['status'],
status_message: json['status_message'],
result: ResultTicket.fromJson(json['result'],
));
}
}
class ResultTicket{
final int id;
final int ticket;
final int departmentid;
final int clientid;
final int userid;
final int adminid;
final int assetid;
final int projectid;
final String email;
final String subject;
final String status;
final String priority;
final String timestamp;
final String notes;
final String ccs;
final int timespent;
ResultTicket({this.id, this.ticket, this.departmentid, this.clientid, this.userid, this.adminid, this.assetid, this.projectid, this.email, this.subject, this.status, this.priority, this.timestamp, this.notes, this.ccs, this.timespent});
factory ResultTicket.fromJson(Map<String, dynamic> json) {
return new ResultTicket(
id: json['id'],
ticket: json['ticket'],
departmentid: json['depatmentid'],
clientid: json['clientid'],
userid: json['userid'],
adminid: json['adminid'],
assetid: json['assetid'],
projectid: json['projectid'],
email: json['email'],
subject: json['subject'],
status: json['status'],
priority: json['priority'],
timestamp: json['timestamp'],
notes: json['notes'],
ccs: json['ccs'],
timespent: json['timespent'],
);
}
}
【问题讨论】:
-
希望http key不是真的
-
是的不是真实的,这个 API 在我的笔记本电脑上的本地主机中。