Skip to content

Data Objects

Dustin Catap edited this page Jun 19, 2024 · 2 revisions

A DataObject is a class that represents a table in the database.

Since we are using drift as the database, DataObject classes are generated by using DataTable classes.

// coverage:ignore-file

import 'package:drift/drift.dart';
import 'package:starterkit_app/core/domain/models/data_table.dart';

@DataClassName('PostDataObject')
class PostDataTable extends DataTable {
  IntColumn get postId => integer()();

  IntColumn get userId => integer()();

  TextColumn get title => text()();

  TextColumn get body => text()();
}

After running build_runner, it generates this PostDataObject class:

// coverage:ignore-file
// GENERATED CODE - DO NOT MODIFY BY HAND

class PostDataObject extends DataClass implements Insertable<PostDataObject> {
  final int id;
  final int postId;
  final int userId;
  final String title;
  final String body;
  const PostDataObject(
      {required this.id,
      required this.postId,
      required this.userId,
      required this.title,
      required this.body});
  @override
  Map<String, Expression> toColumns(bool nullToAbsent) {
    final map = <String, Expression>{};
    map['id'] = Variable<int>(id);
    map['post_id'] = Variable<int>(postId);
    map['user_id'] = Variable<int>(userId);
    map['title'] = Variable<String>(title);
    map['body'] = Variable<String>(body);
    return map;
  }

  factory PostDataObject.fromJson(Map<String, dynamic> json,
      {ValueSerializer? serializer}) {
    serializer ??= driftRuntimeOptions.defaultSerializer;
    return PostDataObject(
      id: serializer.fromJson<int>(json['id']),
      postId: serializer.fromJson<int>(json['postId']),
      userId: serializer.fromJson<int>(json['userId']),
      title: serializer.fromJson<String>(json['title']),
      body: serializer.fromJson<String>(json['body']),
    );
  }
  @override
  Map<String, dynamic> toJson({ValueSerializer? serializer}) {
    serializer ??= driftRuntimeOptions.defaultSerializer;
    return <String, dynamic>{
      'id': serializer.toJson<int>(id),
      'postId': serializer.toJson<int>(postId),
      'userId': serializer.toJson<int>(userId),
      'title': serializer.toJson<String>(title),
      'body': serializer.toJson<String>(body),
    };
  }

Read more about on how to create a DataObject in the Drift documentation.