티스토리 뷰
출처 : https://pub.dev/packages/drift
[라이브러리] Drift
flutter 에서 sqlite를 ORM 으로 작성하게 해주는 라이브러리
설치
flutter pub add drift
flutter pub add sqlite3_flutter_libs
flutter pub add path_provider
flutter pub add path
flutter pub add --dev drift_dev
flutter pub add --dev build_runner
Todo table 작성
import 'package:drift/drift.dart';
// Table을 상속받아서 작성
class Todo extends Table {
// 주의점은 끝에 괄호가 두개
IntColumn get id => integer().autoIncrement()();
TextColumn get title => text()();
TextColumn get context => text().nullable()();
TextColumn get status => text()();
}
Drift 헬퍼 함수 작성
// 파일명을 `db_helper.dart` 로 생성했을 경우
import 'dart:io';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
// 중요!! `파일명.g.dart` 꼭 작성
// 빌드 전에는 에러 표시나는 것이 정상
part 'db_helper.g.dart';
// 아래에서 만들 table class를 넣어준다.
@DriftDatabase(tables: [Todo])
// _$클래스명 을 붙여서 상속 받는다
// 빌드전에는 에러 나는 것이 정상
class DbHelper extends _$DbHelper {
DbHelper() : super(_openConnection());
// 스키마 버전
@override
int get schemaVersion => 1;
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
// sqlite 를 저장할 파일명
final file = File(p.join(dbFolder.path, 'todo.sqlite'));
return NativeDatabase.createInBackground(file);
});
}
빌드
# 빌드 명령
flutter pub run build_runner build
기능 구현 ( 예제에서는 list, insert , delete)
// 위에서 생성한 `db_helper.dart` 에 내용 추가
@DriftDatabase(tables: [Todo])
class DbHelper extends _$DbHelper {
//// 내용 추가 부분 -------------------------------------------
// 빌드를 돌리고나면 todos와 TodoData 가 자동완성된다.
// todos 내가 만든 클래스를 소문자 + 복수
// TodoCompanion 은 내가 만든 클래스 + Companion 이 자동으로 부여된다.
// 데이터를 넣을때에는 TodoCompanion 으로 넣어야하며, 요소는 Value로 감싸서 입력
Future<int> addTodo(TodoData todoData) {
return into(todo).insert(todoData);
}
Future<List<TodoData>> findAll() {
return select(todo).get();
}
Future resetDB() {
return delete(todo).go();
}
Future<TodoData?> find(TodoData todoData) {
return (select(todo)..where((t) => t.id.equals(todoData.id)))
.getSingleOrNull();
}
}
'개발 > Dart & Flutter' 카테고리의 다른 글
freezed.dart, g.dart 파일 하나로 합치기 (0) | 2023.04.22 |
---|---|
[flutter] 안드로이드 빌드시 해두면 좋은 설정들 (0) | 2023.02.28 |
Flutter 추천 라이브러리 (0) | 2023.02.17 |
[라이브러리] Freezed (0) | 2023.02.03 |
Dart 문법 정리 (0) | 2018.12.26 |
댓글