在请求GET时,如何更新(而不是添加)容器中的数据?扑腾



我有一个函数。我在其中向Get提出请求。然后我解析这个查询的答案(json),这些数据显示在我的小部件中。一切都有效。但如果我再按一下按钮。数据将不会更新。我将收到的更新数据将添加到小部件列表中的那些数据中。我希望在按钮上更新数据(也就是说,数据只写下了我上次请求GET时拿走的数据,旧数据被删除)。我的请求:

List<eventHistory> _userDetails = [];

Future<Null> getEventsTTNDetails(int? ttn) async {
HttpClient client = new HttpClient();
client.badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
final String urlEvents = global.urlVar + "/ttn_events";
final request = await client
.getUrl(Uri.parse(urlEvents))
.timeout(Duration(seconds: 5));
HttpClientResponse response = await request.close();

var responseBody = await response.transform(utf8.decoder).join();

final responseJson = json.decode(responseBody);
setState(() {
for (Map<String, dynamic> user in responseJson) {
_userDetails.add(eventHistory.fromJson(user));
}
});
}

我在课堂上解析答案:

class eventHistory {
final String date, event,device;

eventHistory({required this.date, required this.event, required this.device});
factory eventHistory.fromJson(Map<String, dynamic> json) {
return new eventHistory(
date: json['date'],
event: json['event'],
device: json['device'],
);
}
}

我在其中显示此数据的小部件:

child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
height: 45,
child: Text("history", style: TextStyle(
fontSize: 25.0, color: Colors.blueGrey)),
padding: EdgeInsets.all(2.0)),
Expanded(
child: Scrollbar(
child: new ListView(
shrinkWrap: true,
children: [
new Container(
alignment: Alignment.bottomLeft,
child: FixedTimeline.tileBuilder(
theme: TimelineThemeData(
nodePosition: 0.23,
color: Colors.blueGrey,
indicatorTheme: IndicatorThemeData(
position: 2,
size: 20.0,
),
connectorTheme: ConnectorThemeData(
thickness: 2.5,
),
),
builder: TimelineTileBuilder
.connectedFromStyle(
contentsAlign: ContentsAlign
.basic,
oppositeContentsBuilder: (
context, index) =>
Padding(
padding: const EdgeInsets
.all(8.0),
child: Text(
_userDetails[index]
.date),
),
contentsBuilder: (context,
index) =>
Card(
child: Padding(
padding: const EdgeInsets
.all(8.0),
child: Text(
_userDetails[index]
.event),
),
),
connectorStyleBuilder: (context,
index) =>
ConnectorStyle.solidLine,
indicatorStyleBuilder: (context,
index) =>
IndicatorStyle.dot,
itemCount: _userDetails.length,
),
)
),
],
))),
],
)

您直接将新数据添加到_userDetails您可以使用另一个列表将JSON更改为eventHistory,然后将列表设置为_userDetails

List<eventHistory> _userDetails = [];

Future<Null> getEventsTTNDetails(int? ttn) async {
HttpClient client = new HttpClient();
client.badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
final String urlEvents = global.urlVar + "/ttn_events";
final request = await client
.getUrl(Uri.parse(urlEvents))
.timeout(Duration(seconds: 5));
HttpClientResponse response = await request.close();

var responseBody = await response.transform(utf8.decoder).join();

final responseJson = json.decode(responseBody);
List<eventHistory> _temp=[];
for (Map<String, dynamic> user in responseJson) {
_temp.add(eventHistory.fromJson(user));
}
setState(() {
_userDetails=_temp;
});
}

最新更新