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.

BaaS SDK for Dart/Flutter #

Official Dart/Flutter SDK for BaaS (Backend as a Service).

Installation #

Add to your pubspec.yaml:

dependencies:
  baas_sdk:
    path: ../sdk-dart  # Local path
    # or from git:
    # git:
    #   url: https://github.com/giaeulate/baas-golang-1.git
    #   path: sdk-dart

Quick Start #

import 'package:baas_sdk/baas_sdk.dart';

final baas = BaasClient(
  baseUrl: 'http://localhost:8086',
  projectId: 'your-project-id',
);

// Login
await baas.auth.login(email: 'user@example.com', password: 'password');

// Query data
final users = await baas.from('users').select().get();

// Insert data
await baas.from('posts').insert({'title': 'Hello', 'content': 'World'});

// Subscribe to realtime changes
baas.realtime.subscribe('posts', (event) {
  print('Change: ${event.type} - ${event.data}');
});

Modules #

Authentication #

// Register
final session = await baas.auth.register(
  email: 'new@example.com',
  password: 'password123',
);

// Login
final session = await baas.auth.login(
  email: 'user@example.com',
  password: 'password',
);

// MFA Setup
final mfaSetup = await baas.auth.setupMfa();
print('Secret: ${mfaSetup.secret}');
print('QR Code: ${mfaSetup.qrCode}');

// Enable MFA
await baas.auth.enableMfa(code: '123456');

// Password Reset
await baas.auth.forgotPassword(email: 'user@example.com');
await baas.auth.resetPassword(token: 'reset-token', newPassword: 'newpass');

// Logout
await baas.auth.logout();

Database #

// Query with filters
final posts = await baas.from('posts')
    .select()
    .eq('status', 'published')
    .gte('created_at', '2024-01-01')
    .orderDesc('created_at')
    .limit(10)
    .get();

// Get single record
final post = await baas.from('posts').getById('post-id');

// Insert
final newPost = await baas.from('posts').insert({
  'title': 'New Post',
  'content': 'Content here',
});

// Update
await baas.from('posts').update('post-id', {
  'title': 'Updated Title',
});

// Delete
await baas.from('posts').delete('post-id');

// Raw SQL (admin only)
final results = await baas.database.executeRawSql('SELECT * FROM users LIMIT 10');

Filter Operators

.eq('column', value)      // =
.neq('column', value)     // !=
.gt('column', value)      // >
.gte('column', value)     // >=
.lt('column', value)      // <
.lte('column', value)     // <=
.like('column', '%pattern%')
.ilike('column', '%pattern%')  // case insensitive
.isNull('column')
.isNotNull('column')
.inList('column', [1, 2, 3])

Storage #

// Create bucket
final bucket = await baas.storage.createBucket(
  name: 'avatars',
  isPublic: true,
);

// Upload file
final result = await baas.storage.upload(
  bucket: 'avatars',
  path: 'user123/avatar.png',
  bytes: fileBytes,
  filename: 'avatar.png',
);

// List files
final files = await baas.storage.listFiles(bucketId: 'avatars');

// Get download URL
final url = await baas.storage.getPresignedUrl(
  fileId: 'file-id',
  expiresIn: 3600, // 1 hour
);

// Delete file
await baas.storage.deleteFile('file-id');

Realtime #

// Connect (auto-connects on first subscription)
await baas.realtime.connect();

// Subscribe to all changes
final sub = baas.realtime.subscribe('posts', (event) {
  print('Event: ${event.type}');
  print('Table: ${event.table}');
  print('Old data: ${event.oldData}');
  print('New data: ${event.newData}');
});

// Subscribe to specific events
baas.realtime.onInsert('posts', (event) => print('New post!'));
baas.realtime.onUpdate('posts', (event) => print('Post updated!'));
baas.realtime.onDelete('posts', (event) => print('Post deleted!'));

// Connection state
baas.realtime.onConnectionStateChange = (state) {
  print('Connection: $state');
};

// Unsubscribe
sub.unsubscribe();

// Disconnect
baas.realtime.disconnect();

Edge Functions #

// Execute function
final result = await baas.functions.invoke(
  'function-id',
  body: {'key': 'value'},
);

if (result.isSuccess) {
  print('Result: ${result.data}');
} else {
  print('Error: ${result.error}');
}

// List functions
final functions = await baas.functions.list();

// Create function
await baas.functions.create(
  name: 'my-function',
  code: 'return { message: "Hello!" };',
);

Flutter Integration #

Provider Setup #

// main.dart
import 'package:flutter/material.dart';
import 'package:baas_sdk/baas_sdk.dart';

final baas = BaasClient(
  baseUrl: 'http://10.0.2.2:8086', // Android emulator localhost
  projectId: 'your-project-id',
);

void main() {
  runApp(MyApp());
}

With Riverpod #

final baasProvider = Provider((ref) => BaasClient(
  baseUrl: 'http://10.0.2.2:8086',
  projectId: 'your-project-id',
));

final authProvider = StreamProvider((ref) {
  final baas = ref.watch(baasProvider);
  // Return auth state stream
});

final postsProvider = FutureProvider((ref) async {
  final baas = ref.watch(baasProvider);
  return baas.from('posts').select().get();
});

Persist Session #

import 'package:shared_preferences/shared_preferences.dart';

// Save token after login
final session = await baas.auth.login(email: email, password: password);
final prefs = await SharedPreferences.getInstance();
await prefs.setString('access_token', session.accessToken);

// Restore on app start
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('access_token');
if (token != null) {
  await baas.auth.restoreSession(token);
}

Error Handling #

try {
  await baas.auth.login(email: email, password: password);
} on AuthException catch (e) {
  if (e.data?['mfa_required'] == true) {
    // Handle MFA
    Navigator.push(context, MfaScreen(tempToken: e.data['temp_token']));
  } else {
    print('Auth error: ${e.message}');
  }
} on ValidationException catch (e) {
  print('Validation error: ${e.errors}');
} on BaasException catch (e) {
  print('Error: ${e.message} (${e.statusCode})');
}

License #

MIT

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