CustomSwitch button์ ๋ํ๋๋ฐ, ๊ฐ์๊ธฐ ์ค๋ฅ๊ฐ ๋ด๋ค. Error: Cannot run with sound null safety ์์๋ณธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ต์ฅํ ๊ฐ๋จํ๋ค. ๋ฉ๋ด์ฐฝ์์ Run (์๋๋ก์ด๋ ์คํ๋์ค ๊ธฐ์ค) > Edit Configurations ๊ทธ๋ฆฌ๊ณ --no-sound-null-safety ๋ผ๋ ๋ง์ Additional run args:์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊น๋ํ๊ฒ ํด๊ฒฐ~ ์๋์๊ฐ๋ ์ฝ๋๊ฐ ์ ๋์๊ฐ๋ค!!!
๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
์ฌ์ค, ๋ด๊ฐ ๊ธฐ์ตํ๊ณ ์ถ์ด์ ๋ง๋๋ ํฌ์คํ
๐
โ
git branch ๋ง๋ค๊ธฐ ์ฃผ๋ก ํฐ๋ฏธ๋์์ ๋ช
๋ น์ด๋ก ์ ์ด์ ์งํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ฃ ? ์ ๋ git ๋ง๋ค๋ ๋ช
๋ น์ด๊ฐ ๋๋ฌด ์ด๋ ต๊ฒ ๋๊ปด์ก๋๋ฐ ๊ณ์ ์ฐ๋ค๋ณด๋ ๋ช
๋ น์ด๊ฐ ์๋๋ฉด ๋ถํธํ ์ง๊ฒฝ์ด ๋ ๊ฒ ๊ฐ์์. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ฉด ๋ธ๋์น๋ฅผ ์์ฑํด์ ์ธ๋ถํํด์ ์์
ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ต๋๋ค. ์๋์ ๋ช
๋ น์ด๋ฅผ ๋ฃ์ด์ฃผ์๋ฉด branch๊ฐ ๋ง๋ค์ด์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ธ๋์น๋ก ๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋์ด์์ต๋๋ค. git checkout -b ํ์ฌ ์ด๋์ ์๋์ง ํ์ธํด๋ณด๊ณ ์ถ๋ค๋ฉด git branch ๋ฅผ ๋ฃ์ด๋ณด์๋ฉด ํ์ฌ ์ด๋ ๋ธ๋์น์ ์๋์ง ํ์ธํ์ค ์ ์์ด์ ๋ง์ฝ์ ๋ธ๋์น๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค?! ๊ทธ๋ฌ๋ฉด switch๋ฅผ ์จ์ฃผ๋ฉด ๋ฉ๋๋ค git switch โ
git branch ์ด๋ฆ ๋ณ๊ฒฝํ๊ธฐ ๋ธ๋์น๋ฅผ ๋ง๋ค์..
โช flutter / firebase ์ฐ๋ํ๊ธฐ ํ๋ฌํฐ์ firebase๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ด ํธ์
๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ ์ค๋ ๊ฑธ๋ ธ์ต๋๋ค ๐ firebase ์ฝ์์์ ์๋๋ก์ดํธ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค์ด์ฃผ๊ณ flutter ํ์ผ๋ก ๋์์์ app ํด๋์์ build.gradle ํ์ผ์ ํ์ํ ์ ๋ณด๋ค์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค. firebase๋ฌธ์ ๊ฐ ์์ธํ๊ฒ ์ค๋ช
ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ธ๊ฒ ์์ต๋๋ค. ๋ชจ๋ ํ์ผ๋ค ์
๋ฐ์ดํธ๋ฅผ ๋๋ด๊ณ ์ค๋ฅ๋ฉ์ธ์ง๋ฅผ ๋ง๋ฌ๋๋ฐ, flutter sdk๋ฒ์ ผ๊ณผ firebase ๋ฒ์ ผ์ด ์ํธ๊ฐ ์ ๋์์์ต๋๋ค. ์ด๋ด๋ android > app > build.gradle ํ์ผ์ midSdkVersion๊ณผ targetSdkVersion์ ์๋์ ๊ฐ์ด ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ซ์๋ง ๋ํด์ฃผ๋ฉด ๋๋๋ฐ ์ ๊ทธ๊ฑธ ๋ชจ๋ฅด๊ณ ์์ฒญ ํด๋งธ..
โช Literal types const userName1 = "Bob"; let userName2 = "Tom"; const๋ ์์๋ก ๋ณํ์ง ์๋ ๊ฐ์ ์ ์ธํ ๋, let๋ ์ฌํ ๋น์ด ๊ฐ๋ฅํ ๊ฐ์ ์ ์ธํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ ์ํ์์ VSC๊ฐ์ ์๋ํฐ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ณด๋ฉด const๋ "Bob"์ด๋ผ๊ณ ์ ์ธ ๋ ๊ฐ์ด ๋จ๊ณ , let์ let userName2 : string์ด๋ผ๋ ํ์
๊ฐ์ด ๋น๋๋ค. let์ ์ธ์ ๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. userName2 ์ ์ซ์๋ฅผ ๋ฃ๊ณ ์ถ๋ค๋ฉด? let userName2 : string | number = "Tom"; ์ด๋ ๊ฒ ํ์
์ ๋ ๋ค ๋ช
์ํด์ค๋๋ค. type Job = "police" | "developer" | "teacher"; interface User..
โช React๋ NextJS๋ฅผ ์ด์ฉํด์ SSR์ ํ ์ ์์ต๋๋ค. โช Static Generation vs Server-side Rendering pre-rendering(์ฌ์ ๋ ๋๋ง) ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํ์ด์ง pre-render - ์ฌ์ ์ HTML ํ์ผ๋ค์ ๋ง๋ ๋ค๋ ์๋ฏธ๋ก ํผํฌ๋จผ์ค๋ฅผ ํฅ์์ํค๊ณ SEO์ ์ต์ ํ๋๋ต๋๋ค. Javascript์ ๋๊ณ ํ์ด์ง๋ฅผ ๋ ๋๋ง์ ํด๋ HTML์ด ๋ ๋๋ง๋๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ํ์ด์ง๊ฐ ๋ก๋๋ฉ๋๋ค. ์ฌ๊ธฐ์ Javascript์ ๋ณต์์์ผ์ฃผ๋ฉด hydration์ด ๋๋ค๊ณ ํฉ๋๋ค. ์ ์ ์ธ ํ์ด์ง๊ฐ ๋์ ์ผ๋ก ๋ฐ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค Static Generation : ์ ์ ์์ฑ vs Server-side Rendering : ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ด ๋ ๊ฐ์ง์ ์ฐจ์ด์ ์ ์ธ์ HTML ์ ๋ง๋๋์
๋..
1. ๋ฐ๋ฒจ(babel)์ด๋? โช ๋ธ๋ผ์ฐ์ ๋ ํ๋ซํผ๋ง๋ค ๋ณด์ฌ์ง๋ ๋ชจ์ต์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ฌํ ์ฐจ์ด๋ฅผ ์ต์ํํ์ฌ ๋ธ๋ผ์ฐ์ , ํ๊ฒฝ์ ์ํฅ์ ๋ ๋ฐ๊ณ ํด๋น ์น ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์ต์ ํ๋ฅผ ํ๋ ์์
์ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ด๋ผ๊ณ ํ๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๋ ์ฝ๋์ ์ผ๊ด์ฑ๋ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ ํผ๋์ค๋ฝ๊ฒ ํ๋ ์์ ์ค์ ํ๋์ด๋ค. ์ด๋ฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง ํด์ด ๋ฐ๋ฒจ์ด๋ค! ES6+ ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์
์คํฌ๋ฆฝํธ, JSX ๋ฑ ๋ค๋ฅธ ์ธ์ด๋ก ๋ถ๋ฅ๋๋ ์ธ์ด๋ค์ ๋ํด์๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ ์ ์๋๋ก ํธํ์ฑ์ ์ง์ผ์ค๋ค. ์ฝ๋๋ฅผ ๋ณํ์ํค๋ ํธ๋์คํ์ผ๋ฌ์ ์ญํ ์ ํ๋ค. ๋ฐ๋ฒจ ์ค์ ์ ํ ๋ ๋๊ฐ์ง๋ก ๋๋ฉ๋๋ค. ๋๊ฐ์ง ํ์ผ ํฌ๋งท์ ๋จ๋
์ผ๋ก ์ฐ์ผ ์๋ ์๊ณ , ํจ๊ป ์ฐ์ผ ..
{ "presets": ["next/babel"] } github์์ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ํ์ npm installํ๊ณ npm run build๋ฅผ ํ๋๋ฐ, SWC failed to load ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๊ทธ๋ฆฌ๊ณ https://nextjs.org/docs/messages/failed-loading-swc ์ฌ๊ธฐ๋ฅผ ๋ฐฉ๋ฌธํด๋ณด๋ผ๋ ๋ฉ์ธ์ง๊ฐ ๋ ์ ๋ดค๋๋ node modules๊ณผ package-lock.json์ ์ง์ฐ๊ณ ๋ค์ npm install์ ํ๊ฑฐ๋, ๊ทธ๋๋ ์ค๋ฅ๊ฐ ๊ณ์๋๋ฉด .babelrcํ์ผ์ ๋ง๋ค์ด๋ผ๊ณ ํ๋ค. ์ฒซ๋ฒ์งธ ๋
ธ๋ ๋ชจ๋์ ์ง์ ๋๋ฐ๋, ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋ ์๊ฒจ์ ํ๋ก์ ํธ ์์ฒด๋ฅผ ๋ค์ ํด๋ก ๋ฐ๊ณ , babelrc ํ์ผ์ ๋ง๋ค์ด์คฌ๋ค! ์๋์ ๊ฐ์ด ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค. ํ์ผ์ ์์น๋ ์ต์๋จ์ด๋ค! .babelrc { "..
โช ์์ฑ ํ ๋ ์ด์์ ์ ๋ ์ด์์์ ๋ง๋ค์ด์ผํ๋๋ฐ, ์ ์ฒด์ ์ผ๋ก ๊ฐ์ผ Container ๊ฐ ์๊ณ , ๊ทธ ์์ Column๋ก ํ๋ฒ ๋ ๊ฐ์ธ๊ณ , ๊ฐ ๋ ์ด์์์ ๋ง๋ค๊ธฐ ์ํด์ ์ค๊ณ ๊ณํ์ ์ธ์ ๋ค. Column( children: [ 1. Container - ํ๊ต ์ด๋ฉ์ผ์ด๋ผ๋ Text๋ฅผ ์ธ ๊ฒ 2. Row - TextFormField(์ด๋ฉ์ผ input) , OutlinedButton(์ธ์ฆํ๊ธฐ) 3. SizedBox - input ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ํด์ 4. TextFormField - ์ธ์ฆ๋ฒํธ ์
๋ ฅ input 5. OutlinedButton - ๋ค์ ๋ฒํผ ] ) โช ๋ฌธ์ ๋ฐ์ 1์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์ด๊ฐ ๋ ์ฐ์ Row๋ฅผ ์ ์ฐ๊ณ , TextFormField๋ฅผ ๋จผ์ ์ผ๋๋ฐ ํ๋ฉด์ ์ถ๋ ฅ์ด ์ ๋๋๊ฑฐ๋ค! ์ด ์ ์ ์ ํ๋ฒ ..
React Project๋ฅผ ์
๋ฐ์ดํธํ๋ฉด์ Reducer์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฌ ๋ ์๊ฒจ๋ ์ค๋ฅ์ด๋ค. Reducer store์ ์ ์ฅ๋์ด์๋ ๋ฐ์ดํฐ๋ฅผ useSelector๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด๋๋๊ฑด๋ฐ, ์ด์ ์๋ ์ ๋๋๋ฐ ๊ฐ์๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค์ง ๋ชปํด์ undefined ์ํฉ์ด ๋ฐ์ํ๋ค. ๊ทธ๋์ ์๊ธด ์ค๋ฅ์ด๋ค. React ํ์ผ ์ผ๋ถ, let scoreMention = ""; if(userInfo['scorelist'] == null){ return null }else{ if(userLan === "kr"){ Object.keys(userInfo['scorelist']).map((c, idx) => { if (scoreper >= parseInt(c)) { return (scoreMention = use..
ํ๋ฌํฐ์์๋ route๋ผ๋ ๊ฐ๋
์ผ๋ก ํ์ด์ง ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด ๋ ์ด๋ํ ๊ณณ์ page๋ผ๊ณ ์๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๊ตณ์ด ํ์ผ์ ๋ฐ๋ก ๋๋์ง ์์๋ ๊ฐ์ ํ์ผ ์์์ page๋ง ๋๋ ์ฃผ๋ฉด ๋ฉ๋๋ค. ์ฐธ ์ฝ์ฃต? ๐ ์ด๋ ํ ๋ ์ฐ๋ ๊ฒ์ผ๋ก๋ Navagator ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค. main.dart Container( margin: EdgeInsets.only(top: 100, left: 0), width: 100, child: IconButton( icon: Text('Signup', style: TextStyle(fontSize: 20),), onPressed: (){ Navigator.push(context, MaterialPageRoute(builder: (context) => SignUpPage(..
ํ
์คํธ์ฝ๋๋ ์ ์ค์ํ๊ฐ์? ํ
์คํธ์ฝ๋๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ ๋, ํน์ ๋ฆฌํฉํ ๋ง์ ํ์ง ์์๋ ์ค์ํ ์กด์ฌ์
๋๋ค. ๋ฆฌํฉํ ๋ง์ ํ ๋์๋ ํ
์คํธ์ฝ๋๋ฅผ ์ง๋๊ณ ๋ฆฌํฉํ ๋ง์ ํ๋ฉด ํ๊ธฐ ์ ๊ณผ ํ์ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ธ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ๋์์ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ด ์ ๋๋ก ๋์ํ์ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ ํ
์คํธ์ฝ๋๋ฅผ ๋ง๋ค์ด๋๋ฉด ์ ์ง๋ณด์ํ ๋ ์์์น ๋ชป ํ ์๋ฌ๋ค์ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ๊ฐ ์์ต๋๋ค. ๋ค์ํ ๊ฐ๋ฐ์์ ์์๋ ์ด ์ค์์ฑ์ ๊ต์ฅํ ๊ฐ์กฐํ๊ณ ์์ต๋๋ค. React Testing Library๋ ์ธ๋ถ์ ์ธ ๊ตฌํ์ฌํญ๋ณด๋ค๋ ์ค์ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ ์ฌํ ๋ฐฉ์์ ํ
์คํธ๋ฅผ ์์ฑํ๊ธฐ๋ฅผ ๊ถ๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด์ div ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋์ง ๋ณด๋ค div ํ
๊ทธ์ ๋ฉ์ธ์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ ๋
ธ์ถ..
๋ฐ๋ณต๋๋ ๋ถ๋ถ์ ์์ ์ฐ์ง ์๊ณ ๋ฐ๋ณตํด์ ๋ง๋ค ์ ์๋ค. ์ด ๋ ์ธ ์ ์๋ ๊ฒ์ด ListView.builder ์ด๋ค. โพ Example ์ง๊ธ๋ถํฐ ๋ง๋ค์ด ๋ณผ ๋ถ๋ถ์ธ๋ฐ ๋ณด๋ผ์์ด list_view๋ถ๋ถ์ด๊ณ icons๊ฐ ํ๋์๋ถ๋ถ์ด๋ค โพ Code list_view์ ๋ฐ๋ณต๋๋ ๋ถ๋ถ์ ๋ฐ๋ก ํ์ผ(icons.dart)๋ก ๋นผ์ ๋ํ๋๊ฑฐ๋ค. list_view.dart Container( margin: EdgeInsets.only(top: 10, bottom: 20), child: Text('${descList[index]}'), ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${majorList[index]}', style: T..