Flutter/Flutter 개발 노트
[Flutter] 조건에 맞는 데이터 입력하기
힛해
2024. 2. 16. 08:32
728x90
백엔드와 통신으로 값을 받고 그 값들중에서 키값이 일치하는 값들만 받아서 저장해야하는 상황이 있었다.
내가 해결한 방식은 저장된 값의 길이만큼 반복문을 돌고 해당하는 키값을 배열에 저장하는 방식으로 해결했다.
해결방식
var pushData = context.watch<AlarmStore>().pushData;
var matchedData = [];
for (var i = 0; i < pushData.length; i++) {
if (pushData[i].containsKey(ownPillId.toString())) {
matchedData.add(pushData[i][ownPillId.toString()]);
}
}
pushData에는 전체 값이 들어가있고
matchedData에는 빈 배열이 들어가있다.
pushData가 ownPillId와 같은 key값이라면 matchedData에 추가해
matchedData.isNotEmpty
? Expanded(
child: ListView.builder(
itemCount: matchedData.length,
itemBuilder: (context, index) {
var data = matchedData[index];
return ListTile(
title: Row(
children: List<Widget>.generate(7, (int day) {
var days = data['days'];
return Text(
['월', '화', '수', '목', '금', '토', '일'][day],
style: TextStyle(
color: days[day] ? HOT_PINK : BASIC_BLACK,
),
);
}).toList(),
),
subtitle: Text("${data['hour']}시 ${data['minute']}분"),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
IconButton(
onPressed: () {
_updateTime(
context,data['pushId']);
},
icon: Icon(Icons.edit),
),
IconButton(
onPressed: () async {
await context.read<AlarmStore>().deletePushAlarm(context, data['pushId']);
},
icon: Icon(Icons.delete),
),
],
),
);
},
),
)
: Container(
요런 방식으로 해결했다.
참고로 data['days'] 에는 bool 배열이 들어가 있고
true면 분홍색, false면 검은색이 나오게 요일을 출력하는 로직을 구현했다.