为什么将数据发送到功能后列表中不包含数据?

  • 本文关键字:数据 列表 包含 功能 flutter
  • 更新时间 :
  • 英文 :


我正在学习扑动和练习http请求。我的应用程序向本地服务器发送请求,并将数据包含到列表中。

List data = [];
displayMenu(List data) async {
var response = await http.get(Uri.http("10.0.2.2:3000", "api/menu"));
if (response.statusCode == 200) {
data = jsonDecode(response.body);
print(data);
return data;
}
}
displayMenu(data);
当我运行代码时,数据成功地包含到列表
/flutter ( 5148): [{menu_id: 101, category_id: 1, menu: Plain, price: 350}, {menu_id:
102, category_id: 1, menu: Bulgogi, price: 380}, {menu_id: 103, category_id: 1, menu:
Spicy, price: 390}, {menu_id: 104, category_id: 1, menu: 100g Chicken fillet, price: 
400}, {menu_id: 201, category_id: 2, menu: Beef bulgogi, price: 499}, {menu_id: 202, 
category_id: 2, menu: Jeyuk bokkuem, price: 450}, {menu_id: 203, category_id: 2, menu: 
Kamja tang, price: 599}, {menu_id: 204, category_id: 2, menu: Pork kalbi jjim, price: 
499}, {menu_id: 301, category_id: 3, menu: Spicy chicken wings, price: 185}, {menu_id: 
302, category_id: 3, menu: Fried chicken neck, price: 95}, {menu_id: 303, category_id: 3,
menu: Fried chicken bucket, price: 340}, {menu_id: 304, category_id: 3, menu: Spicy 
fried chicken bucket, price: 380}, {menu_id: 305, category_id: 3, menu: Fried chicken 
skin, price: 11}, {menu_id: 401, category_id: 4, menu: Gizzard fried, price: 95}, 
{menu_id: 402, category_id: 4, menu: Gizzard spicy, price: 120}, {menu_id: 403, 
category_id: 4, m...

但是如果我改变了函数的print(data),

List data = [];
displayMenu(List data) async {
var response = await http.get(Uri.http("10.0.2.2:3000", "api/menu"));
if (response.statusCode == 200) {
data = jsonDecode(response.body);
//print(data);
return data;
}
}
displayMenu(data);
print(data);

列表中没有包含数据,并且在控制台日志中显示为空

I/flutter ( 5148): []
Reloaded 1 of 643 libraries in 729ms.

如何在函数结束后将数据保存在列表中?

这是因为displayMenu(data)之后的print执行列表的初始值。如果你想在列表中保存数据,试着输入

displayMenu(List data) async {
var response = await http.get(Uri.http("10.0.2.2:3000", "api/menu"));
if (response.statusCode == 200) {
data = jsonDecode(response.body);
//print(data);
data.addAll(response.body) or data.add(response.body)
return data;
}
}
Future  displayMenu() async {

List _data =[];

var response = await http.get(Uri.http("10.0.2.2:3000", "api/menu"));
if (response.statusCode == 200) {
data = jsonDecode(response.body);
//print(data);

}

print(_data);
return _data;

}

然后调用函数

displayMenu(["A","B","C"]);
Future<List<dynamic>>displayMenu() async {
var response = await http.get(Uri.http("10.0.2.2:3000", "api/menu"));
if (response.statusCode == 200) {
return List<dynamic>.from(jsonDecode(response.body));
}
}
List<dynamic> data = await displayMenu(data);
print(data);

可以用String, int等代替dynamic。如果要映射对象,可以考虑使用map函数。

最新更新