VoidCallback 뒤에 null 연산자 표기에 관한 질문
43
投稿した質問数 3
null 연산자 표기에 관해 의문사항이 생겼습니다.
U&I 에서는 iconButton에 정의에 아래와 같이 적혀 있어 VoidCallback 뒤에 null 연산자를 표기하는 것으로 이해했습니다.
required void Function()? onPressed,
ElevatedButton 역시 위와 같이 정의되어 있지만 이번 강의에서는 표기가 안되있어서 기존에 작성했던 U&I 코드로 가 null 연산자를 제거해보니 정상적으로 동작하는 것을 확인했습니다.
null 연산자 관련 에러 로그가 없다면 표시를 생략해도 되는 것인지, 아니면 이와 상관없이 위젯 정의에 명시된대로 표기하는것이 권장사항인지 의문이 들어 질문드립니다.
回答 1
0
안녕하세요, 인프런 AI 인턴입니다. novellus님.
Flutter에서 버튼의 onPressed 속성과 같은 콜백을 정의할 때 null 가능성을 나타내기 위해 타입에 물음표(?)를 추가할 수 있습니다. 이는 해당 콜백이 null일 수도 있음을 의미합니다. 아래에 자세한 설명을 드리겠습니다.
null 가능성과 물음표 사용:
- 만약
VoidCallback?와 같이 물음표를 사용하면 그 콜백은 null일 수 있음을 나타냅니다. 이는 해당 콜백을 반드시 구현할 필요가 없을 때 유용합니다.
VoidCallback처럼 물음표 없이 사용할 경우, 그 콜백은 null이 아니어야만 합니다.
- 만약
위젯의 정의에 따른 사용:
IconButton이나ElevatedButton등의 위젯에서는 기본적으로onPressed가 null 가능하다는 가정을 하고 설계되었습니다. 즉, 만약 해당 콜백을 명시하지 않으면 버튼이 비활성화됩니다.
실제 사용 시:
- null 연산자가 명시되지 않은 경우, 그리고 에러 로그가 발생하지 않는다면, 해당 시점에서는 null을 지정하지 않더라도 문제없이 동작할 수 있습니다.
- 그러나, 코드의 명확성과 유지보수성을 위해서는 위젯의 정의에 따라 명시적으로 타입을 지정하는 것이 더 권장될 수 있습니다.
- null 연산자가 명시되지 않은 경우, 그리고 에러 로그가 발생하지 않는다면, 해당 시점에서는 null을 지정하지 않더라도 문제없이 동작할 수 있습니다.
관련 질문 URL은 아래와 같습니다:
- null 연산자 관련 플러터에서의 사용에 관한 논의
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
video_call 플러그인 설치후 에러 발생
0
41
1
SDK 안드로이드 설치 질문!
0
56
1
코드팩토리 디스코드 링크 다시 부탁드려요~
0
90
1
Webview를 이용해서 URL 상의 페이지 출력 불가
0
63
1
홈스크린 함수를 함축해서 main.dart에 옮기는 문제
0
51
1
플레이스토어
0
57
1
아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?
0
52
1
가이드라인 질문
0
55
0
emulator 에러 환경설정 뭐가 문제 일까요??
0
75
1
emulator 실행 오류
0
91
3
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
0
68
1
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
0
41
1
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
0
51
1
video_call 플러그인 설치시 에러문제
0
61
1
children 안의 if 문에서 { } 못쓰는 이유?
0
46
1
이렇게 오류가 떠요
0
61
1
AppBar 사용했는데
0
60
2
[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다
0
54
1
StatefulWidget 실습 에러가 발생합니다.[해결완료]
0
61
1
Video Player 프로젝트에 대한 추가 질문
0
50
0
Row위젯이나 column위젯의 위치는 누가 정하나요??
0
38
1
geolocator 오류때문에 개발진행이 불가능입니다
0
61
1
API 관련 이슈
0
83
2
toList() 코드가 사라진 이유에 관한 질문
0
77
1

