반응형
값을 받아올 때 값을 분해한 상태로 가져온다
void main() {
// Validation
final minJi = ('민지', 20);
//타입을 보장받고 싶은 경우 as로 캐스팅
final (name as String, age as int) = minJi;
print(name);
print(age);
}
위와같은 경우 minJi의 구조가 String, int로 캐스팅 돼서 name에는 minji, age에는 20이 출력된다.
void switcher(dynamic anything) {
switch(anything) {
case 'aaa' :
print('match:aaa');
//distructure
case ['1','2'] :
print('match [1,2]');
//list인데 3개의 값이면 어떤 값이면 된다는 의미
case [_,_,_] :
print('match: [_,_,_]');
case [int a,int b] :
print('match: int$a, int$b');
case <10 && >5:
print('match < 10 && >5');
default :
print('no match');
}
}
결과 확인
switcher('aaa');
switcher(['1','2']);
switcher([1,2,3]);
switcher([6,7]);
switcher(7);
forLooper();
ifMatcher();
}
다른 형태로서의 활용
함수의 body대신에 =>(애로우)를 넣은 것처럼, 반환하고자 하는 것도 마찬가지로 =>(애로우) 사용 가능
String switcher2(dynamic val, bool condition) => switch(val) {
5 => 'match: 5',
//조건문을 넣자 -> condition이 true이고, val이 7일때 => 반환해라
7 when condition => 'match 7 and true',
//default 표기
_=> 'no match'
};
print(switcher2(5, true));
print(switcher2(7, true));
print(switcher2(7, false));
for loop을 이용하여 distructure
void forLooper() {
final List<Map<String, dynamic>> members = [
{
'name' : '민지',
'age' : 20,
},
{
'name' : '혜린',
'age' : 19,
}
];
//일반적
for(final member in members) {
print(member['name']);
print(member['age']);
}
// distructuring
//distructure할 때는 key값은 무조건 선언해줘야댐
for(var {'name' : name, 'age': age } in members) {
print(name);
print(age);
}
}
if문을 통한 distructure
//if문을 쓸건데 minji를 구조를 validation함과 동시에 distructure하고싶다면
//만약 age가 int가 아니고 string'20'이였다면, if 조건이므로 아예 프린트하지 않음
void ifMatcher() {
final minji = {
'name' : '민지',
'age' : 20,
};
if(minji case{'name': String name, 'age': int age}) {
print(name);
print(age);
}
}
반응형
'Flutter > Flutter 기본' 카테고리의 다른 글
[Flutter] Horizontal viewport was given unbounded height (0) | 2023.06.28 |
---|---|
[Flutter] 디버그 모드 표식 없애기, 폰트 등록 (0) | 2023.05.26 |
[Flutter] asset(img, font등록) (0) | 2023.05.26 |
[Flutter] permission_handler ios 권한 설정 (0) | 2023.05.26 |
[Flutter] android, ios 플러그인 권한 설정 (0) | 2023.05.26 |