1. Model 폴더에 Table 추가
-import drift
-테이블 클래스 생성
-autoIncrement()
import 'package:drift/drift.dart';
class Schedules extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get content => text()();
DateTimeColumn get date => dateTime()();
IntColumn get colorId => integer()();
TextColumn get hexCode => text()();
DateTimeColumn get createdAt => dateTime().clientDefault(
() => DateTime.now(),
)();
}
2.database 폴더에 drift_database.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';
// part로 현재 파일.g.
part 'drift_database.g.dart';
// model 폴더에 추가한 테이블 설정
@DriftDatabase(
tables: [
Schedules,
],
)
class LocalDatabase extends _$LocalDatabase {
LocalDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
}
//getApplicationDocumentsDirectory로 해당 기기에서 sql이 저장되는 폴더경로 획득
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'db.sqlite'));
return NativeDatabase(file);
});
}
3. Terminal에서 아래 명령어 실행해서 code generation
-'flutter pub run build_runner build'
-drift_database.g.dart 파일 생성됨
4.sql관련 함수추가
-LocalDatabase class안에 추가
-into('소문자로 테이블네임')
class LocalDatabase extends _$LocalDatabase {
LocalDatabase() : super(_openConnection());
Future<int> createSchedule(SchedulesCompanion data) =>
into(schedules).insert(data);
Future<int> createCategoryColor(CategoryColorsCompanion data) =>
into(categoryColors).insert(data);
Future<List<CategoryColor>> getCategoryColors() =>
select(categoryColors).get();
@override
int get schemaVersion => 1; //throw UnimplementedError();
}
5.main.dart에서 사용
-table명Companion을 사용
-값 입력은 Value(data)로 적용
import 'package:drift/drift.dart';
import 'package:flutter/material.dart';
import 'package:mycalendar/database/drift_database.dart';
const DEFAULT_COLORS = [
'F44336',
'FF9800',
'FFEB3B',
];
void main() async {
final database = LocalDatabase();
final colors = await database.getCategoryColors();
if (colors.isEmpty) {
for (String hexCode in DEFAULT_COLORS) {
await database.createCategoryColor(
CategoryColorsCompanion(hexCode: Value(hexCode)),
);
}
}
runApp(
MaterialApp(
home: HomeScreen(),
),
);
}