- [Flutter]SQLite에 사용하는 toMap( ) List.generate(maps.length, (i)) 목차
Flutter에서 SQLite를 접근할 때 사용하는 함수가 있다
toMap( ) 메쏘드는 데이터 베이스 모델이 선언된 Class의 내용을 DB에 적용하는 함수이고
List.generate(maps.length, (i)) 메쏘드는 DB에 있는 내용을 List로 변환하는 함수이다
데이터베이스(DB) 모델 선언
// Dog 클래스에 `toMap` 메서드를 추가하세요
class Dog {
final int id;
final String name;
final int age;
Dog({this.id, this.name, this.age}); <- class의 생성자
// dog를 Map으로 변환합니다. key는 데이터베이스 컬럼 명과 동일해야 합니다.
// class의 db 모델로 선언된 데이터베이스의 각 필드에 맞게 key/value의 Map 형태로 각 필드를 반환한다
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'age': age,
};
}
}
// 데이터베이스에 dog를 추가하는 함수를 정의합니다.
Future<void> insertDog(Dog dog) async {
// 데이터베이스 reference를 얻습니다.
final Database db = await database;
// Dog를 올바른 테이블에 추가합니다. 동일한 dog가 두번 추가되는 경우를 처리하기 위해
// `conflictAlgorithm`을 명시할 수 있습니다.
//
// 본 예제에서는, 이전 데이터를 갱신하도록 하겠습니다.
await db.insert(
'dogs', <- DB의 테이블 이름
dog.toMap(), <- DB의 필드에 맞게 map 형태로 변환한다
conflictAlgorithm: ConflictAlgorithm.replace,
);
}
// 이제 Dog를 생성하고 dogs 테이블에 추가할 수 있습니다.
final fido = Dog(
id: 0,
name: 'Fido',
age: 35,
);
await insertDog(fido);
// dogs 테이블의 모든 dog를 얻는 메서드
Future<List<Dog>> dogs() async {
// 데이터베이스 reference를 얻습니다.
final Database db = await database;
// 모든 Dog를 얻기 위해 테이블에 질의합니다.
final List<Map<String, dynamic>> maps = await db.query('dogs');
// List<Map<String, dynamic>를 List<Dog>으로 변환합니다.
return List.generate(maps.length, (i) { <- maps로 DB로 부터 반환된 모든 필드를 List형태로 반환한다.
return Dog( <- [ [maps(0)], [maps(1)],.....] 으로 반환한다
id: maps[i]['id'],
name: maps[i]['name'],
age: maps[i]['age'],
);
});
}
// 이제, 모든 dog를 얻을 수 있는 위 메서드를 사용할 수 있습니다.
print(await dogs()); // Fido를 포함한 리스트를 출력합니다.
toMap( ) 메쏘드가 어떤 의미인지 모르고 사용했었는데...대충 감이 온거 같다
선언된 DB 모델인 Class를 DB에 저장하기 위해 각 필드 이름(Key)에 맞게
각 필드의 값(Value)를 맞춰주는 것이다
즐거운 시간되세요^^
'flutter' 카테고리의 다른 글
[Flutter]변수를 문자열(string)로 치환하여 프린트(print) 하기($ 사용) (0) | 2020.12.13 |
---|---|
[Flutter]Dart 2차원 배열(list, 리스트) 데이터 저장 및 가져오기(List.generate()) (0) | 2020.12.13 |
[Flutter] 위젯간 Data 전달하기(생성자 변수, 함수 포인터) (0) | 2020.10.25 |
[Flutter] 두점(..) 세점(...) 사용법 (0) | 2020.10.24 |
flutter_form_builder 패키지 사용법 (0) | 2020.10.18 |