• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

AirResult _result 초기화 에러

21.07.07 11:51 작성 조회수 481

0

1. main.dart 에서 AirResult 를 선언하면 초기화 하라는 에러가 발생합니다.
    AirResult _result
=======================================================
    Non-nullable instance field '_result' must be initialized.
    Try adding an initializer expression, or a generative constructor that initializes it, or mark it 'late'.
    초기화 방법에 대한 가이드 부탁드립니다.  
    (late 를 추가해도 미세먼지를 표시하는 부분에서 아래와 같이 에러가 발생합니다.)

2. late 로 바꾸던 바꾸지 않던 아래 볼드 처리된 코드에서도 에러가 발생합니다.
    해결방법에 대한 가이드 부탁드립니다.
  children: <Widget>[
    const Text('얼굴사진'),
    const Text(
        '${_result.data.current.pollution.aqius}',
           style: TextStyle(fontSize: 40)),
    const Text('보통', style: TextStyle(fontSize: 20)),    ],  ),
==============================================================
  Evaluation of this constant expression throws an exception.
  Invalid constant value.

3. 변수 선언을 아래와 같이 시도했지만 해결되지 않습니다. 참고해주세요.
   1) late AirResult _result;
   2) AirResult? _result;

답변 1

답변을 작성해보세요.

0

Null Safety에 대한 이해가 부족할 경우에는 Null Safety 적용하지 않고 강의대로 따라 하신 후에 완성본에 Null Safety 적용해 보시는 것을 추천드립니다. 강의 초반에 이에 대한 설명이 있습니다.

만약 이대로 진행중이시라면 Null Safety에 대한 가이드를 제시해 드릴테니 해 보시고요.
StreamBuilder 까지 적용된 버전의 Null Safety 적용 버전을 github에 올려 두겠으니 참고해 주세요.
https://github.com/junsuk5/flutter_airvisual_exam/tree/null-safety

선언부에 late 를 붙였을 경우의 에러 처리 :

에러 메시지를 봐야 알겠지만, UI를 완성하는 부분에서 _result 가 여전히 null 이기 때문에 그럴 수 있습니다.
화면을 그리는 부분에서 이에 대한 처리를 해 줘야 합니다. _result 가 null 일 때 로딩화면을 표시하는 등의 널 처리를 확인합니다.

AirResult? 로 선언한 경우 : 

UI 작성부분에서도 이에 대해 처리를 해 줘야 하며  '${_result.data.current.pollution.aqius}' 의 경우 내부 객체들도 전부 널이 가능한 타입이라고 가정했을 때  '${_result?.data?.current?.pollution?.aqius?}' 와 같은 형태로 수정해야 할 수 있습니다. 중간에 하나라도 null 이면 'null' 글자가 표시될 거고요. 이렇게 되지 않도록 마찬가지로 null 처리가 선행되어야 하겠지요.