๐Ÿ‹ Flutter

๊ฐœ์š”์„œ๋ฒ„์šฉ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์— Code-Server๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์ฝ”๋”ฉ์— ๋Œ€ํ•œ ์ œ์•ฝ ์‚ฌํ•ญ์ด ๋งŽ์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค.์•„์ดํŒจ๋“œ์—์„œ ๋‚ด ๊ฐœ์ธ Code-Server๋กœ ์ ‘์†ํ•˜์—ฌ NodeJS API ๊ตฌํ˜„์„ ํ•˜๋Š” ๋“ฑ, ๊ฐœ๋ฐœ ์ทจ๋ฏธ์— ๋Œ€ํ•œ ์ž์œ ๋„๊ฐ€ ๋งŽ์ด ๋†’์•„์กŒ๋‹ค. (๋””์Šค์ฝ”๋“œ ๋ด‡๋„ code-server๋ฅผ ํ†ตํ•ด ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌํ˜„ ์™„๋ฃŒ). Code-Server ๋งŒ์„ธ!!!!์š”์ฆ˜์— Flutter Web์„ ํ†ตํ•ด ์ด๋Ÿฐ์ €๋Ÿฐ ์‹คํ—˜์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, Flutter Web๋„ Headless-server๋ฅผ ๊ทผ๋ณธ์œผ๋กœ ํฌํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ Chrome์ด๋‚˜ ๊ธฐํƒ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋””๋ฒ„๊ทธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๋Š” ๋“ฏํ–ˆ๋‹ค.๊ทผ๋ฐ ์ด ๋…€์„, ๋งŒ์•ฝ ์™ธ๋ถ€์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด๋ผ๋ฉด, Code-Server๋ฅผ ํ†ตํ•ด์„œ๋„ ์ถฉ๋ถ„ํžˆ Flutter ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์–ด๋–จ๊นŒ?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด..
1) ๊ฐœ์š” ํ”Œ๋Ÿฌํ„ฐ๋ฅผ ์ž…๋ฌธํ•œ ์ง€ ์–ด๋Š๋ง 3๋…„ ์ฐจ๊ฐ€ ๋˜์–ด๊ฐ„๋‹ค. ๊ทธ๋™์•ˆ ์ƒํƒœ๊ด€๋ฆฌํˆด๋กœ์จ Provider๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ด ์™”์—ˆ์ง€๋งŒ ์–ธ์  ๊ฐ€๋Š” Deprecated ๋œ๋‹ค๋Š” Provider์˜ ์ฐฝ์‹œ์ž์˜ ๋ง์— ์ถฉ๊ฒฉ์„ ๋ฐ›๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒํƒœ๊ด€๋ฆฌํˆด์„ ์ตํ˜€์•ผ ๋  ๋•Œ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์•„ ์•Œ์•„๋ณด๋˜ ๋„์ค‘ GetX์™€ BLoC์— ๋ˆˆ์„ ๋“ค์ด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ GetX์˜ ๊ฒฝ์šฐ์—” 10๊ฐœ์›”์งธ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ค„์ง€์ง€ ์•Š๊ณ  ์žˆ๊ณ  BLoCํŒจํ„ด์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ์— ์–ด์šธ๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ ๋‚œ์ด๋„๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์œผ๋กœ Provider์˜ ๊ณ„์Šน์ž์ธ RiverPod์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. RiverPod ์€ Provider์˜ ์ฒ ์ž์—์„œ ์ˆœ์„œ๋งŒ ๋ฐ”๋€ ๋‹จ์–ด์ด๋ฉฐ Provider์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜, ์—ฌ๋Ÿฌ ๋ฌธ์ œ์ ๋“ค์„ ์ตœ๋Œ€ํ•œ ๊ฐœ์„ ํ•˜์—ฌ RiverPod์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜์—ˆ..
์ตœ๊ทผ์— ํ† ์ดํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰ ์ค‘์ธ Flutter Web ์‚ฌ์ดํŠธ์˜ ๋ฒ„์ „์„ ๋ฐ”๊พธ๊ฒŒ ๋  ์ผ์ด ์ƒ๊ฒจ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ ค ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ตœ์‹ ๋ฒ„์ „์„ ๋ฐ˜์˜ํ•œ ์ดํ›„ Flutter web์˜ ๋นŒ๋“œํŒŒ์ผ์„ ์„œ๋ฒ„์— ์ ์šฉ์„ ํ•œ ํ›„ ์ ‘์†์„ ํ•ด๋ณด๋Š”๋ฐ ์บ์‹œ ๋œ ์ด์ „ ํŽ˜์ด์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ณด์ด๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•ด ๋ณด๋‹ˆ ํ”Œ๋Ÿฌํ„ฐ ์›น์€ main.dart.js๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ ์ด ํŒŒ์ผ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด๋‹ค ๋ณด๋‹ˆ ๊ฐฑ์‹ ์„ ํ•˜๋ ค๋ฉด ์ฟผ๋ฆฌ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฒ„์ „์„ ์˜ฌ๋ ค์ค˜์•ผ ์‹ ๊ทœ main.dart.js๋ฅผ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ธ์‹์„ ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. 1.Flutter Web์„ ๋นŒ๋“œํ•œ๋‹ค (flutter build web --web-renderer canvaskit --release) 2. ์ดํ›„ ๋นŒ๋“œ๋œ ํด๋”์— ์ด..
๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์‚ฝ์งˆํ•ด์„œ ๊ฒจ์šฐ ์•Œ์•„๋‚ธ ์˜ค๋ฅ˜ ํ•˜๋‚˜๋ฅผ ์žก๊ฒŒ ๋˜์—ˆ๋‹ค. ์›์ธ์€ Flutter์˜ ์™ธ๋ถ€ dependency์ธ flutter_sounds๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์ถ”๊ฐ€๋ฅผ ํ•œ ๋‹ค์Œ IOS์—์„œ ๋นŒ๋“œ๋ฅผ ํ•˜๋ ค ํ•˜๋Š”๋ฐ deploy๋ฒ„์ „์ด ์•ˆ ๋งž๋Š” ๋“ฑ ๊ฐ์ข… ์˜ค๋ฅ˜๊ฐ€ ํญ๋ฐœํ•˜๋‹ค๊ฐ€ flutter clean ๋˜๋Š” IOS ํด๋”๋ฅผ ํ†ต์งธ๋กœ ์ง€์šฐ๊ณ  flutter create . ๋ฅผ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ํ•ด๋ดค๋‹ค. ๋ฌผ๋ก  ํ•ด๊ฒฐ์€ ์•ˆ ๋๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์ง๋ฉดํ•œ ์˜ค๋ฅ˜๊ฐ€ Undefined symbol: ___gxx_personality_v0 ์ธ๋ฐ Xcode ๋‚ด์—์„œ ๋นŒ๋“œ๋ฅผ ํ•˜์—ฌ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ๋˜ ๊ฒƒ์„ ๋ณด์•˜๋‹ค. ๊ตฌ๊ธ€์— ์—ฌ๊ธฐ์ €๊ธฐ ์ฐพ์•„๋ณด๋‹ˆ ๊นƒํ—ˆ๋ธŒ์—์„œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์˜ฌ๋ ค์ค€ ๊ฒƒ์„ ๋ณด์•˜๊ณ  M1 ๋งฅ๋ถ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋กœ ๋ณด์˜€๋‹ค. IOS buildSetting์—..
์ด๋ฒˆ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ด๋Š” ์œ„์ ฏ์„ ๊พธ๋ฏธ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. Row์•ˆ์— Text๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ ๊ธ€์ž ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์„ ๊ฒฝ์šฐ ์ž˜๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ๊ฒฌํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค. Text์†์„ฑ์— overFlow ์˜ต์…˜์„ ์ ์šฉํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ•์€ ๋ถ€๋ชจ ์œ„์ ฏ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ง€์ •๋˜์–ด์•ผ ์ž˜๋ฆฌ๋Š” ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์€ ๋ฐฉ๋ฒ•์ด Flexible์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. Row๋‚˜ Column ์œ„์ ฏ์—์„œ ๋‚จ์€ ์ž๋ฆฌ๋ฅผ ์ „๋ถ€ ์ฑ„์šฐ๋„๋ก ์„ค์ •ํ•˜๋Š” ์œ„์ ฏ์ธ๋ฐ, ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ Flexible์„ ๋ถ€๋ชจ๋กœ์„œ ๊ฐ์‹ธ์ฃผ๋ฉด ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Row( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '์ด๋ฆ„:'..
์ด๋ฒˆ์— FutureBuilder๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒํ–ˆ๋‹ค. snapshot.hasData ์™€ snapshot.hasError๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ Future ํ•จ์ˆ˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด hasError๋กœ ๋„˜๊ฒจ ์˜ค๋ฅ˜ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ hasData๋Š” ์ž˜ ๋ถˆ๋Ÿฌ์™€๋„ hasError๋Š” ์ž‘๋™์ด ์•ˆ ๋˜๋˜ ๊ฒƒ์ด๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ StackOverflow์—์„œ ๋‚˜๋ž‘ ๋น„์Šทํ•œ ์‚ฌ๋ก€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ๋‚˜์™€ ๊ฐ™์€ ์ผ€์ด์Šค์ด๋‹ค. try { var response = await http.get(url); // Success if (response.statusCode == 200) { [...] } // Failure else { return Future.error("Error"); } } catch (e) ..
Dogfoot_JW
'๐Ÿ‹ Flutter' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)