У меня есть потоковый конструктор для загрузки списка видео постов. Всякий раз, когда возникает ошибка, я добавляю ошибку в приемник, и StreamBuilder отображает сообщение об ошибке с кнопкой «Повторить попытку». Моя проблема в том, что когда я нажимаю кнопку, ничего (визуально) не происходит, но я хочу заменить сообщение об ошибке на spinningLoader во время повторной попытки.
Как бы мне этого добиться?
Я думал добавить логическое значение в приемник и проверить, является ли snapshot.data значением bool, и вернуть spinningLoader, если это так, но это кажется нелогичным.
@override
Widget build(BuildContext context) {
return SafeArea(
child: Container(
color: backgroundColor,
child: StreamBuilder(
stream: _streamController.stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return buildRelatedList(snapshot.data);
} else if (snapshot.hasError) {
return retryButton();
} else {
return _spinningLoader;
}
},
),
),
);
}
_fetchVideos() async {
List videos = await RelatedVideos.fetchVideos(
id: widget.id);
if (videos.isEmpty) {
_streamController.sink.addError('error loading');
} else {
_streamController.sink.add(videos);
}
}