Showing
1 changed file
with
13 additions
and
6 deletions
| @@ -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 | } |
-
Please register or login to post a comment