TDB2 Database Like TDB

Example

  final db = TDB2.getInstance();
  db.registerAdapterNotExists<Post>(PostAdapter());
  db.registerAdapterNotExists<PostContent>(PostContentAdapter());

  await db.open('test.db');

  final box = db.getBox<Post>();
  final content = db.getBox<PostContent>();

  // await box.add(Post(title: 'post one'));
  // await box.add(Post(title: 'post two'));
  // await box.add(Post(title: 'post three'));

  // await box.deleteById(4, childItemsWillDelete: true);
  // final list = await box.getAll();

  // await box.updateById(6, list.first.copyWith(title: 'updated post three'));
  // await box.updateById(1,Post(title: 'post test update') );

  for (var post in await box.getAll()) {
    print('id: ${post.id} - title: ${post.title}');
    // await content.add(
    //   PostContent(postId: post.id, content: 'Content ${post.title}'),
    // );
  }
  for (var co in await content.getAll()) {
    print('id: ${co.id} - parentId: ${co.postId} - content: ${co.content}');
  }
  // print(await box.getAll());

  print('lastIndex: ${db.lastIndex}');
  print('magic: ${db.magic}');
  print('version: ${db.version}');
  print('deletedCount: ${db.deletedCount}');
  print('deletedSize: ${db.deletedSize}');

  await db.close();

  print(
    await TDB2.getHeaderFromPath(
      '/home/thancoder/projects/plugins/t_db/test.db',
    ),
  );

Register Adapter

class PostAdapter extends TDB2Adapter<Post> {
  @override
  int get adapterTypeId => 1; //unique field id

  @override
  Post fromMap(Map<String, dynamic> map) {
    return Post.fromJson(map);
  }

  @override
  int getId(Post value) {
    return value.id;
  }

  @override
  Map<String, dynamic> toMap(Post value) {
    return value.toJson();
  }
}

class PostContentAdapter extends TDB2Adapter<PostContent> {
  @override
  int get adapterTypeId => 2;

  @override
  int parentId(PostContent value) {
    return value.postId; // parent id
  }

  @override
  PostContent fromMap(Map<String, dynamic> map) {
    return PostContent.fromJson(map);
  }

  @override
  int getId(PostContent value) {
    return value.id;
  }

  @override
  Map<String, dynamic> toMap(PostContent value) {
    return value.toJson();
  }
}

Create Model

class Post {
  final int id; //auto generated id
  final String title;

  const Post({this.id = 0, required this.title});

  Map<String, dynamic> toJson() {
    return {'id': id, 'title': title};
  }

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(id: json['id'], title: json['title']);
  }

  Post copyWith({int? id, String? title}) {
    return Post(id: id ?? this.id, title: title ?? this.title);
  }
}

class PostContent {
  final int id; //auto generated id
  final int postId;
  final String content;

  const PostContent({this.id = 0, required this.postId, required this.content});

  Map<String, dynamic> toJson() {
    return {'id': id, 'postId': postId, 'content': content};
  }

  factory PostContent.fromJson(Map<String, dynamic> json) {
    return PostContent(
      id: json['id'],
      postId: json['postId'],
      content: json['content'],
    );
  }
}

Libraries

t_db2