flutter_tether 1.4.10
flutter_tether: ^1.4.10 copied to clipboard
A command-line tool and builders for generating Supabase-related Dart code.
Flutter Tether #
Tether is an opinionated library that connects Supabase and Flutter applications with automatic code generation, local SQLite caching, and powerful utilities for building robust mobile apps.
π What is Tether? #
Tether bridges the gap between Supabase's powerful backend and Flutter's frontend by providing:
- ποΈ Automatic Local Database Management - SQLite with automatic migrations and schema mirroring
- π§ Code Generation - Dart models, query builders, and managers from your Supabase schema
- π Seamless Synchronization - Optimistic updates, caching, and conflict resolution
- β‘ Real-time Updates - Built-in Supabase real-time subscription support
- π Full-Text Search - Leverage Postgres FTS capabilities directly in Flutter
- π Authentication Management - Complete auth flow with profile management
- π± Background Services - Persistent job queue for background processing
- βοΈ User Preferences - Type-safe settings management
- π° Feed Management - Paginated content feeds with search support
π Documentation #
Complete documentation is available at: https://cspecter.github.io/flutter_tether/
π οΈ Technology Stack #
- Supabase - Backend as a Service
- SQLite Async - Local database
- Riverpod - State management (optional but recommended)
- flutter_background_service - Background processing (optional)
π Quick Start #
1. Installation #
# Core dependencies
flutter pub add tether_libs supabase_flutter sqlite_async sqlite3_flutter_libs supabase equatable uuid
# Code generator
flutter pub add -d tether
# Optional: For Riverpod features
flutter pub add flutter_riverpod
# Optional: For background services
flutter pub add flutter_background_service
2. Configuration #
Create a tether.yaml
file in your project root:
database:
host: TETHER_SUPABASE_HOST
port: TETHER_PORT_NAME
database: TETHER_DB_NAME
username: TETHER_DB_USERNAME
password: TETHER_DB_PASSWORD
ssl: TETHER_SSL
generation:
output_directory: lib/database
exclude_tables:
- '_realtime.*'
- 'auth.*'
- 'storage.*'
models:
enabled: true
filename: models.g.dart
suffix: Model
client_managers:
enabled: true
use_riverpod: true
authentication:
enabled: true
profile_table: 'profiles'
background_services:
enabled: true
user_preferences:
enabled: true
Create a .env
file with your Supabase credentials:
TETHER_SUPABASE_HOST=your_supabase_host
TETHER_PORT_NAME=5432
TETHER_DB_NAME=your_database_name
TETHER_DB_USERNAME=your_database_username
TETHER_DB_PASSWORD=your_database_password
TETHER_SSL=true
3. Generate Code #
dart run flutter_tether --config tether.yaml
4. Basic Usage #
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:your_app/database/database.dart';
import 'package:your_app/database/models.g.dart';
class MyWidget extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
// Access the database
final db = ref.watch(databaseProvider);
// Use generated models and managers
return db.when(
data: (database) => FutureBuilder<List<BookModel>>(
future: database.bookManager.getAll(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
final book = snapshot.data![index];
return ListTile(
title: Text(book.title),
subtitle: Text(book.description ?? ''),
);
},
);
}
return CircularProgressIndicator();
},
),
loading: () => CircularProgressIndicator(),
error: (error, stack) => Text('Error: $error'),
);
}
}
π― Key Features #
Automatic Code Generation #
- Models: Type-safe Dart classes from your database schema
- Managers: CRUD operations with caching and sync
- Query Builders: Fluent API for complex queries
- Providers: Ready-to-use Riverpod providers
Local-First Architecture #
- SQLite database automatically mirrors your Supabase schema
- Optimistic updates for instant UI feedback
- Automatic conflict resolution and synchronization
- Works offline with automatic sync when reconnected
Advanced Features #
- Authentication Manager: Complete auth flow with profile management
- Background Services: Persistent job queue for long-running tasks
- User Preferences: Type-safe settings with reactive updates
- Feed Management: Paginated feeds with search and filtering
- Full-Text Search: Leverage Postgres FTS in your Flutter app
π€ Contributing #
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
π License #
This project is licensed under the MIT License - see the LICENSE file for details.
π Support #
- π Documentation
- π Issue Tracker
- π¬ Discussions
π Acknowledgments #
- Supabase for providing an amazing backend platform
- SQLite for the reliable local database
- SQLite Async for asynchronous database operations
- Riverpod for excellent state management
Ready to supercharge your Flutter + Supabase development? Get started with the documentation today!