Orientação gerada a partir de informações públicas. Apenas para referência.
Um cliente puro em Dart para o SurrealDB com reconexão automática e funções tipadas. Projetado para integração perfeita em múltiplas plataformas, permite que desenvolvedores interajam com bancos de dados SurrealDB de forma eficiente em aplicações Flutter. O pacote abstrai detalhes de rede de baixo nível, oferecendo uma API limpa para consultas, assinaturas e autenticação. Suas funções tipadas reduzem erros em tempo de execução e melhoram a velocidade de desenvolvimento. Ideal para aplicativos em tempo real que exigem conectividade confiável com o banco de dados.
Casos de uso
Sincronização de dados em tempo real
acesso a banco de dados multiplataforma
Execução de consulta segura por tipo
Reconexão automática após perda de rede
integração de backend sem servidor
Desenvolvimento de aplicativos com foco em offline
Principais recursos
Reconexão automática em perda de conexão
Suporte a função tipada
Implementação pura em Dart
Compatibilidade multiplataforma
Leve e eficiente
Tratamento seguro de autenticação
Indicado para
Desenvolvedores Flutter usando o SurrealDB
Aplicativos que precisam de atualizações em tempo real no banco de dados
Projetos que exigem clientes de banco de dados independentes de plataforma
Desenvolvedores priorizando segurança de tipo
Equipes construindo serviços de backend escaláveis
Aplicações com condições de rede instáveis
Considerações
Requer uma instância em execução do SurrealDB
Limitado a recursos específicos do SurrealDB
Pode ser necessário configuração adicional para consultas complexas
Depende da estabilidade do servidor externo SurrealDB
Não adequado para bancos de dados não-SurrealDB
Configuração de autenticação necessária
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
SurrealDB Client For Dart & Flutter
This is a Dart client library for interacting with SurrealDB, a highly scalable, distributed, and real-time database. This library enables developers to connect to SurrealDB instances, execute queries, authenticate users, and interact with database resources via WebSocket communication.
Features
⚡ Connect and Disconnect: Establish or close a persistent WebSocket connection to a SurrealDB instance.
🔐 Authentication: Authenticate with a token to manage access to the database.
🗄️ Database Interaction: Use namespaces and databases, retrieve user information, and fetch database versions.
🔄 Live Queries: Support for live querying via WebSocket streams.
⚙️ Customizable Options: Set connection options and behavior using SurrealDBOptions.
Installation
Add the following to your pubspec.yaml:
dependencies:surrealdb:^1.0.0
Then run dart pub get or flutter pub get.
Usage
Connecting to SurrealDB
To connect to a SurrealDB, create a SurrealDB client instance and call the connect() method. You can also provide a token for authentication.
import'package:surrealdb/surrealdb.dart';
voidmain() async {
// Create a SurrealDB client instancefinal db = SurrealDB('ws://localhost:8000/rpc', token: 'your-auth-token');
// Connect to the database
db.connect();
// Wait for the connection to be establishedawait db.wait();
// Use a specific namespace and databaseawait db.use('namespace', 'database');
// Fetch version informationfinal version = await db.version();
print('SurrealDB version: $version');
// Close the connection when done
db.close();
}
Authentication
SurrealDB requires authentication to access resources. You can sign up, sign in, and authenticate users using the SurrealDB client.
Signing Up a User
To create a new user:
final token = await db.signup(
user: 'new_user',
pass: 'password123',
namespace: 'namespace',
database: 'database',
access: 'users',
);
print('User signed up with token: $token');
Signing In
To sign in an existing user:
final token = await db.signin(
user: 'existing_user',
pass: 'password123',
namespace: 'namespace',
database: 'database',
access: 'users',
);
print('User signed in with token: $token');
Token Authentication
You can also authenticate with a token:
await db.authenticate('your-auth-token');
Middleware
SurrealDB Flutter client supports middleware that allows you to intercept and modify requests before they are sent to the database. This is particularly useful for implementing token refresh functionality or adding logging.
Adding Middleware
You can add middleware using the addMiddleware method:
db.addMiddleware((method, params, next) async {
// Do something before the requestprint('Before request: $method with params: $params');
// Execute the requestfinal result = awaitnext();
// Do something after the requestprint('After request: $method with result: $result');
return result;
});
Multiple middleware functions can be added, and they will be executed in the order they were added.
Token Refresh Example
Here's how you can implement token refresh using middleware:
db.addMiddleware((method, params, next) async {
try {
// Try to execute the request normallyreturnawaitnext();
} catch (e) {
// If we get an authentication errorif (e.toString().contains('authentication invalid')) {
// Refresh the token (implement your token refresh logic)final newToken = awaitrefreshToken();
// Re-authenticate with the new tokenawait db.authenticate(newToken);
// Retry the original requestreturnawaitnext();
}
// For other errors, just rethrowrethrow;
}
});
This middleware will catch authentication errors, refresh the token, and retry the original request automatically.
Basic Queries
SurrealDB allows executing a variety of commands, including CRUD operations (Create, Read, Update, Delete) via queries. Here's how you can perform simple database operations.
3.1 Create Records
final data = {'title': 'My first post', 'content': 'Hello, SurrealDB!'};
final result = await db.create('posts', data);
print('Created record: $result');
3.2 Read Records
To retrieve records, you can use the select method.
final posts = await db.select('posts');
print('Fetched posts: $posts');
You can also use queries to filter or manipulate the data:
final specificPosts = await db.query(
r'SELECT * FROM posts WHERE title = $title',
{'title': 'My first post'},
);
print('Posts matching criteria: $specificPosts');
3.3 Update Records
Updating records is done by specifying the table and ID of the record:
final updatedData = {'title': 'Updated post title'};
await db.update('posts:id', updatedData);
print('Record updated successfully');