Вам нужно будущее, чтобы сразу вернуться к вам в Интернете, потому что это однопоточная платформа.Если асинхронное действие не вернулось до тех пор, пока оно не было завершено, вы повесили бы браузер, и это не было бы для пользователя большим опытом.
Вместо этого у вас есть несколько вариантов:
У Dart есть возможность сделать так, чтобы будущее выглядело синхронно с ключевым словом await.Таким образом, вы можете сделать что-то вроде:
void performAction() async {
showProgress = true;
await expensiveRpc();
showProgress = false;
}
Это потребует, чтобы прогресс был промежуточным, так как вы фактически не обновляете индикатор выполнения по мере его продвижения.Тем не менее, если вы на самом деле не получаете события прогресса от вашего RPC, возможно, это лучшее решение.
Теперь, если ваш RPC или действие дает вам какую-то обратную связь, вы можете сделать что-то более приятное споток.
void performAction() {
showProgress = true;
expensiveRpc().listen((progress) {
if (progress.done) {
showProgress = false;
} else {
percentComplete = progress.value;
});
}
На самом деле, это зависит больше от RPC или службы, с которой вы взаимодействуете, от того, как вы можете значительно улучшить прогресс, чем сам прогресс.