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
'Develop > Flutter' 카테고리의 다른 글
[Flutter] M1 Mac 에서 pod error. 주로 firebase 관련 해결법 (0) | 2021.09.19 |
---|---|
[Flutter] 플러터로 로또번호 생성 하는 방법 (0) | 2021.07.29 |
[Flutter] 플러터 시작하기. - m1 Mac에서 Flutter Project 생성 꿀 팁 (0) | 2021.07.27 |