ListView.builder์ ์ฌ์ฉํด์ ๊ตฌํํ๋ค๊ฐ ๋ณธ ๋ง์ฃผํ ์๋ฌ์ด๋ค. ๋ฆฌ์คํธ๋ฅผ 5๊ฐ ์ ๋๋ฅผ ๋ง๋ค์ด์ ๋ฐ๋ณต์์ผฐ๋๋ฐ ์๋ฎฌ๋ ์ดํฐ ํ๋ฉด์ ๋
ธ๋ ๋ฐํ์ ์์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฌ๋ค. โพ ํด๊ฒฐ๋ฐฉ์ @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('์์ ์ฒด์กํ๊ณผ'), centerTitle: true, backgroundColor: Colors.white, elevation: 0, leading: IconButton( icon: Icon(Icons.arrow_back), color: Colors.grey, iconSize: 25.0, onPressed: () {}, ), actions: [ Container..
๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
๐ฉ๐ป Today I Learned ๐ โพ ์ ์ฒ๊ธฐ ์ํ์ด ์ฝ์! ์ ์ฒ๊ธฐ ์ํ์ด ์ฝ์์ด๋ค!!! =_ = ํ๋ฌํฐ ๊ณต๋ถํ๊ณ ์ด๋ ฅ์ ๋ฃ๊ณ ์ ์ ์์ด ์ด๊ฒ์ ๊ฒํ๋๋ ์ด๋์ ์ฝ์์ด๋ค!!! ๋๋์ด ๋ฌตํ๋๋ ์ฑ
์ ์คํํ๋ค!!! ์ค๋ 1๊ณผ๋ชฉ ๋
ํ!!!!!!!!!!! ๋ฉด์ ์ค๋นํ๋ฉด์ ๋ดค๋ ๋คํธ์ํฌ , ์ด์์ฒด์ ๊ด๋ จ ์ด์ผ๊ธฐ๋ค์ ๋ค์ ์ฑ
์์ ๋ณด๋ ๋์ด ํ๊ธ๋๋ ๋๋... ์ผ์ฃผ์ผ๋์ ๊ฐ๋จํ ์์ ๋ค์ ๋น ๋ฅด๊ฒ ํ์ผ๋ฉด์ ๊ณต๋ถํ๋๊ฒ ๋ชฉํ๋ค! ๋ค์์ฃผ๋ ๊ธฐ์ถ๋ฌธ์ ๋ก ๋ฐ๋ฐ๋ฐ๋ฐ๋ฐ! ๊ณต๋ถ! โพ ๋ด์ผ - ํ๋ฌํฐ ๊ณผ์ ์์ - ์ ์ฒ๊ธฐ 2๊ณผ๋ชฉ ๋
ํ! - ๋ฉด์ ๊ณต๋ถ
1์ฐจ์ ๋ฐฐ์ด์์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค! set, filter, reduce ๋ฑ ์ํฉ์ ๋ฐ๋ผ์ ๋ค์ํ๊ฒ ์ธ ์ ์๋๋ฐ, ํ๋ก์ ํธ๋ฅผ ํ๋ค๊ฐ ๋ฐฐ์ด ์ค๋ณต ์ ๊ฑฐ ํ ์ผ์ด ์์๋๋ฐ, ์๋ฌด๋ฆฌ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ํด๊ฒฐ์ด ์๋๋๊ฒ์ด๋ค!! ใ
ใ
1์ฐจ์ ๋ฐฐ์ดํ๋ฏ์ด ํ๋ฉด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ฌ๊ฑธ?!? ์๋ set, filter, indexOf ๋ฑ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์๋ค. ๋จ์ง 1์ฐจ์ ๋ฐฐ์ด๋ณด๋ค ์ด์ง ์ฝ๋๊ฐ ๋ณต์กํด์ง ๋ฟ์ด๋ค. ๊ณ์ set์ผ๋ก ์๋ํ์๋๋ฐ....ใ
ใ
....๋ด ์๊ฐ ... ใ
..... ์ฐ์ , 2์ฐจ์ ๋ฐฐ์ด์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ค์ผํ๋ค. let a = [ [1, 2], [3, 4], [5, 6], [3, 4], ]; function arr(_arr) { return [...new Set(_..
โพ ์๋ก์ด ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ run์ ํ๋๋ ์ด๋ฐ ์ฝ์์ฐฝ์ด ๋ด๋ค. Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until you switch to the new API, your app will behave as if it's running React 17. Learn more: https://reactjs.org/link/switch-to-createroot โพ ๋ฆฌ์กํธ 18์์๋ ReactDOM.render๊ฐ ์๋๋ผ, createRoot๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ํ๋ค. ๊ทธ๊ฒ ๋ญ์ง? ๋ผ๋ฉฐ... ๊ณต์๋ฌธ์ ๋ณด๋ฌ ๊ณ ๊ณ - https://ko.reactjs.org/docs/concurrent-mode-r..
ํ๋ฌํฐ๋ก ์ฝ๋๋ฅผ ์ ์ด๋ด๋ ค๊ฐ ๋๋ฉด ๊ณ์ํด์ ๋ณด๊ฒ๋๋ ๋จ์ด, BuildContext ... ๊ทธ๋ฅ ๋จ์ํ๊ฒ context๋ผ๋ ์ด๋ค ์ธ์๋ฅผ ๋ฐ๋ ๋ฉ์๋๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ฝ๋ฉ์
ฐํ๋์ด ์ฌ๊ธฐ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๊ฐ์๋ฅผ ๋ง๋์
จ๋ค. ์ฌ์ ํ ์ ์ดํด๋ ์ ๋์ง๋ง ์ฝ๋ฉ์
ฐํ๋์ ์ด์ผ๊ธฐ๋ฅผ ๊ฐ๋จํ๊ฒ ์์ฝํด๋ณด์๋ค โพ A handle to the location of a widget in the widget tree ์์ ฏ ํธ๋ฆฌ์์ ํ์ฌ ์์ ฏ์ ์์น๋ฅผ ์ ์ ์๋ ์ ๋ณด ๋ชจ๋ Widget์ BuildMethod๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ฏ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. Buildmethod๋ scaffold๋ฅผ ๋ฆฌํดํ๋๋ฐ context(์ธ์๊ฐ)์ ๋ฃ์ด์ ํ๋ค. โพ Each widget has its own BuildContext, which b..
โพ ์์ฑ๋ชจ์ต ์์ ์์ด์ฝ์ ๋ฃ์ด์ ๋ง๋ ๋ฉ๋ด์ ํ๋ฒ๊ฑฐ ๋ฒํผ์ ๋๋ ์ ๋ ์ฌ์ด๋๋ก ์ด๋ฆฌ๋ ๋ฉ๋ด๋ฅผ ๋ง๋ค์์ต๋๋ค! flutter์์๋ drawer์ด๋ผ๋ ๊ฒ์ผ๋ก ์ฝ๊ฒ ๋ง๋ค ์ ๊ฐ ์๋ต๋๋ค! โพ ๊ธฐ๋ณธ ๊ตฌ์ฑ drawer ์ ๋ง๋ค๊ณ , ๊ทธ ์์ ์์ ์์ ฏ(child)์ผ๋ก ListView๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ๊ทธ ์์ ์์ ฏ ์์ ๋ ๋ค๋ฅธ ํ์ ์์ ฏ(children)์ ์์ฑํด์ค๋๋ค. ListView๋ ๋๊ฐ์ง๋ก ๊ตฌ์ฑ์ด ๋ฉ๋๋ค. ์ผ๋จ Header๋ถ๋ถ์์ ๊ณ์ ์ด๋ฆ, ํ๋กํ ์ฌ์ง ๋ฑ์ ๋ฃ์ด์ฃผ๊ณ , ๋ค๋ฅธ ํ์ด์ง๋ก ๋์ด๊ฐ ์ ์๋ ๋ฉ๋ด๋ฅผ ListTile์ด๋ผ๋ ์ด๋ฆ ์๋ ์์ฑํด์ค๋๋ค ListTile๊ตฌ์ฑ์ ๋ณด์๋ฉด onTap์ด ์๋๋ฐ, ์ด ๋ถ๋ถ์ ๋์ค์ ๊ฐ๋ฉด ๋ ๊น๊ฒ ๊ณต๋ถํ ์์ ์ด์ง๋ง ๊ฐ๋จํ๊ฒ onPressed์ ๋น๊ตํด๋ณด์๋ฉด onPressed๋..
โพ ์์ฑ ๋ชจ์ต โพ code class Grade extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.amber[800], appBar: AppBar( title: Text('BBANTO'), centerTitle: true, backgroundColor: Colors.amber[700], elevation: 0.0, //left side leading: IconButton( icon: Icon(Icons.menu), onPressed: () { print('menu button is clicked'); }, ), actions: [ IconButton( ..
1. Flutter์์ ์์ ฏ์ด๋? UI๋ฅผ ๋ง๋ค๊ณ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๊ธฐ๋ณธ ๋จ์ ์์๋ฅผ ์์ ฏ์ด๋ผ๊ณ ํฉ๋๋ค. ๋์ ๋ณด์ด๋ ์์๋ฟ๋ง ์๋๋ผ ๋ณด์ด์ง ์๋ ์์๋ค๊น์ง๋ ์์ ฏ์ด๋ผ๊ณ ํฉ๋๋ค. ํ๋ง๋๋ก Eveything is Widget. 2. ์์ ฏ ํ์
Stateless widget ์ํ๊ฐ ์๋ ์ ์ ์ธ ์์ ฏ์ ๋ปํฉ๋๋ค. ์คํฌ๋ฆฐ์์ ์กด์ฌ๋ ํ์ง๋ง ์๋ฌด๊ฒ๋ ๊ฐ์ง์ง ์๊ณ , ์ค์๊ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ชปํ๋ ์์ ฏ์
๋๋ค. ์ด๋ ํ ์ํฑ๋ฅผ ์ ๋ฐํ๋ value ๊ฐ๋ ๊ฐ์ง์ง ์๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด์ image, text Stateful widget ์ด๋ค ์ํ๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ ์์ง์์ด๋ ๋ณํ๊ฐ ์๋ ์์ ฏ ์ฌ์ฉ์ ์ธํฐ๋์
์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ ์์ ฏ์
๋๋ค. ์๋ฅผ ๋ค๋ฉด input, checkbox 3. ์์ ฏ ๊ตฌ์ฑ(ํธ๋ฆฌ) ์์ ์ค๋ช
์ฒ๋ผ ๋ง์ ์์๋ค์ด ์..
โพ i18n ์์ํ๊ธฐ ์น์ฌ์ดํธ ํน์ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ค์ํ ์ธ์ด๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ์๋์ ๊ณต์ ์น ํ์ด์ง๋ฅผ ๋ณด๋ฉด ๋ ๋ง์ ์ด์ผ๊ธฐ๋ฅผ ํ์ธํ ์ ์๋ค. ๊ฐ๋จํ๊ฒ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง๋ง ์ ๋ฆฌํด ๋ณผ ์์ ์ด๋ค. ๊ณต์ ์นํ์ด์ง ๐ https://react.i18next.com/getting-started ์ค์นํ๊ธฐ npm install react-i18next i18next --save โพ ์ ์ฉํ๊ธฐ ๋ณดํต ํ์ผ ํ๋์ ๋ค ์ ์ ๊ฐ๋จํ ์์ ๋ค์ด ๋ง์์ ์กฐ๊ธ ํค๋งธ๋๋ฐ, ์ฐ์ ๋๋ถ๋ถ ํ๋ก์ ํธ์ ์ ์ฉํ ๋ ํ์ผ์ ๋ฐ๋ก ๋นผ์ ๋ถ๋ฆฌํด๋๊ธฐ ๋๋ฌธ์ ๋๋ ๊ทธ๋ ๊ฒ ํ๋ค. src ํด๋ ์๋์ language ๋ผ๋ ํด๋๋ฅผ ๋ง๋ค์ด์ i18n.js๋ฅผ ๋ง๋ค์๋ค. ์์ด๋ฒ์ ผํ๊ณ ํ๊ตญ์ด ๋ฒ์ ผ๋ง ์์ผ๋ฉด ๋๊ธฐ๋๋ฌธ์ ๋ฒ์ญ ์คํฌ๋ฆฝํธ๋ en...
๐ฉ๐ป Today I Learned ๐ โพ Web portfolio update ์ ์ ์ทจ์
์ค๋นํ๋ฉด์ ๋ง๋ค์ด๋ web portfolio๋ฅผ ๋ค์ ๊บผ๋ด ๋ค์๋ค. HTML, CSS, Javascript๋ก ๋ง๋ค์๋ ๋์ ์ฒซ ๋ฒ์งธ ์น ํฌํธํด๋ฆฌ์ค. ์ด๋ ์์ด ๋ฒ์ ๋ ํจ๊ป ๋ง๋ค์์๋๋ฐ, ํ๊ตญ์ด ํ์ด์ง๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ์์ด ํ์ด์ง๋ฅผ ๋ฐ๋ก ๋ง๋ค์์๋ค. ์ด๋๋ ์ด ๋ฐฉ์์ด ์ต์ ์ด๋ผ๊ณ ๋ ๊ฐ๋ฅด์ณ์ฃผ์ ๋ถ์ด ๊ทธ๋ฌ์
จ์..... ํ์ง๋ง ๊ทธ๊ฒ ์๋!!!!! i18next ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ฉด ๋๋๋ฐ!! ๊ทธ๋ฌ๋ฉด ํจ์ฌ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์๋๋ฐ, ํฌํธํด๋ฆฌ์ค๋ฅผ ์๋กญ๊ฒ ์
๋ฐ์ดํธํ๋ ค๊ณ ์ค๋นํ๋ฉด์ ์ด ๋ถ๋ถ๊น์ง ๊น๋ํ๊ฒ!! ๋ค์ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ค. ํ๋ค ๋ณด๋ ๋ญ๊ฐ ์์ ํด์ผ ํ ๊ฒ๋ค์ด ์ ์ ์์ฌ์ ๋ด์ผ๊น์ง ๊ณ์ํด์ผ ํ ๋ฏํ์ง๋ง ์ค๋๋ง์ ์ ์ด ๋๋ค ~~ ์ฝ๋..
Instructions Write a function that takes a string of parentheses, and determines if the order of the parentheses is valid. The function should return true if the string is valid, and false if it's invalid. Examples "()" => true ")(()))" => false "(" => false "(())((()())())" => true Constraints 0
์ด ๋๊ฐ์ง์ ์ฐจ์ด์ ์ ์ค์ ์ํ์์ ์ฌ์ฉํ ํจํค์ง์ ๊ฐ๋ฐ์ฉ ํจํค์ง์ ์ฐจ์ด์ด๋ค. ๊ฐ๋ฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ devDependencies์ ์ ์ด์ฃผ๊ณ , ์ง์ง ๊ธฐ์ ์คํ์ผ๋ก ์ฌ์ฉ๋์ด์ผ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ dependencies์ ์ค์นํด์ค๋ค. ์ฆ, ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ๋ก์ ํธ์ ์ปดํ์ผ(๋น๋)ํ์์ ํ์ํ๋ฉฐ, devDependencies์ ๋ฃ๊ณ , ๋ฐํ์์๋ ๊ณ์ ์ฐ์ด๋ ๊ฒ์ด๋ฉด denpendencies์ ๋ฃ๋๋ค. ๊ตฌ๋ถํด์ ์ ์ฅํ๋ ์ด์ ๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐฐํฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ๋ถํ๋ ์ด์ ๋ ์ดํ์ ๋น๋ํ๊ณ ๋ฐฐํฌํ ๋, dev์ ๋ค์ด๊ฐ๋ ๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌํจ์ํค์ง ์๊ณ ๋น๋ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ๋๋ฌธ์ ์ดํ์ ๋ก์ง๊ณผ ์ฐ๊ด์ด ์๋ค๊ณ ํ๋จ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด devDependencies์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ์ข๋ค.