하얀설표 블로그




dart/flutter drfit Table과 Companion 객체 차이점




( 수정됨)


예제

main.dart

# main.dart
import 'package:drift/drift.dart' as d;
import 'package:example/Drift/insert.dart';

void main() async {
  var com = InseCompanion.insert(title: '1', content: '11');
  print(com);
  // var t = InseTable(id: id, enable: enable, date: date, title: title, content: content)
}

models.dart

# models.dart
import 'package:drift/drift.dart';

@DataClassName('InseTable')
class Inse extends Table {
  // 유니크 키
  IntColumn get id => integer().autoIncrement()();
  // null 허용
  IntColumn get category => integer().nullable()();
  // bool
  // 기본값을 false로 지정
  BoolColumn get enable => boolean().withDefault(const Constant(false))();
  // dateTime
  DateTimeColumn get date => dateTime().withDefault(currentDateAndTime)();
  // String
  // 최소/최대 길이 제한
  TextColumn get title => text().withLength(min: 1, max: 32)();
  //
  TextColumn get content => text().named('body')();
}

설명

drift로 models.dart를 작성한 다음 build하면 models.dart에 정의된 table 객체와, 해당 table명 + Companion으로 이루어진 Companion 객체 2가지를 만들 수 있게 된다.
안드로이드 스튜디오의 자동완성 기능을 사용해 각 객체에 전달해야하는 요소들을 자동완성하면 Companion에서는 title과 content만 요구하는 반면, Table에서는 Table에 들어가는 모든 항목(id, enable, date, title, content)들을 요구한다

전달해야하는 인수가 다른 이유

간단하게 말해서, Companion에서는 기본값이 설정된 항목들을 자동완성해주기 때문이다.
반면 Table은 Table 객체를 직접 작성하는 것이기 때문에 기본값 설정에 관계없이 모든 항목의 값을 지정해주어야 한다.

이는 db handle class에서도 차이가 있는데, 기본값이 지정되어 있다면 handle 사용시 Companion을 전달받도록 해야 기본값을 자동으로 입력받을 수 있다.
실제로 Companion 객체에 아무 값이나 넣은 다음, 출력해보면 다음과 같이 입력하지 않은 값도 제대로 생성되어있는 것을 확인할 수 있다.

InseCompanion(id: Value.absent(), category: Value.absent(), enable: Value.absent(), date: Value.absent(), title: Value(1), content: Value(11))

drift 사용 방법

패키지 사용방법은 다음 페이지들을 확인하자

drift upsert 사용 예제

drift insert, update 사용 예제


공감 : 0







white.seolpyo.com