강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

code11님의 프로필 이미지
code11

작성한 질문수

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

GetIt 으로 로컬데이터를 가져오고 출력하기

해결된 질문

작성

·

652

0

안녕하세요

현재 스케쥴캘린더  스트림 빌터와 리스트세퍼레이트를 통해

데이터를 화면에 출력하는 부분까지 수강했습니다.

이 부분까지 수강하고 게시판을 만들어 봤는데요

데이터 테이블은 제목과 내용,ID로 구성 되어있고

 

----contents_screen.dart----

글 목록에 있는 제목을 누르면 해당 id값을 where로 조회해서 글 내용을 보여주는 부분을 만들엇는데

 

 

----content_view_screen.dart----

 

 

StreamBuilder<List<Content>>(

 

    stream: GetIt.I<LocalDatabase>().watchContents(),

 

    builder: (context, snapshot) {

 

      List contents = [];

 

 

      if (snapshot.hasData) {

 

        contents = snapshot.data!

            .where((element) => element.id == pushId)

            .toList();

      }

      final String title = contents[0].title;

      final String innercontent = contents[0].innercontent;

스트림 빌더를 사용하여 출력이 되긴 합니다만 오류가 나옵니다.

The following RangeError was thrown building StreamBuilder<List<Content>>(dirty, state: _StreamBuilderBaseState<List<Content>, AsyncSnapshot<List<Content>>>#e5310):

RangeError (index): Invalid value: Valid value range is empty: 0 

이것을 없애려면 어떤 방법을 써야하나요.

비동기 처리가 필요한듯 한데 맞나요?

 

 

답변 1

1

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

에러 내용은 리스트의 0번 데이터가 존재하지 않는다는 뜻입니다.

로직이 잘못된듯 보입니다.

데이터가 없는데 데이터가 있는것처럼 코드를 작성한 부분을 찾아보세요!

code11님의 프로필 이미지
code11
질문자

아직 내공이 부족해서 전부 수강하고 다시 만들어봐야겠어요. 아마 화면이 바뀌면서 map을 다시 읽기 전에 출력하라고해서 오류가 난것 같습니다. 원인은 알겠는데 고치진 못하겟네요 ㅋㅋ

code11님의 프로필 이미지
code11
질문자

해결했습니다.

 

변수 선언하는 위치를 변경하고 FutureBuilder로 변경후 하나만 조회하는 싱글쿼리를 추가했습니다.

code11님의 프로필 이미지
code11

작성한 질문수

질문하기