Skip to main content

gbaas_sdk 1.0.0 copy "gbaas_sdk: ^1.0.0" to clipboard
gbaas_sdk: ^1.0.0 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');
}
0
likes
0
points
47
downloads

Publisher

unverified uploader

Weekly Downloads

Dart/Flutter SDK for BaaS (Backend as a Service) - A complete Supabase alternative with auth, database, storage, realtime, functions, and admin APIs.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

http, web_socket_channel

More

Packages that depend on gbaas_sdk