supabase_flutter_ultra 0.1.0
supabase_flutter_ultra: ^0.1.0 copied to clipboard
Offline-first wrapper for Supabase Flutter with caching, offline write queue, delta sync, and conflict resolution — fully compatible with existing Supabase APIs.
import 'package:flutter/material.dart';
import 'package:supabase_flutter_ultra/supabase_flutter_ultra.dart';
import 'screens/todo_screen.dart';
/// Replace with your Supabase project credentials.
const supabaseUrl = 'https://your-project.supabase.co';
const supabaseAnonKey = 'your-anon-key';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SupabaseUltra.initialize(
url: supabaseUrl,
anonKey: supabaseAnonKey,
config: UltraConfig(
// Cache todos for 2 hours; use cache-first for fast UI
defaultCachePolicy: CachePolicy(
maxAge: Duration(hours: 2),
maxEntries: 500,
strategy: CacheStrategy.cacheFirstThenNetwork,
),
// Resolve conflicts by the most recently updated version
defaultConflictPolicy: ConflictPolicy.lastWriteWins,
// Start syncing 2 seconds after reconnect
autoSyncOnReconnect: true,
reconnectSyncDelay: Duration(seconds: 2),
// Sync every 15 minutes in the background
periodicSyncInterval: Duration(minutes: 15),
// Per-table overrides
tableConfigs: {
'todos': TableSyncConfig(
cachePolicy: CachePolicy(
maxAge: Duration(hours: 24),
strategy: CacheStrategy.cacheFirstThenNetwork,
),
conflictPolicy: ConflictPolicy.lastWriteWins,
primaryKey: 'id',
updatedAtField: 'updated_at',
),
},
enableDebugLogging: true,
),
debug: true,
);
runApp(const UltraExampleApp());
}
class UltraExampleApp extends StatelessWidget {
const UltraExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Ultra Todos',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorSchemeSeed: Colors.deepPurple,
useMaterial3: true,
),
home: const TodoScreen(),
);
}
}