Site icon 반가반가 Blog

플러터 리스트뷰(ListView), 아이콘버튼(IconButton) – 메모장 앱 만들기 (2)

안녕하세요. 지난 글에서 플러터의 기본 위젯인 텍스트(text), 이미지(Image), 아이콘(Icon)에 대해서 알아보았습니다. 이번 글은 초급자를 대상으로 한 플러터 강의로, 플러터 리스트뷰(ListView), 아이콘버튼(IconButton)을 사용하여 메모장 앱 개발을 진행하겠습니다.

플러터 강의 영상에서도 해당 글의 내용을 확인할 수 있습니다.

메모장 앱만들기

플러터로 앱을 만들기 위해서 먼저 Flutter 라이브러리를 가져와 앱을 시작시켜야 됩니다. 다음 코드는 애플리케이션을 시작하는데 필요한 기본적인 구조 입니다.

import 'package:flutter/material.dart';

void main() {
  runApp(MyMemoApp());
}

MyMemoApp 클래스 생성

메인함수에 실행되는 MyMemoApp클래스를 다음 코드와 같이 만들어줍니다. StatelessWidget는 상태가 없는 위젯이라는 의미이며 자세한 내용은 상태변화 관련 글에서 설명드리겠습니다.

Widget build메서드는 앱의 UI를 정의하고 생성하는 역할을 합니다. materialApp은 최상위 머티리얼 앱으로 앱의 전반적인 디자인을 결정하는 데 사용됩니다.

class MyMemoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp();
  }
}

materialApp()에서 사용되는 home속성에 구성 요소를 만들어 보겠습니다. 코드 구조와 아래 글 문단이 구조와 같으니 참고 부탁드립니다.

Widget build(BuildContext context) {
  return MaterialApp(
      home: Scaffold(
    appBar: AppBar(
      title: const Text('Memo', style: TextStyle(color: Colors.white)),
      backgroundColor: Colors.black,
    ),
    body: const ListTile(
        title: Text('Item 1'),
        tileColor: Colors.grey,
        trailing: Icon(Icons.delete)),
  ));
}

아이콘 버튼(IconButton)

appBar의 오른쪽에 메모를 추가할 수 있는 아이콘을 생성하였습니다. IconButton()의 onPressed 속성을 이용하여 클릭할때 clicked 메시지를 보여지도록 추가하였습니다. 코드 구조와 아래 글 문단이 구조와 같으니 참고 부탁드립니다.

appBar: AppBar(
  title: const Text('Memo', style: TextStyle(color: Colors.white)),
  backgroundColor: Colors.black,
  actions: [
    IconButton(
        onPressed: () {
          print('clicked');
        },
        style: IconButton.styleFrom(foregroundColor: Colors.white),
        icon: Icon(Icons.create)),
  ],
),

리스트뷰(ListView)

메모들을 여러개 표시하기 위해서 ListView를 생성하여 여러개의 ListTile 위젯들을 하드 코딩 하였습니다. 앱바와 동일하게 IconButton() 위젯의 onPressed속성을 이용하여 삭제 메시지를 출력하도록 하였습니다. 코드 구조와 아래 글 문단이 구조와 같으니 참고 부탁드립니다.

body: ListView(
  children: [
    ListTile(
      title: Text('Item 1'),
      tileColor: Colors.grey,
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          print('delete Item 1');
        },
      ),
    ),
    ListTile(
      title: Text('Item 2'),
      tileColor: Colors.grey,
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          print('delete Item 2');
        },
      ),
    ),
    ListTile(
      title: Text('Item 3'),
      tileColor: Colors.grey,
      trailing: IconButton(
        icon: Icon(Icons.delete),
        onPressed: () {
          print('delete Item 3');
        },
      ),
    ),
  ],
)

하드 코딩하지 않고 ListView.builder()을 이용하여 동적으로 ListTile 위젯을 생성할수 있습니다.

body: ListView.builder(
    itemCount: 5,
    itemBuilder: (context, index) {
      return ListTile(
        title: Text('item $index'),
        trailing: IconButton(
          icon: const Icon(Icons.delete),
          onPressed: () {
            print('delete $index');
          },
        ),
      );
    })

마무리

지금까지 아이콘버튼에서 onPressed 속성을 이용한 클릭이벤트와 리스트뷰를 이용해 메모들을 동적으로 보여주도록 구성해보았습니다. 읽어주셔서 감사합니다.

전체 코드는 에서 확인할 수 있습니다.

Exit mobile version