fetchData 함수에서 Hive 적용 후 에러
강의 보면서 fetchData 함수에서 Hive로 변환 후 재시작했을 때
재시작 후 FutureBuilder 부분에서 snapshot.hasError에 걸려서 error를 화면에 출력해보니
The box "pm10" is already open and of type Box<Dynamic> 이라는 오류가 뜹니다.
그래서 강의처럼 정상적으로 앱이 작동되지 않고 에러가 있다는 화면이 나오는데 어떤 부분이 잘못되었는지 잘 모르겠습니다.
-----
Future<Map<ItemCode, List<StatModel>>> fetchData() async {
List<Future> futures = [];
for (ItemCode itemCode in ItemCode.values) {
futures.add(
StatRepository.fetchData(
itemCode: itemCode,
),
);
}
final results = await Future.wait(futures);
for (int i = 0; i < results.length; i++) {
// ItemCode
final key = ItemCode.values[i];
// List<StatModel>
final value = results[i];
final box = Hive.box<StatModel>(key.name);
for (StatModel stat in value) {
box.put(stat.dataTime.toString(), stat);
}
}
return ItemCode.values.fold<Map<ItemCode, List<StatModel>>>(
{},
(previousValue, itemCode) {
final box = Hive.box<StatModel>(itemCode.name);
previousValue.addAll({
itemCode: box.values.toList(),
});
return previousValue;
},
);
}
답변 2
1
안녕하세요 main.dart에서 Hive.openBox를 실행한 부분에 Hive.openBox<StatModel>로 타입 지정을 해주셨을까요?
현재 Hive.box에서는 박스를 사용할때 StatModel로 지정해서 Hive.box<StatModel>로 사용하는 중인데 열때는 Hive.openBox로 타입을 따로 지정하지 않으셔서 dynamic 타입으로 자동 매핑이돼서 생기는 에러로 보입니다!
0
예, 다음 강의까지 진행해서 확인해봤습니다만
이번에는 No element 라는 오류가 나타나네요...
Bad state: No element
The relevant error-causing widget was:
ValueListenableBuilder<Box<dynamic>> ValueListenableBuilder:file:///C:/Users/Unyeong/StudioProjects/flutter_install_test/lib/screen/home_screen.dart:78:12
When the exception was thrown, this was the stack:
#0 List.last (dart:core-patch/growable_array.dart:365:5)
#1 _HomeScreenState.build.<anonymous closure> (package:flutter_install_test/screen/home_screen.dart:81:49)
#2 _ValueListenableBuilderState.build (package:flutter/src/widgets/value_listenable_builder.dart:187:26)
#3 StatefulElement.build (package:flutter/src/widgets/framework.dart:4870:27)
#4 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
#5 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#6 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#7 StatefulElement.update (package:flutter/src/widgets/framework.dart:4960:5)
#8 Element.updateChild (package:flutter/src/widgets/framework.dart:3501:15)
#9 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#10 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#11 Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#12 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#13 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#14 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#15 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#16 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#17 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:862:7)
(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)
문제가 되는 부분이 home_screen.dart의
final recentStat = (box.values.toList().last as StatModel);
이 부분인데... home screen이랑 category_card, hourly_card에도 StatModel generic 지정해주니 이젠 no element라고만 뜨니까
전혀 감을 못잡겠네요. ㅠ 죄송합니다.
https://github.com/BAEK-UNYEONG/dusty_dust
0
안녕하세요. 이건 제 잘못인것 같습니다. 버그 수정 영상을 만들었었는데 깜빡하고 업로드를 안했네요. 깃헙 링크 주신게 최신 버전이 아니신것같은데 최신 버전 푸쉬한 후 말씀주시면 제가 수정사항 알려드릴게요.
버그 수정 영상은 조만간 업로드하고 다시한번 알려드리도록 하겠습니다! 불편을드려 죄송합니다.
0
https://www.inflearn.com/course/%ED%94%8C%EB%9F%AC%ED%84%B0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/lecture/111854?tab=curriculum&volume=1.00
안녕하세요! 버그수정강의 마지막 강의에 추가했습니다! 확인해주시면 감사하겠습니다.
글로 추가 설명을 드리면
box.values.last를 실행하는 과정에서 만약에 데이터가 하나도 없는 상태라면 .last를 실행해서 마지막 값을 가져올 수 없기때문에 나는 에러입니다.
이 에러가 나는구간은 두곳으로 fetchData함수와 build 함수입니다. 이부분에 box.values.isEmpty 또는 box.values.isNotEmpty를 사용해서 값이 비어있을때 적절한 조건문을 작성해주면 해결할 수 있습니다.
조금만 더 오시면 이제 끝이시네요! 화이팅입니다!
0
빠른 피드백 반영에 놀랐습니다. 좋은 품질의 명강의를 올려주셔서 덕분에 Flutter 개발에 재미를 느끼고 있습니다. 앞으로도 좋은 강의 많이 올려주십시요. 감사합니다.
LocationPermission.denied관련 질문입니다
0
598
1
videocontrollor dispose
0
443
1
onlogotap함수의 video nullable관련질문
0
398
1
setState 사용 차이
1
466
1
블로그 웹앱 배포 방법
0
524
1
sizedbox 위젯에 primary = RED_COLOR
1
437
1
개념 강의 순서 질문
0
414
1
materialstateProperty 다른 메소드관련질문
0
420
1
내 노트 모아보기
0
507
1
SafeArea (iPhone, Android)
0
411
1
web view 실행 안됩니다.
0
413
1
랜덤 숫자 생성기 프로젝트 관련
0
550
2
안도르이드 애뮬레이터 질문
0
390
1
super를 사용하는 건, 부모와 자식 클래스의 파라미터 이름이 꼭 같아야하나요?
0
480
1
선생님 flutter device를 크롬으로 했을때 http 통신이 안됩니다..
0
792
1
no element
0
447
1
암호화
0
242
1
책과 강의
0
395
1
voidcallback함수와 클래스내에 변수선언에 관한질문
0
483
1
android studio 세팅
0
492
1
오늘도 출근 세팅하기
2
567
1
재사용 클래스 임폴트 방법
0
492
1
가상화를 못하는 CPU인건가요? 확인 부탁드립니다.
0
406
1
flutter dispose 관련
0
1402
2





