#dart #flutter
#dart #флаттер
Вопрос:
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;
}
Как отобразить переменную «EmpName» в строке от 2 до строки 70 «дочерний элемент: текст («)»
Ответ №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..
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);
});
Ответ №2:
Прежде всего, ваша 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;
});
});
},
),
Комментарии:
1. setState(() { EmpName = getUserData(); }); является ошибкой
2. Я еще раз обновил свой ответ. Также изменен ваш код IconButton.