[Flutter]SQLite에 사용하는 toMap( ) List.generate(maps.length, (i))

2020년 10월 25일 by 진아사랑해

    [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)를 맞춰주는 것이다

 

즐거운 시간되세요^^

반응형