如何显示文本中的json返回变量

时间:2019-04-11 05:41:37

标签: dart flutter

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”

Full code on Pastebin

2 个答案:

答案 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;
      });
    });
  },
),