Flutter에서의 toList()

샤워실의 바보·2024년 4월 27일
0
post-thumbnail

아래는 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()로 변환
        ),
      ),
    );
  }
}

코드 설명

  • Scaffold: 앱의 기본적인 레이아웃 구조를 제공하는 위젯입니다. 여기서는 body 속성에 다른 위젯들을 넣어 사용합니다.
  • SafeArea: 디바이스의 상단 노치나 하단 네비게이션 바 영역을 침범하지 않게 하는 안전한 영역을 만들어 줍니다.
  • Column: 자식 위젯들을 세로로 나열합니다. 이 경우 각 컨테이너가 세로로 나열됩니다.
  • Container: 정사각형의 컨테이너를 만들고, heightwidth를 각각 50으로 설정하며, color 속성에는 colors 리스트의 각 색상을 적용합니다. map 함수를 사용하여 리스트의 각 요소를 컨테이너 위젯으로 변환하고, toList()를 호출하여 위젯 리스트를 생성합니다.

이 코드는 Flutter 앱에서 정사각형 컨테이너를 세로로 나열하여 각각 다른 색상을 보여주는 간단한 예제를 구현합니다.

toList()

Flutter에서 toList() 메서드를 사용하는 이유는 주로 map과 같은 Iterable 연산 후에 발생합니다. map 메서드는 주어진 함수를 리스트의 각 요소에 적용하고, 변경된 요소들로 구성된 새로운 Iterable을 반환합니다. 그러나 대부분의 Flutter 위젯은 Iterable 대신 `List

를 기대합니다. 따라서 toList()메서드를 사용하여IterableList`로 변환해야 합니다. 이것은 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을 반환합니다. 그러나 Columnchildren 속성은 List Widget 형식을 요구하기 때문에, map이 반환한 IterabletoList()를 통해 List로 변환해야 합니다. 이 과정을 생략하면, Dart의 타입 시스템 때문에 컴파일 에러가 발생할 수 있습니다.

정리

결국 toList() 메서드는 IterableList로 변환하여 Flutter의 다양한 위젯들이 요구하는 리스트 형태의 자식 위젯들을 제공할 수 있도록 해줍니다. 이는 Flutter에서 데이터 컬렉션을 다룰 때 매우 흔히 발생하는 패턴이므로, map, where, expand 등의 Iterable을 반환하는 메서드를 사용 후에는 종종 toList()를 호출해야 할 필요가 있습니다.

profile
공부하는 개발자

0개의 댓글