|
@@ -0,0 +1,120 @@
|
|
|
+library db_util;
|
|
|
+
|
|
|
+import 'dart:async';
|
|
|
+import 'dart:io';
|
|
|
+
|
|
|
+import 'package:sqflite/sqflite.dart';
|
|
|
+
|
|
|
+part 'db_statement.dart';
|
|
|
+
|
|
|
+class DataModel {
|
|
|
+ String? level1Id;
|
|
|
+ String? level2Id;
|
|
|
+ String? level3Id;
|
|
|
+ String? level4Id;
|
|
|
+
|
|
|
+ String userId;
|
|
|
+ String? text;
|
|
|
+ List<String>? image;
|
|
|
+ String? video;
|
|
|
+
|
|
|
+ DataModel({
|
|
|
+ this.level1Id,
|
|
|
+ this.level2Id,
|
|
|
+ this.level3Id,
|
|
|
+ this.level4Id,
|
|
|
+ required this.userId,
|
|
|
+ this.text,
|
|
|
+ this.image,
|
|
|
+ this.video,
|
|
|
+ });
|
|
|
+
|
|
|
+ static DataModel? fromJson(Map<String, Object?> json) {
|
|
|
+ if (json['record_user'] == null) return null;
|
|
|
+
|
|
|
+ return DataModel(
|
|
|
+ userId: json['record_user'] as String,
|
|
|
+ level1Id: null,
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ String toString() {
|
|
|
+ return '''level1Id:$level1Id , level2Id:$level2Id ,level1Id:$level1Id , level2Id:$level2Id ,
|
|
|
+ userId:$userId , text:$text , image: $image , video: $video
|
|
|
+ ''';
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class DBUtil {
|
|
|
+ static const int databaseVersion = 1;
|
|
|
+
|
|
|
+ late Database _database;
|
|
|
+ late Completer _completer;
|
|
|
+
|
|
|
+ DBUtil._();
|
|
|
+
|
|
|
+ Future<void> init() async {
|
|
|
+ _completer = Completer();
|
|
|
+ try {
|
|
|
+ var path = (await getDatabasesPath()) +
|
|
|
+ Platform.pathSeparator +
|
|
|
+ "thinking_core.db";
|
|
|
+
|
|
|
+ _database = await openDatabase(
|
|
|
+ path,
|
|
|
+ version: databaseVersion,
|
|
|
+ onCreate: _create,
|
|
|
+ );
|
|
|
+
|
|
|
+ _completer.complete(true);
|
|
|
+ } catch (e) {
|
|
|
+ _completer.completeError(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> close() async {
|
|
|
+ try {
|
|
|
+ if (_completer.isCompleted) {
|
|
|
+ _database.close();
|
|
|
+ }
|
|
|
+ } catch (e) {}
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> insert(DataModel model) async {
|
|
|
+ await _database.rawInsert(_insertRecord(model));
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> delete(int id) async {
|
|
|
+ await _database.rawDelete(_deleteRecord(id));
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<List<DataModel>> selectAll() async {
|
|
|
+ List list = await _database.rawQuery(_selectAll());
|
|
|
+
|
|
|
+ return list.map((e) => DataModel.fromJson(e)).nonNull().toList();
|
|
|
+ }
|
|
|
+
|
|
|
+ FutureOr<void> _create(Database db, int version) async {
|
|
|
+ await _upgrade(db, version, databaseVersion);
|
|
|
+ }
|
|
|
+
|
|
|
+ FutureOr<void> _upgrade(Database db, int oldVersion, int newVersion) async {
|
|
|
+ for (int version = oldVersion; version <= newVersion; version++) {
|
|
|
+ if (version == 1) db.execute(_createTable);
|
|
|
+ // if(version == 2) db.execute()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+final DBUtil dbUtil = DBUtil._();
|
|
|
+
|
|
|
+extension NonNullFilter<T> on Iterable<T?> {
|
|
|
+ Iterable<T> nonNull() {
|
|
|
+ List<T> list = [];
|
|
|
+ for (var element in this) {
|
|
|
+ if (element != null) list.add(element);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+}
|