Flutter

[Flutter] 함수형프로그래밍 List of Maps VS Map of Maps 데이터 접근

hymndaniel 2023. 1. 16. 18:19

상황 : 달력에 입력된 데이터를 넣어야함

API response가 다음과 같은 List of Map 형태일때

List farmWorkData = [
  {
    "date": "2023-01-16",
    "work_list": ["방제", "적엽", "정식"],
    "work_detail": "1구역 비닐 멀칭\n1구역 방제\n컨설턴트 방문하여 급액처방 EC 양분조절\n2구역 정식",
    "work_image_list": [
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      }
    ]
  },
  {
    "date": "2023-01-17",
    "work_list": prefFarmWork,
    "work_detail": "1구역 비닐 멀칭\n1구역 방제\n컨설턴트 방문하여 급액처방 EC 양분조절\n2구역 정식",
    "work_image_list": [
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      }
    ]
  },
];

다음과 같은 방법으로 데이터를 검색

List selectedList =
    farmWorkData.where((x) => x['date'] == DateFormat('yyyy-MM-dd').format(_selectedDay!)).toList();

 

아래와 같이 Map형태로 변경하면

Map farmWorkData = {
  "2023-01-16": {
    "work_list": ["방제", "적엽", "정식"],
    "work_detail": "1구역 비닐 멀칭\n1구역 방제\n컨설턴트 방문하여 급액처방 EC 양분조절\n2구역 정식",
    "work_image_list": [
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      }
    ]
  },
  "2023-01-17": {
    "work_list": prefFarmWork,
    "work_detail": "1구역 비닐 멀칭\n1구역 방제\n컨설턴트 방문하여 급액처방 EC 양분조절\n2구역 정식",
    "work_image_list": [
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      },
      {
        "image_url":
            "https://ichef.bbci.co.uk/news/976/cpsprodpb/10928/production/_111408876__96579830_aseveralfruitpickersbendingoverbbc.jpg.webp",
        "mesure_dt": "2022-12-24 15:29:14"
      }
    ]
  },
};

Map의 Key, Value 값으로 접근

    responseJson.forEach((key, value) {
      DateTime date = DateTime.parse(key); //작업 날짜를 날짜형식으로 처리
      List<MonthEvent> workList = [];
      for (var work in value['work_list']) {
        workList.add(MonthEvent(work)); //이벤트 모델에 넣어서 추가
      }
      eventSource[date] = workList;
    });

 

 

참고

https://velog.io/@keemeesuu/Flutter-Dart.-Functional-Programming%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

[Flutter/Dart] Functional Programming(함수형 프로그래밍)

Useful List method (유용한 리스트 메소드 정리)

velog.io

https://codechacha.com/ko/dart-iterate-over-map/

 

Flutter/Dart - Map 순회 방법

for loop 등으로 Map(HashMap)의 아이템들을 순회하는 방법을 소개합니다. Map.forEach((key, value) { })로 Map의 key-value 아이템을 순회할 수 있습니다. Map.entries는 아이템들에 대한 MapEntry의 Iterable 객체를 리

codechacha.com

 
 
 
728x90