๐Ÿฆ„ front

[SSAFYcial] Flutter CheckboxListTile ์Šคํƒ€์ผ ์ปค์Šคํ…€ํ•˜๊ธฐ

c0zi 2024. 9. 19. 14:43

์•ˆ๋…•ํ•˜์„ธ์š” ! SSAFYcial 11๊ธฐ ์ด์ง€ํ˜œ๊ธฐ์ž์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ํŠนํ™” ํ”„๋กœ์ ํŠธ์— Flutter๋ฅผ ์‚ฌ์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด์„œ, Style ์ปค์Šคํ…€์ด ํž˜๋“ค์–ด์„œ ๋‹ค์‹œ React๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์–ด์กŒ๋Š”๋ฐ์š”...

 

์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„ ๋Š˜ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋Š” ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ใ…Žใ…Ž

 

๊ทธ๋ž˜์„œ, ์ด๋ฒˆ ๊ธฐ์‚ฌ๋Š” Flutter ์Šคํƒ€์ผ ์ปค์Šคํ…€์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 


 

๋‚˜๋Š” ๋ชฉ์—…์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ๋ชฉ์ˆจ๊ฑฐ๋Š” ํ”„๋ก ํŠธ์ธ๋ฐ, ํ”Œ๋Ÿฌํ„ฐ์˜ ๊ฒฝ์šฐ ๊ธฐ์กด์— ์ž‘์—…ํ•˜๋˜ css๊ฐ€ ์•„๋‹ˆ์–ด์„œ์ธ์ง€, ์•„๋‹ˆ๋ฉด flutter ์ž์ฒด๊ฐ€ ์ปค์Šคํ…€์ด ์–ด๋ ค์šด ๊ฒƒ์ธ์ง€ ์ •๋ง ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค.

 

ํŠนํžˆ ํ”Œ๋Ÿฌํ„ฐ๋Š” ๋น„๊ต์  ์ตœ๊ทผ์— ์ธ๊ธฐ๋ฅผ ๋Œ๊ณ  ์žˆ๊ณ , ๊ทธ๋ž˜์„œ ์ฐธ๊ณ ํ• ๋งŒํ•œ ์ž๋ฃŒ๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค.

 

๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฐ”๊ฟ”๋‚˜๊ฐ„ ์ปค์Šคํ…€ ๋””์ž์ธ๋“ค์„ ๋ธ”๋กœ๊ทธ๋กœ ์ž‘์„ฑํ•ด flutter๋ฅผ ์ด์šฉํ•˜์‹œ๋Š” ๋ถ„๋“ค๊ป˜ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์ด ๋˜๋ ค๊ณ  ๊ธ€์„ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 


 

CheckboxListTile

์ด์ƒ๊ณผ ํ˜„์‹ค์˜ ์ฐจ์ด,,

 

Dropdown๋ฒ„ํŠผ์œผ๋กœ ๋ณต์ˆ˜์˜ ๋‚œ์ด๋„๋ฅผ ์„ ํƒํ•˜๊ฒŒ ํ•˜๋ ค ํ–ˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์–ด ๋ณด์—ฌ์„œ ๋ชจ๋‹ฌ๋กœ ๊ธ‰ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋ชจ๋‹ฌ ์ƒํƒœ๋ฅผ ๋ณด๋‹ˆ ๋„ˆ๋ฌด Css๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์–ด์ง€๋Š” ๊ธฐ๋ถ„์ด ๋“ ๋‹ค...

 

์ด๋Œ€๋กœ๋Š” ์•ˆ๋˜๊ฒ ์–ด์„œ ๊ธ‰ํ•˜๊ฒŒ ๋ชจ๋‹ฌ ์Šคํƒ€์ผ ์ปค์Šคํ…€์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ˆ˜์ • ์ „
1์ฐจ ์ˆ˜์ • ํ›„

 

activeColor๋ฅผ ํ†ตํ•ด ํ™œ์„ฑํ™”ํ–ˆ์„ ๋•Œ์˜ ์ฒดํฌ ๋ฐ•์Šค ์ƒ‰์„ ํ”„๋กœ์ ํŠธ ๋ฉ”์ธ ์ปฌ๋Ÿฌ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๊ณ , ์ฒดํฌ ๋ฐ•์Šค์— ๋ผ์šด๋“œ๋ฅผ ์ฃผ์—ˆ๋‹ค

 

activeColor: Color(0xff1EA6FC),
    checkboxShape: RoundedRectangleBorder(
    borderRadius: BorderRadius.circular(4),
),

 

 

ํฐ ๋ฐฐ๊ฒฝ ์„ค์ •

 

AlertDialog(
  backgroundColor: Colors.white,
)

 

AlertDialog์— ๋ฐฐ๊ฒฝ์ƒ‰๊นŒ์ง€ ์„ค์ •ํ•˜๊ณ  ๋‚˜๋‹ˆ ๊ทธ๋ž˜๋„ ์ข€ ๊ดœ์ฐฎ์€ ์ˆ˜์ค€์ด ๋˜์—ˆ๋‹ค.

 

์ถ”๊ฐ€ ์‚ฌํ•ญ

onChanged: (bool? isChecked) {
  if (isChecked == true) {
    // ๋ฆฌ์ŠคํŠธ์— ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ์„ ํƒ ์ถ”๊ฐ€
    if (conditionType == 'difficulty') {
      if (!controller.selectedDifficulty.contains(item)) {
        controller.selectedDifficulty.add(item);
      }
    } else {
      if (!controller.selectedDistance.contains(item)) {
        controller.selectedDistance.add(item);
      }
    }
  } else {
    // ์„ ํƒ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„ ํƒ ํ•ด์ œ
    if (conditionType == 'difficulty') {
      controller.selectedDifficulty.remove(item);
    } else {
      controller.selectedDistance.remove(item);
    }
  }
},

 

์ถ”๊ฐ€์ ์œผ๋กœ, ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๋‹ˆ CheckboxListTile์˜ onChanged ์ฝœ๋ฐฑ์—์„œ bool? isChecked ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

์ด์ „์— ํ•™์Šตํ•  ๋•Œ ?๋Š” nullable ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐฐ์› ๋Š”๋ฐ,

์ฒดํฌ ๋ฐ•์Šค์˜ ๊ฒฝ์šฐ true/false ์™ธ์— null์„ ์™œ ํ—ˆ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค.

 

์ฐพ์•„๋ณด๋‹ˆ ๋ถ€๋ถ„์„ ํƒ์ด๋‚˜ ๋‹ค์ค‘ ์„ ํƒ์„ ํ•˜๋Š” ๊ฒฝ์šฐ์— nullable checkbox๊ฐ€ ์ด์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ด๋ฉ”์ผ์—์„œ์˜ ์ „์ฒด ์„ ํƒ ์ฒดํฌ๋ฐ•์Šค์™€ ๊ฐœ๋ณ„ ์„ ํƒ ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์žˆ๋‹ค.

ํŠน์ • ์ด๋ฉ”์ผ์„ ์ผ๋ถ€๋งŒ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์— ์ „์ฒด ์„ ํƒ ์ฒดํฌ๋ฐ•์Šค์˜ ๊ฐ’๋Š” true์—ฌ์„œ๋„, false์—ฌ์„œ๋„ ์•ˆ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ƒ์œ„ ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ๋ถˆํ™•์ • ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.