У меня проблема с использованием шаблона Blo C в сочетании с отображением процесса загрузки с использованием Dio.
Может кто-нибудь сказать мне, как перевести onUploadProgress из dio в состояние blo c и отображать его, когда прогресс в состоянии обновляется?
На данный момент у меня есть пользовательский интерфейс, Blo C и класс API. Мне нужно передать свой blo c в вызов API, чтобы загрузить файл, а затем добавить дополнительное событие, например:
onReceiveProgress: (int received, int total) => {
bloc.add(DownloadingImages((received / total) * 100))
});
Также есть большая проблема, которую я нашел, и я не знаю, как решить в чистом виде. Если я добавлю состояние DownloadingImage и передам процесс, он не обновит интерфейс. Это происходит потому, что состояние не изменяется, а только значение внутри него. BlocBuilder не распознает изменение значения внутри состояния и не будет повторно отображать пользовательский интерфейс ...
Так что у меня есть другой обходной путь (Blo C):
if (state is ImagesDownloading) {
imageBloc.add(DownloadingImages2(state.progress));
if (state.progress < 100) {
return DownloadAndProgressWidget(
done: false, progress: state.progress);
} else {
return DownloadAndProgressWidget(done: true, progress: 100);
}
} else if (state is ImagesDownloading) {
imageBloc.add(DownloadingImages2(state.progress));
if (state.progress < 100) {
return DownloadAndProgressWidget(
done: false, progress: state.progress);
} else {
return DownloadAndProgressWidget(done: true, progress: 100);
}
ImageState _downloadImages(String localPath) {
try {
api.fetchLibraryImagesFromBackend(localPath, this);
return ImagesDownloading(0);
// Update the ui later from here to show progress.
// Get the progress and pass it to downloading when 100% is reached return ImagesDownloaded state
} on ImagesError {
return ImagesError("Couldn't download images.");
}
В пользовательском интерфейсе:
} else if (state is ImagesDownloading) {
imageBloc.add(DownloadingImages2(state.progress));
if (state.progress < 100) {
return DownloadAndProgressWidget(
done: false, progress: state.progress);
} else {
return DownloadAndProgressWidget(done: true, progress: 100);
}
} else if (state is ImagesDownloading) {
imageBloc.add(DownloadingImages2(state.progress));
if (state.progress < 100) {
return DownloadAndProgressWidget(
done: false, progress: state.progress);
} else {
return DownloadAndProgressWidget(done: true, progress: 100);
}
Я бы хотел увидеть чистое решение этой проблемы.