일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- FirebaseAnalytics
- babel
- uint8array
- methodChannel
- Excel
- web track
- node
- KakaoMap
- Three-fiber
- code editor
- jszip
- userevent_tracker
- react
- identifierForVender
- androidId
- REST API
- webrtc
- Raycasting
- Redux
- Three js
- RouteObserver
- typescript
- Prism.js
- uint16array
- Flutter
- Image Resize typescript
- Completer
- swagger-typescript-api
- Babel standalone
- Game js
- Today
- Total
Never give up
Flutter - List<Map> to Map or List with SQFLite 본문
공식문서에 따르면 SQFLite에 데이터를 저장하고 불러올 때 Data type은 다음과 같습니다
// Get the records
List<Map> list = await database.rawQuery('SELECT * FROM Test');
List<Map> expectedList = [
{'name': 'updated name', 'id': 1, 'value': 9876, 'num': 456.789},
{'name': 'another name', 'id': 2, 'value': 12345678, 'num': 3.1416}
];
(출처 : pub.dev/packages/sqflite)
먼저 Map은 key와 value의 관계로 되어있고, List는 index와 value의 관계로 되어있습니다
그리고 List<Map>은 value 값이 Map형태인 List타입 입니다
List<Map>를 그대로 사용하기에는 까다로운 부분이 있습니다
예를들어 expectedList[index] 이런식으로 부르게 되면
index 대칭되는 value값을 사용하기에는 용이하겠지만
key값 혹은 index를 찾는것은 까다롭기 때문에 Map이나 List 형태로 가져올 필요가 있습니다
그래서 List<Map>을 Map 혹은 List형태로 불러올 때는 어떻게 처리하는지 알아보겠습니다
1. List<Map> to Map
Future<Map<DateTime, int>> getStatus() async {
var database = await _openDB();
List<Map> rawList = await database.rawQuery('SELECT * FROM $statusTable');
return Map.fromIterable(rawList,
key: (value) => DateTime.fromMillisecondsSinceEpoch(value['date']),
value: (value) => value['percent']);
}
원하는 데이터 형은 Map<DateTime, int>이고 불러온 rawList는 List<Map>타입입니다
다른방법도 있겠지만 필자는 Map.fromIterable(iterable, key, value)을 통해 해결했습니다
2. List<Map> to List
Future<List<MyTask>> getAll() async {
var database = await _openDB();
List<Map> rawList = await database.rawQuery('SELECT * FROM $selectedTable');
return List.generate(
rawList.length,
(index) =>
MyTask(
title: rawList[index]['title'],
checkbox: rawList[index]['checkbox']));
}
먼저 MyTask는 title(String), checkbox(int)로 구성된 클래스입니다
List는 앞서 말씀드린대로 index와 value로 이루어져있는데
length 메소드로 크기를 정의 해주고, index에 해당되는 title, checkbox값을
List.generate를 통해 간단히 표현할 수 있습니다
'Flutter' 카테고리의 다른 글
Flutter - Scale example with GestureDetector (0) | 2020.08.05 |
---|---|
Flutter - Provider Consumer and Selector (0) | 2020.08.03 |
Flutter - When you store data in SQFLlite (0) | 2020.08.03 |
Flutter - How to solve Error: No pubspec.yaml file found. (8) | 2020.08.03 |
Flutter - SharedPreferences set and get Color (0) | 2020.08.03 |