๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
APP/FLUTTER

FLUTTER #4 BMI Calculator

by mingzoo 2020. 1. 19.

๐Ÿ“š์ด ํฌ์ŠคํŠธ๋Š” ์•ˆ์ ค๋ผ์˜ ์œ ๋ฐ๋ฏธ ํ”Œ๋Ÿฌํ„ฐ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ œ๊ฐ€ ์ฐพ์•„๋ณธ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค! ๐Ÿ“š

 

Theme Widget

https://www.colorzilla.com/ → ์ƒ‰ ์•Œ์•„๋‚ด๊ธฐ

color class https://api.flutter.dev/flutter/dart-ui/Color-class.html

themedata constructor : https://api.flutter.dev/flutter/material/ThemeData/ThemeData.html

 

ํ…Œ๋งˆ ์„ค์ •๊ด€๋ จ 

  • theme : ThemeData.dark() ->๋‹คํฌ๋ชจ๋“œ ํ…Œ๋งˆ๋กœ ์ „ํ™˜
  • primarycolor → appbar์ƒ‰ ๋ฐ”๊พธ๊ธฐ
  • accentcolor → ๋ฒ„ํŠผ์ƒ‰ ๋ฐ”๊พธ๊ธฐ
  • width: double.infinity -> ํ™”๋ฉด ๊ฐ€๋“ ์ฑ„์šฐ๊ธฐ

 

Final VS Const(immutable)

final // ํ•œ๋ฒˆ๋งŒ ์ดˆ๊ธฐํ™” ๊ฐ€๋Šฅ // set only once

const // compile-time constant // ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์ƒ์ˆ˜ // ์ปดํŒŒ์ผ ๋œ ๋‹ค์Œ์˜ ์ƒ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.

 

Dart Enum

- ์—ด๊ฑฐํ˜•

- bool(true, false)๋ณด๋‹ค ๋งŽ์€ ์˜ต์…˜์„ ๊ฐ€์ง€๊ณ  ์‹ถ์„ ๋•Œ

enum EnumName{type A, type B, type C}
//์‹คํ–‰ํ•˜๋ ค๋ฉด
EnumName.type A

 

mainAxisAlignment, crossAxisAlignment

UI๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค ๋ณด๋‹ˆ๊นŒ column, row์™€ ๊ฐ™์€ ๊ฐœ๋…๋“ค์ด ๋งŽ์ด ์“ฐ์ธ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ถ€๋„๋Ÿฝ์ง€๋งŒ ๋‚˜๋Š” ์ด๋Ÿด ๋•Œ ์ˆ˜ํ‰๊ณผ ์ˆ˜์ง์ด ์ฝ”๋“œ๋กœ ์“ธ ๋•Œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒฝํ—˜์ด ๋งŽ์•˜๋‹ค.

column ๊ณผ row์ผ ๋•Œ mainAxis์™€ crossAxis์ผ ๋•Œ๊ฐ€ ๊ฐ๊ฐ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™์ด์—ˆ๋Š”๋ฐ ์•„๋ž˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๊ณ 

์ด๊ฑธ ์™ธ์šฐ๊ณ  column์€ ๋ฐ˜๋Œ€!๋กœ ์ƒ๊ฐํ•˜๋Š”๊ฒŒ ํŽธํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

Slider Class

์Šฌ๋ผ์ด๋” ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ์ด๋ ‡๊ฒŒ ๋งŽ์€ ์†์„ฑ๋“ค์ด ์กด์žฌํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ๋“ค์€ #3์˜ ํฌ์ŠคํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ ์–ด๋†“์•˜๋‹ค.

text์— string์„ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด, height.to.String()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Text(
	height.toString(),
	style : kNumberTextStyle,
)
Slide(
  value : height.toDouble(),
  min : 120.0,
	max : 220.0,
	activeColor: Colors.pink,
	inactiveColor : Colors.grey,
	onChanged : (double newValue) {
	  height = newValue.round(); //์›€์ง์ด๋Š” ๋Œ€๋กœ ํ‚ค๋ฅผ ์„ค์ •
}
),

 

๐ŸŽจ(ํŒ) ์ด๋ฆ„ ์„ค์ •์‹œ ์•ž ๋ฌธ๊ตฌ๋ฅผ ํ†ต์ผ์‹œ์ผœ ์ฐพ๊ธฐ ์‰ฝ๊ฒŒ ํ•ด์คŒ ex)kNumberTextStyle, kButtonTextStyle

 

Slider Theme

SliderTheme(
	data: SliderTheme.of(context).copyWith(
		thumbShape: RoundSliderThumbShape(enalbledThumbRadius : 15.0)
		// ๋™๊ทธ๋ผ๋ฏธ๋ถ€๋ถ„ ํฌ๊ธฐ ๋Š˜๋ฆฌ๊ธฐ
		overlayShape: RoundSliderOverlayShape(overlayRadius : 30.0)
		//๋ˆŒ๋ €์„ ๋•Œ, ๋™๊ทธ๋ผ๋ฏธ ํฌ๊ฒŒ ํ•˜๋‚˜๋” ์ถ”๊ฐ€
		thumbcolor //๋™๊ทธ๋ผ๋ฏธ ์ƒ‰๊น” ๋ฐ”๊พธ๊ธฐ
),

์Šฌ๋ผ์ด๋”์˜ ํ…Œ๋งˆ๋ฅผ ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์›€์ง์ด๋Š” ๋™๊ทธ๋ผ๋ฏธ์˜ ์ƒ‰, ํฌ๊ธฐ ๋“ฑ์„ ๋ฐ”๊ฟ”์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

Composition

 

BASIC ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ

*FAB = FloatingActionButton

RawMaterialButton ์“ฐ๋Š” ์ด์œ  FAB๊ฐ€ ํ•œ ์Šคํฌ๋ฆฐ์— ํ•˜๋‚˜ ์“ฐ์ด๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ

 

Navigating

https://flutter.dev/docs/cookbook/navigation/navigation-basics  

์ด์ œ ์•ฑ์—์„œ๋Š” ๋ˆ„๋ฅด๋ฉด ํŽ˜์ด์ง€๊ฐ€ ๋ฐ”๋€Œ๊ณ  ์ด๋Ÿฐ ์„ค๊ณ„๋ฅผ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Navigating์ด ํ•„์š”ํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ๋„ค๋น„๊ฒŒ์ดํŒ…์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์œ„์˜ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ๋” ์ž์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ์œผ๋‹ˆ ๊ผญ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋žŒ!

initialRoute:'/'
routes: {
    // When navigating to the "/" route, build the FirstScreen widget.
    '/': (context) => FirstScreen(),
    // When navigating to the "/second" route, build the SecondScreen widget.
    '/second': (context) => SecondScreen(),
  },

 

Dart Maps

Map<keyType, valuetype> mapname{
	key:Value
}

//์‹คํ–‰
mapname[key]

 

Dart Ternary Operator(์กฐ๊ฑด ์—ฐ์‚ฐ์ž)

condition ? DoThisIfTrue : DoThisIfFalse

 

728x90

'APP > FLUTTER' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Flutter #3] Xylophone & Quizzler  (0) 2021.01.05
FLUTTER #2 Dicee & Dart  (0) 2020.09.11
FLUTTER #1 I_am_rich  (0) 2020.01.18