import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart'; part 'models.g.dart'; /// 导入记录表定义 class ImportRecord extends Table { /// 导入记录 ID IntColumn get id => integer().autoIncrement()(); /// 导入时间 DateTimeColumn get createTime => dateTime()(); /// 导入文件名称 TextColumn get fileName => text()(); } /// 进销明细表 class SaleDetail extends Table { /// 记录唯一 ID IntColumn get id => integer().autoIncrement()(); /// 进销单据编号 TextColumn get detailNo => text()(); /// 交易对象名称 TextColumn get objName => text()(); /// 进销单据性质 TextColumn get type => text().map(const SaleDetailTypeConverter())(); /// 关联导入记录 ID IntColumn get importId => integer().references(ImportRecord, #id)(); } enum SaleDetailType { bill('挂账', 'BILL', ['挂账']), cash('现金', 'CASH', ['挂账']), online('线上支付', 'ONLINE', ['挂账']); final String desc; final String code; final List identity; static final Map map = { for (var type in SaleDetailType.values) type.code: type, }; const SaleDetailType(this.desc, this.code, this.identity); static SaleDetailType? of(String param) => map[param]; } class SaleDetailTypeConverter extends TypeConverter { const SaleDetailTypeConverter(); @override SaleDetailType fromSql(String code) => SaleDetailType.of(code)!; @override String toSql(SaleDetailType type) => type.code; } // 添加数据库类 @DriftDatabase(tables: [ImportRecord, SaleDetail]) class AppDatabase extends _$AppDatabase { AppDatabase([QueryExecutor? executor]) : super(executor ?? _openConnection()); @override int get schemaVersion => 1; static QueryExecutor _openConnection() { return driftDatabase(name: 'my_database'); } }