플러터에서 반복문 돌려 카드박스 만들기

2023. 7. 13. 21:13개발공부/Flutter (ft.Dart)

플러터 공부를 드디어 시작하였다.

생각하고있는 프로젝트는 아주 간단한 프로젝트라, 처음 접하는 언어 다트를 공부하며 진행해보기에 아주 적합한거같다.

 

우선, DB에서 카테고리를 불러오면 각 카테고리마다 카드 박스를 만들어야한다.

오늘의 최종 화면은 이렇게 나오면 완성!

 

제일 먼저 StatelessWidget, StatefulWidget과 같은 flutter를 구성하는 widget불러오기 위해서 아래처럼 import해주고, 기본 세팅을 마친다.

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

현재화면의 껍데기(?)를위해 Stateless widget을 먼저 만들어주고,

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Wooree Project'),
    );
  }
}

Stateful Widget에서 작업할 함수 _MyHomePageState를 불러준다.

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

이제 각각의 카드를위한 코드가 아래에있다. 


class _MyHomePageState extends State<MyHomePage> {

  // 우선 데이터는 임의로 넣어보았다.
  final List<String> cardTitles = [
    'Card 1',
    'Card 2',
    'Card 3',
    'Card 4',
    'Card 5',
  ];

  // 각 카드의 색상을 지정하였다. 
  final List<Color> cardColors = [
    Color(0xFFD6A4A4), // Pastel Pink
    Color(0xFFA4D6C3), // Pastel Green
    Color(0xFFF3E5AB), // Pastel Yellow
    Color(0xFFA4C0D6), // Pastel Blue
    Color(0xFFD6A4CD), // Pastel Purple
  ];

// 각 카드 클릭이벤트
  void handleCardClick(int index) {
    print('Clicked card: ${cardTitles[index]}');
    // 나는 여기서 클릭 후 다른 페이지로 이동하도록 구현할거다.
  }

  // 카드 생성 위젯
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Wooree Project'),
      ),
      // 반복문 돌리기
      body: ListView.builder(
      	// 임의로 생성해준 cardTitles 배열의 length만큼 돌려줌
        itemCount: cardTitles.length,
        itemBuilder: (context, index) {
          return Padding(
            padding: EdgeInsets.all(8.0),
            child: GestureDetector(
              // onclick event
              onTap: () => handleCardClick(index),
              child: Card(
                color: cardColors[index % cardColors.length],
                elevation: 2,
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(8),
                ),
                child: Container(
                  height: 100,
                  padding: const EdgeInsets.all(8),
                  margin: const EdgeInsets.all(8),
                  child: Center(
                    child: Text(
                      cardTitles[index],
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 18,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                  ),
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

ListView.builder를 이용하여 반복문을 돌려주었다. 그리고 onClick event는 onTap을 사용해주면된다.

카드에 padding과 마진을 주기위해 Card안에 또 Container를 만들어주었지만 지금보니 굳이 그럴 필요없이 Card 하나만 만들어도 됐을 듯 하다.

 

이제 클릭 후 새로운 페이지로 넘어가야하는데, Navigator를 사용해보려한다. 

'개발공부 > Flutter (ft.Dart)' 카테고리의 다른 글

플러터 페이지 이동하는 법  (0) 2023.12.03
다트 문법 공부  (0) 2023.11.26
카드 뒤집기 기능 구현  (0) 2023.08.13
flutter에서 notion api 호출하기  (0) 2023.07.18