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면 검은색이 나오게 요일을 출력하는 로직을 구현했다.