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

codefomatter님의 프로필 이미지

작성한 질문수

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

"calendar_scheduler 프로젝트"의 "일정 불러오기" 2:50에서 snapshot.hasData가 false에 관한 질문입니다.

24.07.24 20:42 작성

·

70

0

안녕하세요.

먼저 정말 좋은 강의를 만들어 주셔서 감사합니다.

초보자로써 많은 도움을 받고 있습니다.

 

  1. schedule_bottom_sheet.dart의 onSavePressed() 함수를 통하여 값은 입력이 되었습니다.

1.pngI/flutter ( 6559): [ScheduleTableData(id: 1, startTime: 12, endTime: 14, content: Test Flutter !!!, date: 2024-07-24 00:00:00.000, color: 2196F3, createdAt: 2024-07-24 07:55:37.000), ScheduleTableData(id: 2, startTime: 15, endTime: 17, content: AAAAAAAA !!, date: 2024-07-25 00:00:00.000, color: F44336, createdAt: 2024-07-24 07:56:16.000), ScheduleTableData(id: 3, startTime: 9, endTime: 11, content: Flutter 프로그래밍, date: 2024-07-24 00:00:00.000, color: F44336, createdAt: 2024-07-24 10:34:38.000), ScheduleTableData(id: 4, startTime: 9, endTime: 11, content: Flutter 프로그래밍, date: 2024-07-24 00:00:00.000, color: F44336, createdAt: 2024-07-24 10:35:41.000), ScheduleTableData(id: 5, startTime: 12, endTime: 14, content: I want to trip in Japan !!!, date: 2024-07-23 00:00:00.000, color: F44336, createdAt: 2024-07-24 10:43:57.000)]

I/flutter ( 6559): snapshot.hasData: false

 

  1. home_screen.dart의 FutureBuilder에서 builder의 snapshot에서 DB에 등록된 값을 가져오지 못하고 있습니다. snapshot.hasData -> false 이고 snapshot.connectionState은 waiting 상태입니다.

if (!snapshot.hasData && 
    snapshot.connectionState == ConnectionState.waiting) {
    return Center(
      child: CircularProgressIndicator(),
    );
}
  1. 위 코드에서 조건에 만족하기 때문에 if문에서 CircularProgressIndicator()가 실행 되어야 하는데, CircularProgressIndicator()가 표지되지 않습니다.

     

다음과 같이 수정하여 확인한 결과, 글자가 짧은 순간 표시되었다가 사라졌습니다.

child: Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: <Widget>[
    CircularProgressIndicator(),
    SizedBox(height: 32.0),
    Text(
      'Loading, Please wait.....',
      style: TextStyle(
        fontSize: 18,
        color: Colors.red,
        fontWeight: FontWeight.w700,
      ),
    ),
  ],
),

감사합니다.

 

 

 

 

답변 2

0

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

2024. 07. 25. 08:22

안녕하세요!

공유 감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 24. 20:47

안녕하세요, 인프런 AI 인턴입니다.

codefomatter님의 질문은 Flutter 개발 과정에서 흔히 겪을 수 있는 문제와 관련이 있습니다. 여기서 주요한 포인트는 FutureBuilder의 사용과 그 안에서의 snapshot.hasData의 값이 false가 반환되는 경우, 즉 데이터를 불러올 때 까지 기다리는 동안의 UI 처리에 관한 것입니다.

문제를 해결하기 위하여 검토해보았지만, codefomatter님의 특정 상황에 정확히 일치하는 기존 답변을 찾는 것은 어려웠습니다. 하지만, 비슷한 문맥에서 발생할 수 있는 문제와 해결책을 제시하는 몇 가지 자료들을 참조하면 도움이 될 것 같습니다.

비록 정확히 일치하는 경우는 아니지만, “섹션 21. 캘린더 스케쥴러 오류 문의드립니다.“와 관련된 섹션 21. 캘린더 스케쥴러 오류 문의드립니다.에서 비슷한 문맥의 문제가 논의됩니다. 여기서는 FutureBuilder를 사용할 때 null 반환 문제와 데이터 로딩 관련 조언이 이루어집니다.

또한, “모달창이 안뜹니다.“라는 질문에서 모달창이 안뜹니다. 파트에서 snapshot.hasData의 처리에 대한 간접적인 이야기가 나옵니다. 여기서는 데이터 로딩 시점과 UI 표시 방법에 대한 토론이 있었습니다.

스케쥴러 프로젝트를 수행하시면서 snapshot.hasData가 false 반환 문제는 데이터가 비동기적으로 로드되는 과정에서 발생할 수 있습니다. 이는 데이터가 아직 불러와지지 않았거나, 데이터 불러오는 과정에 문제가 있을 때 발생할 수 있습니다. FutureBuilder 내부에서 snapshot.hasData 값이 false를 반환하는 경우, UI에서 로딩 표시기(CircularProgressIndicator)가 사라지지 않는 것과 관련하여, 로딩 상태를 나타내는 로직이 정확히 수행되는지, 그리고 데이터 로딩 상태(ConnectionState.waiting) 관리가 올바르게 이루어지고 있는지 확인하는 것이 좋습니다.

정확한 해결을 위해서는 더 많은 코드와 해당 프로젝트의 구조를 이해할 필요가 있을 수 있습니다. 이처럼, 문제의 정확한 원인을 파악하고자 할 때는 간단한 코드 변경, 상태 관리 로직 확인, 그리고 필요한 경우 StreamBuilderFutureBuilder의 사용 방법을 다시 한번 확인하는 것이 유익할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.