gbaas_sdk 1.0.3
gbaas_sdk: ^1.0.3 copied to clipboard
Dart/Flutter SDK for BaaS (Backend as a Service) - A complete Supabase alternative with auth, database, storage, realtime, functions, and admin APIs.
example/main.dart
import 'dart:typed_data';
import 'package:gbaas_sdk/gbaas_sdk.dart';
void main() async {
// Initialize client
final baas = BaasClient(
baseUrl: 'http://localhost:8086',
projectId: 'a42a8a9bcc55148eac3c0c050a30eeae',
);
// ============ AUTHENTICATION ============
print('=== Authentication ===');
// Register a new user
try {
final session = await baas.auth.register(
email: 'test@example.com',
password: 'password123',
);
print('Registered: ${session.user.email}');
} catch (e) {
print('Registration failed (user may exist): $e');
}
// Login
try {
final session = await baas.auth.login(
email: 'test@example.com',
password: 'password123',
);
print('Logged in: ${session.user.email}');
print('Token: ${session.accessToken.substring(0, 20)}...');
} on AuthException catch (e) {
if (e.data?['mfa_required'] == true) {
print('MFA required, verify with code');
// await baas.auth.verifyMfa(tempToken: e.data['temp_token'], code: '123456');
}
}
// ============ DATABASE ============
print('\n=== Database ===');
// Get all tables
final schemas = await baas.database.getSchemas();
print('Tables: ${schemas.map((s) => s.name).join(', ')}');
// Query data with fluent API
final users = await baas.from('users')
.select()
.eq('role', 'admin')
.orderDesc('created_at')
.limit(10)
.get();
print('Admin users: ${users.length}');
// Insert data
final newPost = await baas.from('posts').insert({
'title': 'Hello from Flutter!',
'content': 'This is a test post',
'author_id': baas.auth.currentUser?.id,
});
print('Created post: ${newPost['id']}');
// Update data
await baas.from('posts').update(newPost['id'], {
'title': 'Updated title',
});
print('Updated post');
// Query with filters
final recentPosts = await baas.from('posts')
.select()
.gte('created_at', '2024-01-01')
.orderDesc('created_at')
.limit(5)
.get();
print('Recent posts: ${recentPosts.length}');
// Delete
await baas.from('posts').delete(newPost['id']);
print('Deleted post');
// ============ STORAGE ============
print('\n=== Storage ===');
// List buckets
final buckets = await baas.storage.listBuckets();
print('Buckets: ${buckets.map((b) => b.name).join(', ')}');
// Create a bucket
try {
final bucket = await baas.storage.createBucket(
name: 'avatars',
isPublic: true,
);
print('Created bucket: ${bucket.name}');
} catch (e) {
print('Bucket may exist: $e');
}
// Upload a file
final fileContent = 'Hello, World!';
final result = await baas.storage.uploadString(
bucket: 'avatars',
path: 'test.txt',
content: fileContent,
filename: 'test.txt',
);
print('Uploaded file: ${result.path}');
// List files
final files = await baas.storage.listFiles(bucketId: 'avatars');
print('Files in avatars: ${files.length}');
// Get presigned URL
if (files.isNotEmpty) {
final url = await baas.storage.getPresignedUrl(fileId: files.first.id);
print('Presigned URL: $url');
}
// ============ REALTIME ============
print('\n=== Realtime ===');
// Set up connection state listener
baas.realtime.onConnectionStateChange = (state) {
print('Connection state: $state');
};
// Subscribe to all changes on posts table
final subscription = baas.realtime.subscribe('posts', (event) {
print('Realtime event: ${event.type.value} on ${event.table}');
print(' Data: ${event.data}');
});
print('Subscribed to posts table');
// Subscribe to inserts only
baas.realtime.onInsert('comments', (event) {
print('New comment: ${event.newData}');
});
// Keep connection open for a bit (in real app, this would be managed by app lifecycle)
await Future.delayed(Duration(seconds: 2));
// Unsubscribe
subscription.unsubscribe();
print('Unsubscribed');
// ============ FUNCTIONS ============
print('\n=== Functions ===');
// List functions
final functions = await baas.functions.list();
print('Functions: ${functions.map((f) => f.name).join(', ')}');
// Execute a function
if (functions.isNotEmpty) {
final result = await baas.functions.invoke(
functions.first.id,
body: {'message': 'Hello from Flutter!'},
);
print('Function result: ${result.data}');
}
// ============ CLEANUP ============
print('\n=== Cleanup ===');
// Logout
await baas.auth.logout();
print('Logged out');
// Dispose client
baas.dispose();
print('Client disposed');
}