Я занимаюсь разработкой приложения в Angular Dart и пытаюсь анимировать индикатор выполнения, который показывает ход загрузки файла.Я просто анализирую JSON из файла и отправляю их в службу с методом _service.create(....)
.
Я поместил весь этот код в метод async
, который вызывается, когда мойНажата кнопка отправки:
void uploadFile() async {
submitButton.attributes.addAll({ 'disabled': '' });
progress.value = 0;
FileList files = input.files;
if (files.isEmpty) {
_handleError("No file selected");
//handle error, probably a banner
return;
}
File file = files.item(0);
FileReader reader = new FileReader();
//reader.result
reader.onLoadEnd.listen((e) async {
Map map = json.decode(reader.result);
var combinations = map['combinations'];
progress.max = combinations.length;
int loopCount = 0;
combinations.forEach((e) async {
await _service.create(VJCombination.fromJSON(e)).then((_) {
combinationCount++;
progress.value++;
loopCount++;
if (loopCount == combinations.length) {
submitButton.attributes.remove('disabled');
}
});
});
isLoadSuccessful = true;
});
reader.onError.listen((evt) => print(evt));
reader.readAsText(file);
progress.value = 10;
}
Я получаю элементы progress
и submitButton
с аннотациями @ViewChild
:
@ViewChild('progress')
ProgressElement progress;
@ViewChild('submit')
ButtonElement submitButton;
Код работает.Индикатор выполнения начинается пустым, и после того, как файл прочитан и служба получает данные, индикатор выполнения заполняется.
Моя проблема в том, что пользовательский интерфейс обновляется только после того, как все комбинации были отправлены на _service
.Так что, казалось бы, идет от пустого до полного в одном кадре.