flutter -6

김상윤·2023년 3월 6일
0

flutter

목록 보기
6/10

함수

어떠한 행동을 하고 결과를 나한테 넘겨주는 것
함수의 선언과 호출
선언(정의) : 함수 만들기
호출 : 함수 실행

void(리턴값 지정 ex)Stinrg,int 등) 함수명(){
	코드 블록		//실행할 내용
}

void 함수: 반환 안해. return 불필요, 실행만 하고 결과 안줘
int 함수 : int 형 데이터를 결과로 내줌, return DataType맞춰서 필요함!
String, List, bool 등등 돌려주는 return의 형태에 맞춰 작성해야함

void 예시(return이 필요없는 함수)

void printmsg(){
	print("안녕");
	print("hi");
}
void main(){
	printmsg();	//함수 실행	
}

결과 -> 안녕 hi

함수의 기본 특성

  • 함수는 특수한 임무를 가지고 있게 만들기
  • 미리 정의 해놓으면 호출만 하면되는 간편함
  • 독립적인 메모리 공간 사용 -> 함수안의 변수를 main에서 못 사용하잖아
  • 함수에 데이터 전달 가능(매개변수), 매개변수의 개수 맞춰주기

매개변수

함수를 호출할 때 전달해 줄 내용! 정의 부분에서 개수와 데이터형태 맞춰줘야 함

매개변수 예시

void printmsg(String yourName){  //매개변수로는 String형태만, 
								//받아온 yoon이라는 String가짐
	print("안녕"+yourname);
}
void main(){
	printmsg("yoon");	//함수 실행, yoon이라는 String을 가지고 호출
}

결과 -> 안녕yoon

변수와 String을 같이 출력하는 방법

print("원하는 텍스트 $변수명 ");

이벤트를 제공하는 위젯

일반적으로 버튼으로 끝나는 TextButton, FloatingActionButton 등은
onPressed 속성을 이용하여 핸들러와 연결이 가능하다.
그렇다면 Text나 Container 같은 일반 위젯에 이벤트 핸들러를 연결하는 방법은?

Inkwell

일반 위젯에 이벤트 핸들러를 연결할 수 있도록 해주는 위젯
자식으로 설정된 위젯을 누르면 잉크가 퍼져나가는 효과가 제공

InkWell(
	onTap: () {},
	child: Text("내용"),
),

결과 -> 내용이라 써있는 텍스트를 클릭하면 onTap의 {}안에 해당 함수의 실행 내용이 실행됨

GestureDetector

InkWell보다 더 많은 제스쳐 감지 가능

GestureDetector(
	onTap(){
		print("hi");
	}
	child:Text("내용"),
)

->결과 : 텍스트를 누를 때 잉크가 퍼지진 않지만 터미널에 hi가 출력

과제 주어진 UI 만들기

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),
              ],
            ),
          )
        ],
      ),
    );
  }
}
profile
교육 중!

0개의 댓글