inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

fetchData 함수에서 Hive 적용 후 에러

해결된 질문

758

Rei

작성한 질문수 2

1

강의 보면서 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;
},
);
}

 

Flutter 클론코딩

답변 2

1

코드팩토리

안녕하세요! 제가 잠시 외부라 들어가면 확인 후 답변 드리도록 하겠습니다. 불편을 드려 죄송합니다!

1

코드팩토리

안녕하세요 main.dart에서 Hive.openBox를 실행한 부분에 Hive.openBox<StatModel>로 타입 지정을 해주셨을까요?

현재 Hive.box에서는 박스를 사용할때 StatModel로 지정해서 Hive.box<StatModel>로 사용하는 중인데 열때는 Hive.openBox로 타입을 따로 지정하지 않으셔서 dynamic 타입으로 자동 매핑이돼서 생기는 에러로 보입니다!

0

Rei

예, 다음 강의까지 진행해서 확인해봤습니다만

이번에는 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

Rei

감사합니다. "update dusty_dust 0.4" 커밋 내역 확인해주시면 고맙겠습니다.

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

Rei

빠른 피드백 반영에 놀랐습니다. 좋은 품질의 명강의를 올려주셔서 덕분에 Flutter 개발에 재미를 느끼고 있습니다. 앞으로도 좋은 강의 많이 올려주십시요. 감사합니다.

0

코드팩토리

감사합니다!

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