티스토리 뷰

플러터에서 특정 조건에 따라 위젯을 나타내고 싶은 경우가 있다. 이때 일반적으로 사용하는 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"),
]
댓글
공지사항