You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.3 KiB
83 lines
2.3 KiB
import 'dart:io';
|
|
|
|
import 'package:flutter/services.dart';
|
|
import 'package:path/path.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart' as sqflite_ffi;
|
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
|
|
|
class WorkDatabase {
|
|
static final WorkDatabase instance = WorkDatabase._init();
|
|
|
|
static Database? _database;
|
|
bool _isInitialized = false;
|
|
|
|
WorkDatabase._init() {
|
|
sqflite_ffi.sqfliteFfiInit();
|
|
}
|
|
|
|
Future<void> initDatabase() async {
|
|
if (!_isInitialized) {
|
|
_database = await _initDB('work.db');
|
|
await _createDB(_database!, 1);
|
|
_isInitialized = true;
|
|
}
|
|
}
|
|
|
|
Future<Database> get database async {
|
|
if (!_isInitialized) {
|
|
await initDatabase();
|
|
}
|
|
return _database!;
|
|
}
|
|
|
|
Future<Database> _initDB(String filePath) async {
|
|
final documentsDirectory = await getApplicationDocumentsDirectory();
|
|
final path = join(documentsDirectory.path, filePath);
|
|
|
|
bool dbExists = await File(path).exists();
|
|
if (!dbExists) {
|
|
try {
|
|
ByteData data = await rootBundle.load('assets/database/$filePath');
|
|
List<int> bytes =
|
|
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
|
|
await File(path).writeAsBytes(bytes);
|
|
} catch (e) {
|
|
print("No pre-existing database found in assets, creating new one");
|
|
}
|
|
}
|
|
|
|
return await databaseFactoryFfi.openDatabase(path);
|
|
}
|
|
|
|
Future<void> _createDB(Database db, int version) async {
|
|
await db.execute('''
|
|
CREATE TABLE IF NOT EXISTS work (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
date TEXT UNIQUE
|
|
)
|
|
''');
|
|
}
|
|
|
|
Future<int> insertDate(String date) async {
|
|
final db = await database;
|
|
try {
|
|
return await db.insert('work', {'date': date});
|
|
} catch (e) {
|
|
// En cas de doublon (date déjà existante)
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
Future<List<String>> getDates() async {
|
|
final db = await database;
|
|
final result = await db.query('work');
|
|
return result.map((row) => row['date'] as String).toList();
|
|
}
|
|
|
|
Future<List<String>> getDatesDesc() async {
|
|
final db = await database;
|
|
final result = await db.query('work', orderBy: 'date DESC');
|
|
return result.map((row) => row['date'] as String).toList();
|
|
}
|
|
}
|