Skip to content

Instantly share code, notes, and snippets.

@kleberandrade
Created September 9, 2019 16:04
Show Gist options
  • Save kleberandrade/f82a02665de692cc08e83405d52caf92 to your computer and use it in GitHub Desktop.
Save kleberandrade/f82a02665de692cc08e83405d52caf92 to your computer and use it in GitHub Desktop.
import 'package:emprestimo_objetos/models/stuff.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
class StuffProvider {
static final StuffProvider _instance = StuffProvider.internal();
factory StuffProvider() => _instance;
StuffProvider.internal();
Database _db;
Future<Database> get db async {
if (_db != null) {
return _db;
} else {
_db = await initDb();
return _db;
}
}
Future<Database> initDb() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, "emprestimo_objeto.db");
return openDatabase(path, version: 1,
onCreate: (Database db, int newerVersion) async {
await db.execute("CREATE TABLE $tableStuff("
"$columnId INTEGER PRIMARY KEY, "
"$columnFriendName TEXT, "
"$columnFriendPhone TEXT, "
"$columnDescription TEXT, "
"$columnPicture TEXT, "
"$columnDepartureDate TEXT, "
"$columnReturnDate TEXT)");
});
}
Future<Stuff> save(Stuff stuff) async {
Database database = await db;
stuff.id = await database.insert(tableStuff, stuff.toMap());
return stuff;
}
Future<Stuff> getById(int id) async {
Database database = await db;
List<Map> maps = await database.query(tableStuff,
columns: [
'$columnId',
'$columnFriendName',
'$columnFriendPhone',
'$columnDescription',
'$columnPicture',
'$columnDepartureDate',
'$columnReturnDate'
],
where: '$columnId = ?',
whereArgs: [id]);
if (maps.length > 0) {
return Stuff.fromMap(maps.first);
} else {
return null;
}
}
Future<int> delete(int id) async {
Database database = await db;
return await database
.delete(tableStuff, where: '$columnId = ?', whereArgs: [id]);
}
Future<int> update(Stuff stuff) async {
Database database = await db;
return await database.update(tableStuff, stuff.toMap(),
where: '$columnId = ?', whereArgs: [stuff.id]);
}
Future<List<Stuff>> getAll() async {
Database database = await db;
List listMap = await database.rawQuery("SELECT * FROM $tableStuff");
List<Stuff> stuffList = listMap.map((x) => Stuff.fromMap(x)).toList();
return stuffList;
}
Future<List<Stuff>> getAllReturnedStuffs() async {
List<Stuff> stuffList = await getAll();
return stuffList.where((x) => x.stuffReturnDate != null).toList();
}
Future<List<Stuff>> getAllDepartureStuffs() async {
List<Stuff> stuffList = await getAll();
return stuffList.where((x) => x.stuffReturnDate == null).toList();
}
Future<int> getCount() async {
Database database = await db;
return Sqflite.firstIntValue(
await database.rawQuery("SELECT COUNT(*) FROM $tableStuff"));
}
Future close() async {
Database database = await db;
database.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment