6일차 과제 - rlatkddbs99/Flutter GitHub Wiki

스타벅스 메뉴판 만들기

캡처1

main.dart

import 'package:contact_app/ContactTile.dart';
import 'package:contact_app/DrinkTile.dart';
import 'package:flutter/material.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        bottomSheet: Container(
          color: Colors.black87,
          height: 64,
          child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 16),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  "주문할 매장을 선택해주세요.",
                  style: TextStyle(color: Colors.white),
                ),
                Icon(
                  Icons.expand_more,
                  color: Colors.white,
                )
              ],
            ),
          ),
        ),
        bottomNavigationBar: BottomNavigationBar(
            selectedItemColor: Colors.green,
            unselectedItemColor: Colors.grey,
            type: BottomNavigationBarType.fixed,
            items: [
              BottomNavigationBarItem(icon: Icon(Icons.home), label: '홈'),
              BottomNavigationBarItem(
                  icon: Icon(Icons.credit_card), label: 'pay'),
              BottomNavigationBarItem(
                  icon: Icon(Icons.local_cafe), label: 'order'),
              BottomNavigationBarItem(icon: Icon(Icons.shop), label: 'shop'),
              BottomNavigationBarItem(
                  icon: Icon(Icons.more_horiz), label: 'other'),
            ]),
        appBar: AppBar(
          iconTheme: IconThemeData(
            color: Colors.black, //색변경
          ),
          backgroundColor: Colors.white,
          leading: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Icon(Icons.navigate_before),
          ),
          elevation: 0,
          centerTitle: false,
          actions: [
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Icon(Icons.search),
            ),
          ],
        ),
        body: ListView(
          children: [
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text(
                "NEW",
                style: TextStyle(fontSize: 42),
              ),
            ),
            DrinkTile(
              menuKr: '골든 미모사 그린 티',
              menuEn: 'Golden Mimosa Green Tea',
              price: '6100원',
              imgUrl: 'assets/images/item_drink1.jpeg',
            ),
            DrinkTile(
              menuKr: '블랙 햅쌀 고봉 라떼',
              menuEn: 'Black Rice Latte',
              price: '6300원',
              imgUrl: 'assets/images/item_drink2.jpeg',
            ),
            DrinkTile(
              menuKr: '아이스 블랙 햅쌀 고봉 라떼',
              menuEn: 'Iced Black Rice Latte',
              price: '6300원',
              imgUrl: 'assets/images/item_drink3.jpeg',
            ),
            DrinkTile(
              menuKr: '스타벅스 튜메릭 라떼',
              menuEn: 'Starbucks Turmeric Latte',
              price: '6100원',
              imgUrl: 'assets/images/item_drink4.jpeg',
            ),
            DrinkTile(
              menuKr: '아이스 스타벅스 튜메릭 라떼',
              menuEn: 'Iced Starbucks Turmeric Latte',
              price: '6100원',
              imgUrl: 'assets/images/item_drink5.jpeg',
            ),
          ],
        ),
      ),
    );
  }
}


DrinkTile.Dart



import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';

class DrinkTile extends StatelessWidget {
  const DrinkTile(
      {super.key,
      required this.MenuKr,
      required this.MenuEn,
      required this.Price,
      required this.ImgUrl});

  final String MenuKr;
  final String MenuEn;
  final String Price;
  final String ImgUrl;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Row(
        children: [
          CircleAvatar(
            backgroundImage: AssetImage(ImgUrl),
            radius: 48,
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(MenuKr),
                Text(
                  MenuEn,
                  style: TextStyle(
                      fontSize: 14,
                      fontWeight: FontWeight.w200,
                      color: Colors.grey),
                ),
                Text(Price),
              ],
            ),
          )
        ],
      ),
    );
  }
}