IT 프로그래밍-Flutter

[Flutter] Dialog 생성 오류 해결기

godsangin 2023. 5. 23. 23:17
반응형

최근 Flutter를 통한 앱개발을 수행하면서 만난 정말 당황스러운 오류를 해결한 과정을 공유합니다.

A build function returned null.
The offending widget is:
  Builder
Build functions must never return null.
To return an empty space that causes the building widget to fill available room, return
"Container()". To return an empty space that takes as little room as possible, return
"Container(width: 0.0, height: 0.0)".

에러로그는 다음과 같이 출력이 되었는데요. 이번 에러는 다이얼로그를 출력하는 과정에서 발생하였습니다.

저의 애플리케이션은 main 위젯 안에 DefaultTapController가 추가되어 4개의 탭이 지정되어 있고,

각각의 탭을 정의하는 StatefulWidget이 존재하였습니다. 그래서 저는 탭에서 발생하였지만 원인분석 결과 메인에서 MaterialApp의 생성과 관련하여 발생한 이 에러의 원인을 짐작도 할 수 없었습니다.

 

어째서 이런 오류가 발생하였던걸까요 ??

정답은 main위젯의 문제도 아니였고, TapController도 각기 탭을 구성하는 위젯의 문제도 아닌 다이얼로그 생성과정에서 발생하였습니다.

저의 다이얼로그 생성코드는 다음과 같았습니다.

showDialog(
  context: context,
  builder: (context) {
    AlertDialog(
      title: Text("파일등록 오류"),
      content:
          Text("파일을 여는데 실패하였습니다. 파일형식(.xlsx 확장자) 또는 포멧(입력형태)을 확인해주세요."),
      actions: [
        TextButton(
            onPressed: () {
              Navigator.pop(context);
            },
            child: Text("확인"))
      ],
    );
  });

이 코드에서 발생하는 문제는 뭘까요 ?

정답은...builder 메소드를 정의하는 과정에서 return 키워드가 빠져있다는 것입니다....

이러한 부분은 당연히 컴파일러가 잡아주지 않을까 했는데 언어에 미흡한 부분이 있는 것인지, 제가 모르는 다른 재정의 방법이 있는 것인지 파악해볼 필요는 있을 것 같습니다.

 

다음은 수정된 코드입니다.(return 키워드만 추가된 코드이니 유심히 비교하시지는 않으셔도 될 것 같습니다 :)

showDialog(
          context: context,
          builder: (context) {
            return AlertDialog(
              title: Text("파일등록 오류"),
              content:
                  Text("파일을 여는데 실패하였습니다. 파일형식(.xlsx 확장자) 또는 포멧(입력형태)을 확인해주세요."),
              actions: [
                TextButton(
                    onPressed: () {
                      Navigator.pop(context);
                    },
                    child: Text("확인"))
              ],
            );
          });

그렇다면 오늘도 곤란한 에러를 직면하신 여러분이 이 게시물에서 원인을 찾으시길 바라면서 마치겠습니다.

 

다음에는 더욱 유익한 게시물로 찾아뵙겠습니다~~!!