supabase_schema

The core annotation package for the Supabase Schema Library. This package provides the annotations and base types used to define your Supabase database schema in Dart.

Installation

Add this package to your pubspec.yaml:

dependencies:
  supabase_schema: latest_version

Usage

Define your schema by extending SupabaseSchema and annotating it with @Schema.

Basic Schema

import 'package:supabase_schema/supabase_schema.dart';

@Schema(tableName: 'todos', baseModelName: 'Todo')
class TodoSchema extends SupabaseSchema {
  // Define fields using the Field class
  final id = Field.intId();
  final title = Field<String>('title');
  final isCompleted = Field<bool>('is_completed');

  @override
  List<Model> get models => [
    // Define the models you want to generate
    Model('Todo'), // Generates a Todo class with all fields by default
  ];
}

Fields

Use the Field class to define columns:

  • Field<Type>('column_name'): Standard field.
  • Field.intId(): Integer primary key.
  • Field.stringId(): String primary key.
  • Field.uuid(): UUID field.

Relationships

Use Field.join<TargetModel>() to define relationships:

final user = Field.join<User>().withForeignKey('user_id');

Multiple Models

You can define multiple models from the same schema, useful for different views or operations (e.g., Creation vs. Display):

@override
List<Model> get models => [
  Model('Todo'), // Full model
  Model('CreateTodo').fields([title, isCompleted]), // Model for creation (no ID)
];

Libraries

supabase_schema