Почему даже после ввода ключевого слова await мое приложение будет показывать 0? - PullRequest
0 голосов
/ 03 апреля 2020

Я вызвал функцию триггера внутри функции initState. В функции триггера я получу данные из API и проанализировал данные с помощью функции storedata.from json. Затем я буду хранить эти значения в переменных. Насколько я знаю, функция initState будет вызываться, как только будет создан объект этого виджета statefull. Но все еще в приложении, он будет показывать exchangeval_ bitcoin как 0 в течение нескольких секунд, а затем будет обновляться (я инициализировал exchangeval_ bitcoin как 0). Означает ли это, что функция сборки будет вызываться даже до завершения функции initState, даже после ввода ключевого слова await? И как я могу реализовать экран загрузки, пока это значение не будет обновлено?

void triggerfun() async {
var decodedmap;
Jsonparse p = Jsonparse(url: uri);
decodedmap = await p.cryptocovert();
Storeddata s = Storeddata.fromjson(decodedmap);
setState(() {
  exchangeval_bitcoin = s.getdataforbitcoin();
  exchangeval_etherium = s.getdataforetherium();
  exchangeval_litecoin = s.getdataforlitecoin();
});
permanent = s;
}

//calling initstate
@override
void initState() {
super.initState();
triggerfun();
}

Заранее спасибо.

1 Ответ

1 голос
/ 03 апреля 2020

triggerfun () является асинхронной функцией. Итак, в вашем initState () он будет вызывать triggerfun (), но продолжит работу с остальной частью вашей программы. Когда триггерная функция завершена, она установит состояние и перестроит виджет.

Ключевое слово await остановит программу до тех пор, пока эта строка не будет завершена, но triggerfun () в целом все еще остается асинхронным.

...