티스토리 뷰
반응형
플러터에서 특정 조건에 따라 위젯을 나타내고 싶은 경우가 있다. 이때 일반적으로 사용하는 if() {} 문을 사용하니
if (_bannerAd != null) {
SizedBox(
height: 50,
child: AdWidget(ad: _bannerAd!),
),
},
error: The element type 'Set<SizedBox>' can't be assigned to the list type 'Widget'. (list_element_type_not_assignable at [prayer_notebook] lib/ad_test.dart:76)
에러 내용은 Widget 타입이어야 하는데, Set<SizedBox>가 되어서 발생한 에러라고 한다.
음? Set<SizedBox>라고? 나는 분명 그냥 SizedBox인데?라고생각했는데 그 이유는 If()의 바디를 나타내는 {} 때문에 플러터는 Set으로 인식하게 된다. 이처럼 일반적인 방법으로 사용되는 if() {}를 사용하면 안 된다.
조건이 참일 때, 위젯 하나를 추가하는 경우
조건이 참일 때, 위젯 하나만 추가된다면 {}를 제거해서 사용해야 한다. 그러면 에러가 없이 잘 추가된다.
if (_bannerAd != null)
SizedBox(
height: 50,
child: AdWidget(ad: _bannerAd!),
),
조건에 따라 위젯을 다르게 추가하는 경우
조건이 참이냐 거짓에 따라서 위젯을 다르게 추가해야 한다면 삼항연산자를 사용하면 된다.
condition ? Text("True") : Text("False"),
조건이 참일 때, 여러 위젯을 추가하는 경우
조검이 참일 때, 여러 위젯을 추가해야 한다면 스프레드(...) 연산자를 사용하면 된다.
if (condition) ...[
Text("1"),
Text("2"),
],
스프레드 연산자를 사용하면, 꼭 여러 위젯이 아니라도 하나의 위젯도 사용할 수 있다.
if (condition) ...[
Text("True"),
]
그리고 else와 else if도 사용할 수 있다.
if (condition) ...[
Text("True"),
] else ...[
Text("False"),
]
반응형
'Flutter' 카테고리의 다른 글
플러터] iOS, Anroid 플랫폼 확인하는 방법 (0) | 2023.07.15 |
---|---|
플러터] AdMob 광고 추가하기 (0) | 2023.07.15 |
플러터] DropdownButton의 Failed assertion: line 890 pos 15 (0) | 2023.07.14 |
플러터] 불변 타입과 가변 타입, 얕은 복사와 깊은 복사 (0) | 2023.07.14 |
플러터] State 클래스에서 build 지역 변수 대신 클래스 속성 사용하기 (0) | 2023.07.12 |
댓글
공지사항