카테고리 없음

[flutter] insert list into sqflite database, list<> 타입 db에 저장하기

뚜개 2024. 11. 22. 11:58

나는 지금 대충 이런 형태의 클래스를 갖고 있다.

@freezed
class Temp with _$Temp {
  @JsonSerializable(explicitToJson: true)
  const factory Ddeugae({
    required String id,
    List<String>? imagePath,
  }) = _Temp;

  factory Temp.fromJson(Map<String, Object?> json) =>
      _$TempFromJson(json);
}

class 내부에 List 변수가 있고 이건 toJson으로 freezed가 알아서 string 으로 생성해주지 않았다.
db에는 TEXT INTEGER 등의 타입만 저장되기 때문에 저장하려면 알아서 전환해서 저장했어야했음

    Map<String, dynamic> convertTemp(Temp t) {
    var tojson = t.toJson();
    tojson['imagePath'] = jsonEncode(t.imagePath);
    return tojson;
  }

    Future<int> insert(Temp t) async {
    final db = await database;
    return await db.insert('t', convertTemp(t));
  }

    Future<List<Temp>> getTemps() async {
    final db = await database;
    final maps = await db.query('t');
    return maps.map((map) {
      var mutableMap = Map<String, dynamic>.from(map);
      if (mutableMap['imagePath'] != null) {
        mutableMap['imagePath'] = jsonDecode(mutableMap['imagePath'] as String);
      }
      var t = Temp.fromJson(mutableMap);
      return t;
    }).toList();
  }

때문에 이런 방식으로 db에 넣는 걸로 수정했다.
잘 작동한다.