나같은 경우 네트워크에서 로드하는 이미지의 사이즈를 이미 알아내서 위젯을 그릴려고 completer를 사용했는데 가끔씩 이미지 로드에 실패하고 Bad state: Future already completed라는 에러가 뜨더라고;;;;
코드는 아래와 같은데 어떤 이유에서건 imageProfiver listener가 여러번 수행되서 그런 거 같아.
...
CachedNetworkImage(
imageUrl: imageUrl,
width: 50,
imageBuilder: (context, imageProvider) {
Completer<ui.Image> completer = Completer<ui.Image>();
imageProvider
.resolve(const ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
completer.complete(info.image);
}));
return FutureBuilder<ui.Image>(
future: completer.future,
builder: (context, snapshot) {
...
그걸 방지하려면 아래와 같이 completer가 complete 되지 않았을 때만 complete을 수행하도록 변경하면 에러가 말끔하게 사라짐!
CachedNetworkImage(
imageUrl: imageUrl,
width: 50,
imageBuilder: (context, imageProvider) {
Completer<ui.Image> completer = Completer<ui.Image>();
imageProvider
.resolve(const ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
//completer가 complete 되지 않았을 때만 complete!
if (completer.isCompleted == false) {
completer.complete(info.image);
}
}));
return FutureBuilder<ui.Image>(
future: completer.future,
builder: (context, snapshot) {
if (snapshot.hasData) {
수고!
반응형
'Flutter > Flutter Study' 카테고리의 다른 글
[Flutter] Getting visible items on scroll view (0) | 2022.12.12 |
---|---|
[Flutter] Firestore pagination(무한스크롤) (1) | 2022.11.13 |
[Flutter] getx page&controller 재사용 (0) | 2022.11.02 |
[소셜차트] 앱 제작기 #7. 네비게이션 시스템 뒤집어 엎기. (2) | 2022.11.02 |
[Flutter] loading 화면 (0) | 2022.10.25 |