import 'dart:io'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:rogapp/model/gps_data.dart'; import 'package:sqflite/sqflite.dart'; class GpsDatabaseHelper { GpsDatabaseHelper._privateConstructor(); static final GpsDatabaseHelper instance = GpsDatabaseHelper._privateConstructor(); static Database? _database; Future get database async => _database ??= await _initDatabase(); Future _initDatabase() async { Directory documentDirectory = await getApplicationDocumentsDirectory(); String path = join(documentDirectory.path, 'rog.db'); // return await openDatabase( // path, // version: 1, // onCreate: _onCreate, // ); return openDatabase( join( await getDatabasesPath(), 'gps.db', ), version: 1, onCreate: _onCreate); } Future _onCreate(Database db, int version) async { await db.execute(''' CREATE TABLE gps( id INTEGER PRIMARY KEY AUTOINCREMENT, team_name TEXT, event_code TEXT, lat REAL, lon REAL, is_checkin int, created_at INTEGER, is_synced INTEGER DEFAULT 0 ) '''); } Future insertGps(GpsData gps) async { Database db = await instance.database; int? nextOrder = Sqflite.firstIntValue(await db.rawQuery('SELECT MAX(id) FROM gps')); nextOrder = nextOrder ?? 0; nextOrder = nextOrder + 1; gps.id = nextOrder; print("---- insering ${gps.toMap()}"); int res = await db.insert( 'gps', gps.toMap(), conflictAlgorithm: ConflictAlgorithm.replace, ); //print("------ database helper insert $res-----------::::::::"); return res; } Future> getGPSData(String team_name, String event_code) async { Database db = await instance.database; var gpss = await db.query('gps', where: "team_name = ? and event_code = ?", whereArgs: [team_name, event_code], orderBy: 'created_at'); List gpsDatas = gpss.isNotEmpty ? gpss.map((e) => GpsData.fromMap(e)).toList() : []; print("--------- db list $gpsDatas"); return gpsDatas; } Future> getUnsyncedGPSData( String team_name, String event_code) async { Database db = await instance.database; var gpss = await db.query('gps', where: 'team_name = ? and event_code = ? and is_synced = 0', whereArgs: [team_name, event_code], orderBy: 'created_at'); return gpss.isNotEmpty ? gpss.map((e) => GpsData.fromMap(e)).toList() : []; } Future setSyncData(List data) async { Database db = await instance.database; for (var record in data) { await db.update( 'gps', {'is_synced': 1}, where: 'id = ?', whereArgs: [record.id], ); } } }