SDK Dart ainda não disponível. A comunidade está trabalhando nisso. Enquanto isso, use a REST API diretamente — é simples e funciona hoje.
Quer ajudar ou acompanhar o progresso? Acesse as GitHub Discussions →
Usando a REST API diretamente
O SuperDB expõe APIs REST padrão. Com o pacote http do Dart, você pode fazer signup, login e queries de banco de dados sem nenhum SDK específico.
A autenticação usa Bearer tokens JWT — o mesmo padrão do @superdb/auth-js, só que chamado via HTTP.
Dependências necessárias
Adicione ao pubspec.yaml:
dependencies:
flutter:
sdk: flutter
http: ^1.2.0
flutter_secure_storage: ^9.0.0 # armazenar JWT de forma segura
shared_preferences: ^2.2.0 # alternativa simples
Signup e login
A API de auth do SuperDB segue o padrão GoTrue. Os endpoints são:
- Signup:
POST /auth/v1/signup - Login:
POST /auth/v1/token?grant_type=password
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class AuthService {
static const String baseUrl = 'https://auth.superdb.com.br';
static const String anonKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
final _storage = const FlutterSecureStorage();
Map<String, String> get _headers => {
'Content-Type': 'application/json',
'apikey': anonKey,
};
Future<Map<String, dynamic>?> signUp(String email, String password) async {
final response = await http.post(
Uri.parse('$baseUrl/auth/v1/signup'),
headers: _headers,
body: jsonEncode({'email': email, 'password': password}),
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
await _storage.write(key: 'access_token', value: data['access_token']);
await _storage.write(key: 'refresh_token', value: data['refresh_token']);
return data;
}
throw Exception('Signup falhou: ${response.body}');
}
Future<Map<String, dynamic>?> signIn(String email, String password) async {
final response = await http.post(
Uri.parse('$baseUrl/auth/v1/token?grant_type=password'),
headers: _headers,
body: jsonEncode({'email': email, 'password': password}),
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
await _storage.write(key: 'access_token', value: data['access_token']);
await _storage.write(key: 'refresh_token', value: data['refresh_token']);
return data;
}
throw Exception('Login falhou: ${response.body}');
}
Future<String?> getToken() async {
return await _storage.read(key: 'access_token');
}
Future<void> signOut() async {
final token = await getToken();
if (token != null) {
await http.post(
Uri.parse('$baseUrl/auth/v1/logout'),
headers: { ..._headers, 'Authorization': 'Bearer $token' },
);
}
await _storage.deleteAll();
}
}
Queries no banco de dados
O banco de dados é acessível via PostgREST. Use o JWT do usuário no header Authorization — o RLS filtra automaticamente os dados conforme as policies configuradas.
import 'dart:convert';
import 'package:http/http.dart' as http;
class DatabaseService {
// Dados: api.superdb.com.br (NÃO auth.superdb.com.br)
// Path: raiz da tabela, sem prefixo /rest/v1/
static const String dataUrl = 'https://api.superdb.com.br';
static const String anonKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
Future<List<dynamic>> fetchPosts(String token) async {
// Correto: api.superdb.com.br/posts (sem /rest/v1/)
final response = await http.get(
Uri.parse('$dataUrl/posts?order=created_at.desc&limit=20'),
headers: {
'Authorization': 'Bearer $token',
'apikey': anonKey,
'Content-Type': 'application/json',
},
);
if (response.statusCode == 200) {
return jsonDecode(response.body) as List<dynamic>;
}
throw Exception('Query falhou: ${response.statusCode}');
}
Future<void> insertPost(String token, String title, String body) async {
final response = await http.post(
Uri.parse('$dataUrl/posts'),
headers: {
'Authorization': 'Bearer $token',
'apikey': anonKey,
'Content-Type': 'application/json',
'Prefer': 'return=minimal',
},
body: jsonEncode({'title': title, 'body': body}),
);
if (response.statusCode != 201) {
throw Exception('Insert falhou: ${response.body}');
}
}
}
Quando o SDK Dart estiver disponível
O SDK nativo simplificará esse código consideravelmente — sem headers manuais, com tipagem Dart completa e refresh automático de tokens. Acompanhe o progresso:
- GitHub Discussions — vote no SDK Dart
- Referência completa da API REST
- Como funcionam os JWT tokens
- Expo (React Native) — SDK JS disponível hoje