顾海波

【修复】数据库初始化

@@ -16,7 +16,7 @@ import '../log/logger.dart'; @@ -16,7 +16,7 @@ import '../log/logger.dart';
16 class AutoTrackQueue { 16 class AutoTrackQueue {
17 static final AutoTrackQueue instance = AutoTrackQueue._(); 17 static final AutoTrackQueue instance = AutoTrackQueue._();
18 18
19 - late Database database; 19 + Database? database;
20 Future<void> _lastTask = Future.value(); 20 Future<void> _lastTask = Future.value();
21 21
22 void post(Future<void> Function() task) { 22 void post(Future<void> Function() task) {
@@ -29,10 +29,16 @@ class AutoTrackQueue { @@ -29,10 +29,16 @@ class AutoTrackQueue {
29 29
30 //异步任务 30 //异步任务
31 post(() async { 31 post(() async {
32 - database = await openTrackDatabase(); 32 + await _checkInitDataBase();
33 }); 33 });
34 } 34 }
35 35
  36 + Future<void> _checkInitDataBase() async{
  37 + if (database != null) {
  38 + database = await openTrackDatabase();
  39 + }
  40 + }
  41 +
36 Future<Database> openTrackDatabase() async { 42 Future<Database> openTrackDatabase() async {
37 final databasePath = await getDatabasesPath(); 43 final databasePath = await getDatabasesPath();
38 final pathString = path.join(databasePath, 'track.db'); 44 final pathString = path.join(databasePath, 'track.db');
@@ -55,9 +61,9 @@ class AutoTrackQueue { @@ -55,9 +61,9 @@ class AutoTrackQueue {
55 final httpClient = HttpClient(); 61 final httpClient = HttpClient();
56 62
57 void appendQueue(TrackModel model) { 63 void appendQueue(TrackModel model) {
58 - if (database == null) return;  
59 post(() async { 64 post(() async {
60 - await database.insert( 65 + await _checkInitDataBase();
  66 + await database!.insert(
61 "track", 67 "track",
62 Track(event: jsonEncode(model.toMap()), date: DateTime.now()) 68 Track(event: jsonEncode(model.toMap()), date: DateTime.now())
63 .toMap()); 69 .toMap());
@@ -82,6 +88,7 @@ class AutoTrackQueue { @@ -82,6 +88,7 @@ class AutoTrackQueue {
82 Future<void> flush() async { 88 Future<void> flush() async {
83 try { 89 try {
84 AutoTrackLogger.getInstance().debug("@@@start flush"); 90 AutoTrackLogger.getInstance().debug("@@@start flush");
  91 + await _checkInitDataBase();
85 92
86 if (database == null) { 93 if (database == null) {
87 AutoTrackLogger.getInstance().debug('数据库未初始化,跳过 flush'); 94 AutoTrackLogger.getInstance().debug('数据库未初始化,跳过 flush');
@@ -90,7 +97,7 @@ class AutoTrackQueue { @@ -90,7 +97,7 @@ class AutoTrackQueue {
90 97
91 final List<TrackModel> uploadList = []; 98 final List<TrackModel> uploadList = [];
92 99
93 - List<Map<String, dynamic>> events = await database.query("track", 100 + List<Map<String, dynamic>> events = await database!.query("track",
94 columns: ["id", "event", "date"], limit: 100); 101 columns: ["id", "event", "date"], limit: 100);
95 if (events.isEmpty) { 102 if (events.isEmpty) {
96 AutoTrackLogger.getInstance().debug("@@@events is empty"); 103 AutoTrackLogger.getInstance().debug("@@@events is empty");
@@ -251,7 +258,7 @@ class AutoTrackQueue { @@ -251,7 +258,7 @@ class AutoTrackQueue {
251 } else { 258 } else {
252 //批量删除 259 //批量删除
253 for (var event in events) { 260 for (var event in events) {
254 - await database.delete("track", 261 + await database!.delete("track",
255 where: "id = ?", whereArgs: [event['id']]); 262 where: "id = ?", whereArgs: [event['id']]);
256 } 263 }
257 } 264 }