Adds drone model, db helper.
This commit is contained in:
81
lib/db/db_helper.dart
Normal file
81
lib/db/db_helper.dart
Normal file
@ -0,0 +1,81 @@
|
||||
// Singleton to access database
|
||||
import 'dart:developer';
|
||||
import 'dart:io';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import '../models/drone.dart';
|
||||
|
||||
|
||||
import 'package:path_provider/path_provider.dart';import 'package:sqflite/sqflite.dart';
|
||||
|
||||
class DbHelper
|
||||
{
|
||||
static final DbHelper instance = DbHelper._internal();
|
||||
static final log = Logger("DbHelper");
|
||||
static Database? _database;
|
||||
|
||||
DbHelper._internal();
|
||||
|
||||
Future<Database> get database async
|
||||
{
|
||||
if (_database != null) return _database!;
|
||||
await _initDb();
|
||||
return _database!;
|
||||
}
|
||||
|
||||
Future _initDb() async
|
||||
{
|
||||
final directory = await getApplicationDocumentsDirectory();
|
||||
final db_name = "rtime.db";
|
||||
final path = join(directory.path, db_name);
|
||||
log.info("Opeing database file at $path");
|
||||
|
||||
_database = await openDatabase(
|
||||
path,
|
||||
version: 1,
|
||||
onCreate: _onCreate,
|
||||
);
|
||||
|
||||
log.info("Database opened successfully !");
|
||||
log.info("${(await getDrones()).length} drones in DB.");
|
||||
}
|
||||
|
||||
Future _onCreate(Database db, int version) async
|
||||
{
|
||||
log.info("Database does not exist, creating a new one.");
|
||||
await db.execute('''
|
||||
CREATE TABLE drones(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
image TEXT
|
||||
)
|
||||
''');
|
||||
}
|
||||
|
||||
Future<int> insertDrone(Drone drone) async
|
||||
{
|
||||
final db = await database;
|
||||
return await db.insert("drones", drone.toMap());
|
||||
}
|
||||
|
||||
Future<List<Drone>> getDrones() async
|
||||
{
|
||||
final db = await database;
|
||||
final maps = await db.query("drones");
|
||||
return maps.map((e) => Drone.fromMap(e)).toList();
|
||||
}
|
||||
|
||||
Future<int> deleteItem(int drone_id) async
|
||||
{
|
||||
final db = await database;
|
||||
return await db.delete("drones", where: "id = ?", whereArgs: [drone_id]);
|
||||
}
|
||||
|
||||
Future closeDb() async
|
||||
{
|
||||
final db = await database;
|
||||
log.info("Closing database.");
|
||||
db.close();
|
||||
_database = null;
|
||||
}
|
||||
}
|
||||
3
lib/dronedb.dart
Normal file
3
lib/dronedb.dart
Normal file
@ -0,0 +1,3 @@
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
|
||||
|
||||
@ -1,7 +1,25 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:rtime/db/db_helper.dart';
|
||||
import 'package:rtime/models/drone.dart';
|
||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
|
||||
void main() {
|
||||
if(Platform.isWindows || Platform.isLinux)
|
||||
{
|
||||
sqfliteFfiInit();
|
||||
databaseFactory = databaseFactoryFfi;
|
||||
}
|
||||
|
||||
Logger.root.level = Level.ALL;
|
||||
Logger.root.onRecord.listen((record) =>
|
||||
print('${record.level.name}: ${record.time}: ${record.message}')
|
||||
);
|
||||
runApp(const MyApp());
|
||||
|
||||
//DbHelper.instance.closeDb();
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
@ -64,6 +82,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
// _counter without calling setState(), then the build method would not be
|
||||
// called again, and so nothing would appear to happen.
|
||||
_counter++;
|
||||
DbHelper.instance.insertDrone(Drone(name: "skibidi drone"));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
24
lib/models/drone.dart
Normal file
24
lib/models/drone.dart
Normal file
@ -0,0 +1,24 @@
|
||||
import 'package:image/image.dart' as img;
|
||||
|
||||
class Drone
|
||||
{
|
||||
final int? id;
|
||||
final String name;
|
||||
//final img.Image image;
|
||||
|
||||
Drone ({this.id, required this.name}); //required this.image});
|
||||
|
||||
factory Drone.fromMap(Map<String, dynamic> map) => Drone
|
||||
(
|
||||
id: map["id"],
|
||||
name: map["name"],
|
||||
//image: img.decodeJpg(map["image"])!,
|
||||
);
|
||||
|
||||
Map<String, dynamic> toMap() =>
|
||||
{
|
||||
"id": id,
|
||||
"name": name,
|
||||
//"image": img.encodeJpg(image),
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user