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.
90 lines
2.7 KiB
90 lines
2.7 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();
|
|
late Database _database;
|
|
|
|
WorkDatabase._init() {
|
|
sqflite_ffi.sqfliteFfiInit();
|
|
}
|
|
|
|
Future<void> initDatabase() async {
|
|
_database = await _initDB('work.db');
|
|
await _createDB(_database, 1);
|
|
}
|
|
|
|
Future<Database> get database async {
|
|
if (_database.isOpen) return _database;
|
|
|
|
_database = await _initDB('work.db');
|
|
return _database;
|
|
}
|
|
|
|
Future<Database> _initDB(String filePath) async {
|
|
// Obtenez le répertoire de stockage local de l'application
|
|
final documentsDirectory = await getApplicationDocumentsDirectory();
|
|
final path = join(documentsDirectory.path, filePath);
|
|
|
|
// Vérifiez si le fichier de base de données existe déjà dans le répertoire de stockage local
|
|
bool dbExists = await File(path).exists();
|
|
if (!dbExists) {
|
|
// Si le fichier n'existe pas, copiez-le depuis le dossier assets/database
|
|
ByteData data = await rootBundle.load('assets/database/$filePath');
|
|
List<int> bytes =
|
|
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
|
|
await File(path).writeAsBytes(bytes);
|
|
}
|
|
|
|
// Ouvrez la base de données
|
|
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
|
|
)
|
|
''');
|
|
}
|
|
|
|
Future<int> insertDate(String date) async {
|
|
final db = await database;
|
|
final existingDates =
|
|
await db.query('work', where: 'date = ?', whereArgs: [date]);
|
|
|
|
if (existingDates.isNotEmpty) {
|
|
// Date already exists, return 0 to indicate no new insertion
|
|
return 0;
|
|
}
|
|
|
|
return await db.insert('work', {'date': date});
|
|
}
|
|
|
|
/*Future<List<Work>> getDates() async {
|
|
final db = await database;
|
|
final result = await db.query('work');
|
|
|
|
return result.map((json) => Work.fromJson(json)).toList();
|
|
}*/
|
|
Future<List<String>> getDates() async {
|
|
final db = await database;
|
|
final result = await db.query('work');
|
|
return List.generate(
|
|
result.length, (index) => result[index]['date'] as String);
|
|
}
|
|
|
|
// recuperer les dates par ordre du plus recent au plus ancien
|
|
Future<List<String>> getDatesDesc() async {
|
|
final db = await database;
|
|
final result = await db.query('work', orderBy: 'date DESC');
|
|
return List.generate(
|
|
result.length, (index) => result[index]['date'] as String);
|
|
}
|
|
}
|
|
|