zhaoyadi 3 роки тому
батько
коміт
eb8968a1dd
5 змінених файлів з 218 додано та 0 видалено
  1. 28 0
      example/pubspec.lock
  2. 40 0
      lib/src/utils/db_statement.dart
  3. 120 0
      lib/src/utils/db_util.dart
  4. 28 0
      pubspec.lock
  5. 2 0
      pubspec.yaml

+ 28 - 0
example/pubspec.lock

@@ -48,11 +48,39 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.7.0"
+  path:
+    dependency: transitive
+    description:
+      name: path
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.8.1"
   sky_engine:
     dependency: transitive
     description: flutter
     source: sdk
     version: "0.0.99"
+  sqflite:
+    dependency: transitive
+    description:
+      name: sqflite
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.2"
+  sqflite_common:
+    dependency: transitive
+    description:
+      name: sqflite_common
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.1+1"
+  synchronized:
+    dependency: transitive
+    description:
+      name: synchronized
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.0.0"
   typed_data:
     dependency: transitive
     description:

+ 40 - 0
lib/src/utils/db_statement.dart

@@ -0,0 +1,40 @@
+part of 'db_util.dart';
+
+/// 数据库创建执行语句
+
+const String _createTable = '''
+CREATE TABLE "record" (
+  "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
+  "level1_id" text,
+  "level2_id" text,
+  "level3_id" text,
+  "level4_id" text,
+  "record_user" text,
+  "record_text" text,
+  "record_image" text,
+  "record_video" text
+);
+''';
+
+const String _update1_2 = "";
+
+String _insertRecord(DataModel model) {
+  return '''
+INSERT INTO record 
+(level1_id,level2_id,level3_id,level4_id,record_user,record_text,record_image,record_video) 
+VALUES
+('${model.level1Id}','${model.level2Id}','${model.level3Id}','${model.level4Id}','${model.userId}','${model.text}','${model.image}','${model.video}');
+  ''';
+}
+
+String _deleteRecord(int id) {
+  return '''
+DELETE FROM record WHERE id = $id;
+''';
+}
+
+String _selectAll() {
+  return '''
+  SELECT * FROM record;
+  ''';
+}

+ 120 - 0
lib/src/utils/db_util.dart

@@ -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;
+  }
+}

+ 28 - 0
pubspec.lock

@@ -41,11 +41,39 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.7.0"
+  path:
+    dependency: transitive
+    description:
+      name: path
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "1.8.1"
   sky_engine:
     dependency: transitive
     description: flutter
     source: sdk
     version: "0.0.99"
+  sqflite:
+    dependency: "direct main"
+    description:
+      name: sqflite
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.2"
+  sqflite_common:
+    dependency: transitive
+    description:
+      name: sqflite_common
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "2.0.1+1"
+  synchronized:
+    dependency: transitive
+    description:
+      name: synchronized
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "3.0.0"
   typed_data:
     dependency: transitive
     description:

+ 2 - 0
pubspec.yaml

@@ -11,6 +11,8 @@ dependencies:
   flutter:
     sdk: flutter
 
+  sqflite: ^2.0.2
+
 dev_dependencies:
   flutter_lints: ^1.0.0