114 lines
3.6 KiB
Dart
114 lines
3.6 KiB
Dart
import 'box_user.dart';
|
|
import 'model.dart';
|
|
import 'objectbox.g.dart'; // created by `flutter pub run build_runner build`
|
|
|
|
/// Provides access to the ObjectBox Store throughout the app.
|
|
///
|
|
/// Create this in the apps main function.
|
|
class ObjectBox {
|
|
/// The Store of this app.
|
|
late final Store store;
|
|
|
|
/// A Box of notes.
|
|
late final Box<Note> noteBox;
|
|
|
|
/// A Box of user.
|
|
late final Box<User> userBox;
|
|
|
|
ObjectBox._create(this.store) {
|
|
noteBox = Box<Note>(store);
|
|
userBox = Box<User>(store);
|
|
|
|
// Add some demo data if the box is empty.
|
|
if (noteBox.isEmpty()) {
|
|
_putDemoData();
|
|
}
|
|
|
|
userBox.removeAll();
|
|
|
|
// Add some demo data if the box is empty.
|
|
if (userBox.isEmpty()) {
|
|
_putUserAdminData();
|
|
}
|
|
}
|
|
|
|
/// Create an instance of ObjectBox to use throughout the app.
|
|
static Future<ObjectBox> create() async {
|
|
// Future<Store> openStore() {...} is defined in the generated objectbox.g.dart
|
|
final store = await openStore();
|
|
return ObjectBox._create(store);
|
|
}
|
|
|
|
void _putDemoData() {
|
|
final demoNotes = [
|
|
Note('Quickly add a note by writing text and pressing Enter'),
|
|
Note('Delete notes by tapping on one'),
|
|
Note('Write a demo app for ObjectBox')
|
|
];
|
|
store.runInTransactionAsync(TxMode.write, _putNotesInTx, demoNotes);
|
|
}
|
|
|
|
String getUserAvatar(int id_utilisateur) {
|
|
final query =
|
|
userBox.query(User_.id_utilisateur.equals(id_utilisateur)).build();
|
|
var p = query.findFirst();
|
|
return p!.photo;
|
|
}
|
|
|
|
void _putUserAdminData() {
|
|
//addUSer(0, 'root', 'admim', 'admin', '');
|
|
}
|
|
|
|
Stream<List<Note>> getNotes() {
|
|
// Query for all notes, sorted by their date.
|
|
// https://docs.objectbox.io/queries
|
|
final builder = noteBox.query().order(Note_.date, flags: Order.descending);
|
|
// Build and watch the query,
|
|
// set triggerImmediately to emit the query immediately on listen.
|
|
return builder
|
|
.watch(triggerImmediately: true)
|
|
// Map it to a list of notes to be used by a StreamBuilder.
|
|
.map((query) => query.find());
|
|
}
|
|
|
|
static void _putNotesInTx(Store store, List<Note> notes) =>
|
|
store.box<Note>().putMany(notes);
|
|
|
|
/// Add a note within a transaction.
|
|
///
|
|
/// To avoid frame drops, run ObjectBox operations that take longer than a
|
|
/// few milliseconds, e.g. putting many objects, in an isolate with its
|
|
/// own Store instance.
|
|
/// For this example only a single object is put which would also be fine if
|
|
/// done here directly.
|
|
Future<void> addNote(String text) =>
|
|
store.runInTransactionAsync(TxMode.write, _addNoteInTx, text);
|
|
|
|
/// Note: due to [dart-lang/sdk#36983](https://github.com/dart-lang/sdk/issues/36983)
|
|
/// not using a closure as it may capture more objects than expected.
|
|
/// These might not be send-able to an isolate. See Store.runAsync for details.
|
|
static void _addNoteInTx(Store store, String text) {
|
|
// Perform ObjectBox operations that take longer than a few milliseconds
|
|
// here. To keep it simple, this example just puts a single object.
|
|
store.box<Note>().put(Note(text));
|
|
}
|
|
|
|
Future<void> addUSer(int _id_utilisateur, String _login, String _nom,
|
|
String _prenom, String _photo) =>
|
|
store.runInTransactionAsync(
|
|
TxMode.write,
|
|
_addUserInTx,
|
|
User(
|
|
id_utilisateur: _id_utilisateur,
|
|
login: _login,
|
|
nom: _nom,
|
|
prenom: _prenom,
|
|
photo: _photo));
|
|
|
|
static void _addUserInTx(Store store, _User) {
|
|
// Perform ObjectBox operations that take longer than a few milliseconds
|
|
// here. To keep it simple, this example just puts a single object.
|
|
store.box<User>().put(_User);
|
|
}
|
|
}
|