아래는 Flutter에서 Scaffold, SafeArea, Column, Container를 사용하여 각 Container에 Colors 리스트의 각 색상을 적용하는 코드 예제입니다. 이 예제에서는 map
메소드를 사용하여 Colors 리스트의 각 색상을 Container의 배경색으로 설정하고, 이를 Column 위젯 안에 배치합니다.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
Widget build(BuildContext context) {
// 색상 목록
List<Color> colors = [
Colors.red,
Colors.orange,
Colors.yellow,
Colors.green,
];
return Scaffold(
body: SafeArea(
child: Column(
children: colors.map((e) {
return Container(
height: 50,
width: 50,
color: e,
);
}).toList(), // map 메서드를 사용한 후 toList()로 변환
),
),
);
}
}
body
속성에 다른 위젯들을 넣어 사용합니다.height
와 width
를 각각 50으로 설정하며, color
속성에는 colors
리스트의 각 색상을 적용합니다. map
함수를 사용하여 리스트의 각 요소를 컨테이너 위젯으로 변환하고, toList()
를 호출하여 위젯 리스트를 생성합니다.이 코드는 Flutter 앱에서 정사각형 컨테이너를 세로로 나열하여 각각 다른 색상을 보여주는 간단한 예제를 구현합니다.
Flutter에서 toList()
메서드를 사용하는 이유는 주로 map
과 같은 Iterable 연산 후에 발생합니다. map
메서드는 주어진 함수를 리스트의 각 요소에 적용하고, 변경된 요소들로 구성된 새로운 Iterable
을 반환합니다. 그러나 대부분의 Flutter 위젯은 Iterable
대신 `List
를 기대합니다. 따라서
toList()메서드를 사용하여
Iterable을
List`로 변환해야 합니다. 이것은 Flutter의 위젯 트리에서 위젯 리스트를 구성하는 데 필요합니다.
예를 들어, Flutter의 Column
, Row
, ListView
등의 위젯은 자식들을 나열할 때 ListWidget
를 요구합니다. map
메서드를 사용하여 Iterable을 생성한 후 toList()
를 호출하여 이 Iterable을 List로 변환해야, 이러한 위젯들에 자식으로 제공할 수 있습니다. 만약 toList()
를 호출하지 않고 Iterable
을 직접 전달하려고 하면, 타입 불일치로 인해 오류가 발생합니다.
예를 들어, Column
위젯 안에서 여러 Container
위젯을 동적으로 생성하고 싶다고 가정해 봅시다. 각 Container
의 색상을 colors
리스트에서 가져오려면 다음과 같이 작성할 수 있습니다:
Column(
children: colors.map((color) {
return Container(
width: 100,
height: 100,
color: color,
);
}).toList(), // 여기서 toList() 호출이 필요합니다.
)
이 코드에서 colors.map(...)
은 각 색상에 대해 Container
를 생성하는 Iterable
을 반환합니다. 그러나 Column
의 children
속성은 List Widget
형식을 요구하기 때문에, map
이 반환한 Iterable
을 toList()
를 통해 List
로 변환해야 합니다. 이 과정을 생략하면, Dart의 타입 시스템 때문에 컴파일 에러가 발생할 수 있습니다.
결국 toList()
메서드는 Iterable
을 List
로 변환하여 Flutter의 다양한 위젯들이 요구하는 리스트 형태의 자식 위젯들을 제공할 수 있도록 해줍니다. 이는 Flutter에서 데이터 컬렉션을 다룰 때 매우 흔히 발생하는 패턴이므로, map
, where
, expand
등의 Iterable
을 반환하는 메서드를 사용 후에는 종종 toList()
를 호출해야 할 필요가 있습니다.