Код
Future<Model> ViewWelcomeScreen() async {
String url = '$baseurl/post/20';
ApiService().getToken().then((value){
token = value;
});
final response = await http.get(url, headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
});
print(token);
if (response.statusCode == 200) {
var test = json.decode(response.body);
var jsonResponse = test['data'];
return Model.fromJson(jsonResponse);
} else {
throw Exception('Failed to load data');
}
}
в каком-то смысле неправильный, думаю, у вас есть asyn c, а затем оба в одной функции, почему?
ApiService().getToken().then((value){
token = value;
});
здесь вы говорите, что я хочу токен, а я не не нужно ждать, тогда вы go и попытаетесь использовать эту переменную
final response = await http.get(url, headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
});
см. в flutter каждый asyn c - ожидание работает как событие l oop в javascript
- Я пишу asyn c
- нормальный код
- используя then в 1. функция
- зависимый код в 1. as asyn c -wait
что будет на выходе? событие l oop сначала будет иметь 1,2,3,4 как функции asyn c, оно будет запускаться 1, и как только оно получит нормальный код, оно будет работать нормально, но если оно получит, то поймет, что этот результат не важно, поэтому позвольте мне сделать остальную работу и вернусь к выполнению третьей, а затем функции, чтобы она запустила 4, а затем третью функцию
, но вы хотите токен, поэтому
ApiService().getToken().then((value){
token = value;
});
замените это на
token = await ApiService().getToken();
вашей службе может потребоваться токен, и поэтому это не код состояния 200.