顾海波

【修复】数据库初始化

... ... @@ -16,7 +16,7 @@ import '../log/logger.dart';
class AutoTrackQueue {
static final AutoTrackQueue instance = AutoTrackQueue._();
late Database database;
Database? database;
Future<void> _lastTask = Future.value();
void post(Future<void> Function() task) {
... ... @@ -29,10 +29,16 @@ class AutoTrackQueue {
//异步任务
post(() async {
database = await openTrackDatabase();
await _checkInitDataBase();
});
}
Future<void> _checkInitDataBase() async{
if (database != null) {
database = await openTrackDatabase();
}
}
Future<Database> openTrackDatabase() async {
final databasePath = await getDatabasesPath();
final pathString = path.join(databasePath, 'track.db');
... ... @@ -55,9 +61,9 @@ class AutoTrackQueue {
final httpClient = HttpClient();
void appendQueue(TrackModel model) {
if (database == null) return;
post(() async {
await database.insert(
await _checkInitDataBase();
await database!.insert(
"track",
Track(event: jsonEncode(model.toMap()), date: DateTime.now())
.toMap());
... ... @@ -82,6 +88,7 @@ class AutoTrackQueue {
Future<void> flush() async {
try {
AutoTrackLogger.getInstance().debug("@@@start flush");
await _checkInitDataBase();
if (database == null) {
AutoTrackLogger.getInstance().debug('数据库未初始化,跳过 flush');
... ... @@ -90,7 +97,7 @@ class AutoTrackQueue {
final List<TrackModel> uploadList = [];
List<Map<String, dynamic>> events = await database.query("track",
List<Map<String, dynamic>> events = await database!.query("track",
columns: ["id", "event", "date"], limit: 100);
if (events.isEmpty) {
AutoTrackLogger.getInstance().debug("@@@events is empty");
... ... @@ -251,7 +258,7 @@ class AutoTrackQueue {
} else {
//批量删除
for (var event in events) {
await database.delete("track",
await database!.delete("track",
where: "id = ?", whereArgs: [event['id']]);
}
}
... ...