Develop/Flutter

[Flutter] 플러터 groupBy. 날짜별로 데이터를 정리하자!

srcho 2021. 7. 27. 23:49
var newMap = groupBy(data, (Map obj) => obj['release_date']).map(
    (k, v) => MapEntry(k, v.map((item) { item.remove('release_date'); return item;}).toList()));

dart로 개발하다 보면 여러가지 메서드들을 사용하게 되는데 그중 빈도는 낮지만 정리된 자료들이 많이 없어 이렇게 정리.

주로 Rest API 를 이용해서 데이터를 받거나, 또는 내가 만든 모델 클래스에서 날짜별로 해당 데이터들을 그룹화 하고 싶을 때 사용하는 메서드입니다.

 추가로 저는 table_calendar 를 사용하면서 해당 날짜의 데이터 형식을 정리하는데 사용했습니다.

 

 먼저 collection 패키지를 import 한다.

아래와 같이 예를 들면, 

import "package:collection/collection.dart";


var data = [
{"title": 'Avengers', "release_date": '10/01/2019'},
{"title": 'Creed', "release_date": '10/01/2019'},
{"title": 'Jumanji', "release_date": '30/10/2019'},
];


var newMap = groupBy(data, (Map obj) => obj['release_date']);

print(newMap);

위와 같이 List<Map> 형태의 데이터에서 날짜별로 다시 정렬하고자 할 때 사용한다.

추가로 정렬 후 해당 리스트에서 날짜를 제외하고 싶다면,

var newMap = groupBy(data, (Map obj) => obj['release_date']).map(
    (k, v) => MapEntry(k, v.map((item) { item.remove('release_date'); return item;}).toList()));

위와 같이 한번더 map으로 돌려주면 된다.

스택오버플로 등에는 아직 nullSafety 버전을 찾기가 힘들어 그대로 적용 했더니 

The operator '[]' isn't defined for the type 'Object'. Try defining the operator '[]'. This is error I am getting on var newMap = groupBy(data, (obj) => obj['release_date']);

이런 로그를 뱉었다. 위 문제는 

groupBy(data, (obj) => groupBy(data, (Map obj)

오브젝트의 형을 선언해주면 된다.

 

ps) 용기를 내 새로운 도전을 시작했습니다! 도움이 되셨다면 제 유튜브 채널도 방문해주세요~

https://www.youtube.com/channel/UC6XrfhPWgHzfV3s4YkQg6rA

 

Drizzle 드리즐 - YouTube

 

www.youtube.com