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.
57 lines
1.7 KiB
57 lines
1.7 KiB
import 'dart:ffi'; |
|
import 'dart:io'; |
|
|
|
import 'package:counters/address.dart'; |
|
import 'package:path/path.dart'; |
|
import 'package:path_provider/path_provider.dart'; |
|
import 'package:sqflite/sqflite.dart'; |
|
|
|
class DBProvider { |
|
static const int dbVersion = 1; |
|
static const String addressTableName = 'address$dbVersion'; |
|
DBProvider._(); |
|
static final DBProvider db = DBProvider._(); |
|
|
|
static Database? _database; |
|
Future<Database> get database async { |
|
if (_database != null) return _database!; |
|
|
|
_database = await initDB(); |
|
return _database!; |
|
} |
|
|
|
initDB() async { |
|
Directory documentsDirectory = await getApplicationDocumentsDirectory(); |
|
String path = join(documentsDirectory.path, "counters.db"); |
|
print(path); |
|
return await openDatabase(path, version: dbVersion, onOpen: (db) {}, |
|
onCreate: (Database db, int version) async { |
|
await db.execute("CREATE TABLE $addressTableName (" |
|
"id INTEGER PRIMARY KEY," |
|
"street_name TEXT," |
|
"comments TEXT" |
|
")"); |
|
}); |
|
} |
|
|
|
Future<int> newAddress(Address newAddress) async { |
|
final db = await database; |
|
var res = await db.insert(addressTableName, newAddress.toJson()); |
|
return res; |
|
} |
|
|
|
Future<Object> getAddress(int id) async { |
|
final db = await database; |
|
var res = |
|
await db.query(addressTableName, where: "id = ?", whereArgs: [id]); |
|
return res.isNotEmpty ? Address.fromJson(res.first) : Null; |
|
} |
|
|
|
Future<List<Address>> getAllAddress() async { |
|
final db = await database; |
|
var res = await db.query(addressTableName); |
|
List<Address> list = |
|
res.isNotEmpty ? res.map((c) => Address.fromJson(c)).toList() : []; |
|
return list; |
|
} |
|
}
|
|
|