String empName;
Future<List> getUserData() async{
final response = await http.post("http://172.16.161.34:8080/ebs/cfs/android_test_app/accessfile.php?q=getUserData",body:{
"emp_id": widget.empId,
});
var dataUser = jsonDecode(response.body);
empName = dataUser[0]['name'];
return null;
}
如何在第2行到第70行“ child:Text('')”中显示变量“ empName”
答案 0 :(得分:1)
尝试这种方法..将pojo类用作响应数据。.
class UserData {
final int albumId;
final int id;
final String title;
final String url;
final String thumbnailUrl;
UserData({this.albumId, this.id, this.title, this.url, this.thumbnailUrl});
factory UserData.fromJson(Map<String, dynamic> json) {
return new UserData(
albumId: json['albumId'],
id: json['id'],
title: json['title'],
url: json['url'],
thumbnailUrl: json['thumbnailUrl']);
}
}
api调用的make方法。
Future<UserData> fetchData() async {
var result = await get('https://jsonplaceholder.typicode.com/photos');
if (result.statusCode == 200) {
return UserData.fromJson(json.decode(result.body));
} else {
// If that response was not OK, throw an error.
throw Exception('Failed to load post');
}
}
之后,使全局对象获取数据。
Future<UserData> userDataList;
在按钮上单击..
userDataList = fetchData();
之后,您要打印数据。
userDataList.then((userData){
print(userData.title);
});
答案 1 :(得分:0)
首先,您的getUserData()
函数从不返回任何内容。似乎您只需要名称,因此此功能应如下所示:
Future<String> getUserData() async{
final response = await http.post("http://172.16.161.34:8080/ebs/cfs/android_test_app/accessfile.php?q=getUserData",body:{
"emp_id": widget.empId,
});
var dataUser = jsonDecode(response.body);
return dataUser[0]['name'];
}
然后要设置empName
变量,应使用setState()
。
因此,将您的afterFirstLayout()
方法更改为此:
@override
void afterFirstLayout(BuildContext context) async {
// Calling the same function "after layout" to resolve the issue.
getUserData().then( (userName) {
setState(() {
empName = userName;
});
});
}
您似乎还想在按IconButton
后重新加载名称。
因此,您可能要使用以下代码覆盖代码:
IconButton(icon: Icon(Icons.shopping_cart),
onPressed:() {
getUserData().then( (userName) {
setState(() {
empName = userName;
});
});
},
),