t_db 1.4.0
t_db: ^1.4.0 copied to clipboard
TDB<T> is a base abstract class for a generic binary database.It is designed to provide type-safe, object-oriented (OOP) database operations for any user-defined type `T`.
import 'package:t_db/t_db.dart';
void main() async {
final db = TDB.getInstance();
await db.open(
'test.db',
config: DBConfig.getDefault().copyWith(saveLocalDBLock: false),
);
db.stream.listen((event) {
print(
'Type: ${event.type} UniqueId: ${event.uniqueFieldId} - ID: ${event.id}',
);
});
print(db.isDataRecordCreatedExists);
db.setAdapter<User>(UserAdapter());
db.setAdapter<Car>(CarAdapter());
final box = db.getBox<User>();
final carBox = db.getBox<Car>();
// final id = await box.add(User(name: 'ThanCoder'));
// await carBox.add(Car(userId: id, name: 'ThanCoder Car $id'));
print(await box.getAll());
print(await carBox.getAll());
await db.close();
}
class UserAdapter extends TDAdapter<User> {
@override
List<HBRelation> relations() {
return [
HBRelation(
targetType: Car,
foreignKey: 'userId',
onDelete: RelationAction.cascade,
),
];
}
@override
User fromMap(Map<String, dynamic> map) {
return User.fromMap(map);
}
@override
int getUniqueFieldId() {
return 1; // must be unique for each model
}
@override
Map<String, dynamic> toMap(User value) {
return value.toMap();
}
@override
int getId(User value) {
return value.autoId;
}
}
class CarAdapter extends TDAdapter<Car> {
@override
getFieldValue(Car value, String fieldName) {
if (fieldName == 'userId') return value.userId;
}
@override
Car fromMap(Map<String, dynamic> map) {
return Car.fromMap(map);
}
@override
int getUniqueFieldId() {
return 2;
}
@override
Map<String, dynamic> toMap(Car value) {
return value.toMap();
}
@override
int getId(Car value) {
return value.autoId;
}
}
class User {
final int autoId;
final String name;
User({this.autoId = 0, required this.name});
Map<String, dynamic> toMap() {
return <String, dynamic>{'autoId': autoId, 'name': name};
}
factory User.fromMap(Map<String, dynamic> map) {
return User(autoId: map['autoId'] as int, name: map['name'] as String);
}
@override
String toString() {
return 'ID: $autoId - Name: $name';
}
User copyWith({int? autoId, String? name}) {
return User(autoId: autoId ?? this.autoId, name: name ?? this.name);
}
}
class Car {
final int autoId;
final int userId;
final String name;
Car({this.autoId = 0, required this.userId, required this.name});
@override
String toString() {
return 'ID: $autoId - Name: $name userId: $userId';
}
Map<String, dynamic> toMap() {
return <String, dynamic>{'autoId': autoId, 'userId': userId, 'name': name};
}
factory Car.fromMap(Map<String, dynamic> map) {
return Car(
autoId: map['autoId'] as int,
userId: map['userId'] as int,
name: map['name'] as String,
);
}
}
class BoxListener implements TBoxEventListener {
@override
void onTBoxDatabaseChanged(TBEventType event, int? id) {
print('[BoxListener]: event:$event - id: $id');
}
}
class DBListener implements TBEventListener {
@override
void onTBDatabaseChanged(TBEventType event, int uniqueFieldId, int? id) {
print(
'[DBListener]: event:$event - uniqueFieldId: $uniqueFieldId - id: $id',
);
}
}