: Flutter๋ ๋ชจ๋ ๊ฒ์ด โWidgetโ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์. Java์์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ Object๋ผ๋ ํด๋์ค๋ฅผ ์์ ๋ฐ๋ฏ UI์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ WidgetStatelessWidget: ๋ณํ์ง ์๋ ์ ์ ์ธ ํ๋ฉด์ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋จ์ ํ ์คํธ๋ ์ฑ์ ๋ํ ์ ๋ณด
์ BloC์ธ๊ฐ? : ํ๋ ์ ํ ์ด์ ๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ์ฝ๊ฒ ๊ตฌ๋ถํ ์ ์์ด ์ฝ๋๊ฐ ๋น ๋ฅด๊ณ , ํ ์คํธํ๊ธฐ ์ฝ๊ณ , ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง ๊ตฌ์กฐ 3๊ฐ์ ๋ ์ด์ด๋ก ๊ตฌ๋ถํ๋ค. Presentation : Bloc State์ ๋ฐ๋ผ ์ ์ ์๊ฒ ์ด๋ป๊ฒ ๋ณด์ฌ์ค์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ์ ์ ์
ํ๋ก์ ํธ ํ์ผ์ ttf ํน์ otfํ์ผ ์ถ๊ฐpubspec.yaml ํ์ผ ์์ ์ฌ์ฉ์์
๋ค์ดํฐ๋ธ ๋จ์ ๊ธฐ๋ณธ ์์ํ๋ฉด์ ๋ฐฐ๊ฒฝ์, ์์ ์ด๋ฏธ์ง, ๋ธ๋๋ฉ ๋ฑ์ ์ค์ ํ๊ณ ์ ๋ ฌํ ์ ์๋ ํจํค์ง์ด ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ดํฐ๋ธ๋จ์์์ ์คํ๋์ ํ๋ฉด์ ์ค์ ์ ๋ง๊ฒ ๋ง๋ค์ด์ฃผ๊ณ Flutter๊ฐ ์ฒซ ํ๋ฉด์ ํ๋ ์์ ๋ ๋๋งํ๊ธฐ ์ ๊น์ง์ ํด๋น ํ๋ฉด์ด ๋ ธ์ถ ๋จ๋ฃจํธ ํ๋ก์ ํธ ํด๋์
์์ ์์ ฏ ํ๊ฐ๋ฅผ ํฌํจํ๋ฉฐ ์ฝ๊ธฐ๋ฅผ ์ง์ ํ ์ ์๋ค.๋ง์ฝ, ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์์ ์์ ฏ์ ํฌ๊ธฐ์ ๋ง์ถฐ์ง๊ณ (์์ ์์ ฏ์ ํฌ๊ธฐ๊ฐ ์ง์ ๋์ด์์ด์ผํจ)์์ ์์ ฏ์ด ์๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ์ง์ ๋์ด ์์ง ์์ผ๋ฉด width์ height๋ ์ต๋๊ฐ์ผ๋ก ๊ณ ์ ๋จContainer์ BoxDec
์์ ฏ ํธ๋ฆฌ์์ ํ์ฌ ์์ ฏ์ ์์น๋ฅผ ์๋ ค์ฃผ๋ (handle)์ ๋ณด์ด๋ค.BuildContext๋ stateless์์ ฏ์ด๋ state ๋น๋ ๋ฉ์๋์ ์ํด์ return ๋ widget์ ๋ถ๋ชจ๊ฐ ๋๋ค.๋ฐ์ดํฐ๋ ์์ฑ์๋ฅผ ํตํด ์ ๋ฌMaterialApp์์ ฏ์ routes ๋ถ๋ถ์ k
PreferredSizeWidget์ Flutter์์ ์ฌ์ฉ๋๋ ์์ ฏ ํด๋์ค โ ํ๋ฉด์ ํฌ๊ธฐ ๋ฐ ์์น์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์์ ฏ์ด๋ค. PreferredSizeWidget์ ๊ตฌํํ ์์ ฏ์ PreferredSize๋ฅผ ํตํด ํ๋ฉด ํฌ๊ธฐ๋ฅผ ์ ์ํ ์ ์๋ค.์ฃผ๋ก Preferr
๊ธฐ๋ฅ์ด ํ์ํ ๊ณณ์ ์ฌ์ฉํ๋ฉด๋๋ค !!
๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๊ธฐ์กด์ ์์ ฏ์ ๋ชจ๋ ์์ ๊ณ , ์๋ก์ด ์์ ฏ์ผ๋ก ๋์ฒดํ๋ค.State์์ ฏ์ ๋ํ ์์ฑ์ ์๋ฏธํ๋ค. (ํด๋น ์์ ฏ์ด ๊ฐ์ง๊ณ ์๋ ์์ฑ์ ๋ชจ๋ ์ํ๋ผ ๋ถ๋ฆ)์์ ฏ์ด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋ ์ ์๋ค์์ ฏ์ด ๋น๋ ๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ฝ์ ์ ์๋คโ ๋ชจ๋ state๋
MediaQuery.of(context).viewInsets.bottomํค๋ณด๋์ ๋์ด๋ฅผ ๋ฐ์์ฌ ์ ์๋ค.ํค๋ณด๋์ ๋์ด์ ๋ฐ๋ผ ๋ฒํผ์ ์์น๋ฅผ ์กฐ์ ํด์ฃผ๋ฉด ๋!
freezed | Dart Package์์ฑ์ + ์์ฑ ์ ์์ฌ์ ์ toString, operator == , hashCodecopyWith ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋ ๋ฉ์๋ ๊ตฌํde/serialization ์ฒ๋ฆฌโ json์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์ค์นํ์ง ์๋๋ค@freezed Ann
โ pubspec.yaml ํ์ผ์์ ์ค์น ๋์๋ ์ง ํ์ธ ๊ฐ๋ฅํจoperator == ๊ณผ hashcode ๋ฉ์๋๋ฅผ ์ ์ํด์ฃผ์ด์ผํ๋๋ฐ, equatable๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ ์ฝ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.Equatable๋ฅผ ์์๋ฐ๊ณ List get props๋ฅผ overriding
arguments๋ Object ํ์ ์ด๋ค.โ ๋ณด๋ด๋ ํ์ ์ ๋ง๊ฒ ํ์ ์บ์คํ ์ ํด์ฃผ์ด์ผํจ
TextField ์์ฑ์ hitText์ hintStyle์ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
: ๋ค์ํ ์คํ์ผ๊ณผ ์์์ ์ ์ํ ์ ์๋ ํ ์คํธ ์์ ฏ: ์ฌ๋ฌ๊ฐ์ TextSpan์์ ฏ์ ํฌํจํ๋ ์์ ฏโ ์ฌ๋ฌ๋ถ๋ถ์ผ๋ก ๋๋์ด์ง ํ ์คํธ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
.. ๋ฌธ๋ฒ์ Dart์์ "cascade notation" ๋๋ "cascade operator"๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ์ฌ๋ฌ ๋ฉ์๋ ํธ์ถ์ ํ ๋ฒ์ ๊ฐ์ฒด์ ์ฐ์์ ์ผ๋ก ์ ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ์ด๊ฒ์ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ ์ค์ ํ๋ ๋ฐ ํธ๋ฆฌํ ๋ฐฉ๋ฒ.
https://pub.dev/packages/web_socket_channel์ฑ๋ ์์ฑ : ์์ผ ๋งํฌ๋ฅผ ๋ฃ์ด์ ์ฑ๋์ ์ด์ด์ค๋ค์ฑ๋์ ๋ฉ์ธ์ง ๋ณด๋ด๊ธฐ
\[https://github.com/jonataslaw/getx/blob/master/README.ko-kr.md๋จ์ ์ํ ๊ด๋ฆฌ์ - GetBuilder๋ฐ์ ์ํ ๊ด๋ฆฌ์ - GetX/Obx์ํ ๊ด๋ฆฌ๋ฅผ ์ํด StatefulWidget์ ์ฌ์ฉํ์ง ์์๋ ๋จ์ํ
: ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ GetxController๋ GetxService๋ฅผ StatelessWidget์ ์ถ๊ฐํ ์ ์๋ค.BindingControllerWidgetํธ์ถ
await ํค์๋๋ฅผ ์ฌ์ฉํ ํจ์๋ ๋ฌด์กฐ๊ฑด asyncํจ์์ด์ด์ผํจasyncํจ์๋ ๋ฌด์กฐ๊ฑด Future๋ฅผ ๋ฐํํ๋ค.โ ๋์ผํ ์ฝ๋!๋ง์น ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ค.\_loadFromDisk์ด ์๋ฃ ๋๋ฉด ๊ทธ๋ค์ ๋ธ๋ก์ ์คํ.ย awaitย ๋ฅผ ๋ง๋๋ฉด ํด๋น ๋์์ ์๋ฃ๋๊ธฐ
iOS์์ ์ฌ์ฉํ๋ Keychain ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ๊ธฐ ์ํด ๋ช๊ฐ์ง ๋ฌธ์๋ฅผ ์ฐพ์๋ณด์๋ค. (ํค์ฒด์ธ - ์ฑ์ ์ง์ ๋ค๊ฐ ๊น์๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์์ด ๋ฐ๋ก ๋ก๊ทธ์ธ ์ํฌ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค) ๊ทธ๋ฌ๋ ์ค!! flutter_keychainํจํค์ง ๋ฌธ์์์ ์ด๋ฐ ๋ฌธ๊ตฌ๋ฅผ ๋ฐ๊ฒฌํ
\_buildMenuItem()
Build Apk ์ถ์ถ