搜索插件、代码仓与 APP 分类

插件详情v1.1.2

surrealdb

纯 Dart 编写的 SurrealDB 客户端。自动重连,类型化函数

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
61
喜欢数
38
Pub 分数
150

安装插件

flutter pub add surrealdb

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

SurrealDB 的纯 Dart 客户端,支持自动重连和类型化函数。专为跨多个平台的无缝集成而设计,使开发者能够高效地在 Flutter 应用中与 SurrealDB 数据库交互。该包抽象了底层网络细节,提供了查询、订阅和身份验证的简洁 API。其类型安全的函数可减少运行时错误并提升开发速度。非常适合需要可靠数据库连接的实时应用。

适合场景

  • 实时数据同步
  • 跨平台数据库访问
  • 类型安全的查询执行
  • 网络丢失后的自动重连
  • 无服务器后端集成
  • 离线优先的应用程序开发

主要特点

  • 连接丢失时自动重连
  • 类型化函数支持
  • 纯 Dart 实现
  • 多平台兼容性
  • 轻便高效
  • 安全的身份验证处理

适合对象

  • 使用 SurrealDB 的 Flutter 开发人员
  • 需要实时数据库更新的应用
  • 需要跨平台数据库客户端的项目
  • 开发者优先考虑类型安全
  • 构建可扩展后端服务的团队
  • 网络状况不可靠的应用程序

使用建议

  • 需要一个正在运行的 SurrealDB 实例
  • 仅限SurrealDB特定功能
  • 可能需要为复杂查询进行额外设置
  • 依赖外部SurrealDB服务器的稳定性
  • 不适用于非 SurrealDB 数据库
  • 需要身份验证配置

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

SurrealDB Client For Dart & Flutter

Pub Version Tests GitHub Issues or Pull Requests

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';

void main() async {
  // Create a SurrealDB client instance
  final db = SurrealDB('ws://localhost:8000/rpc', token: 'your-auth-token');

  // Connect to the database
  db.connect();

  // Wait for the connection to be established
  await db.wait();

  // Use a specific namespace and database
  await db.use('namespace', 'database');

  // Fetch version information
  final 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 request
  print('Before request: $method with params: $params');
  
  // Execute the request
  final result = await next();
  
  // Do something after the request
  print('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 normally
    return await next();
  } catch (e) {
    // If we get an authentication error
    if (e.toString().contains('authentication invalid')) {
      // Refresh the token (implement your token refresh logic)
      final newToken = await refreshToken(); 
      
      // Re-authenticate with the new token
      await db.authenticate(newToken);
      
      // Retry the original request
      return await next();
    }
    // For other errors, just rethrow
    rethrow;
  }
});

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');
3.4 Delete Records

To delete a record:

await db.delete('posts:id');
print('Record deleted');
Live Queries

SurrealDB supports live queries over WebSocket. Use the LiveQuery class for subscribing to changes in data.

final liveQuery = await db.liveQuery('LIVE SELECT * FROM posts WHERE active = true');
liveQuery.stream.listen((event) {
  print('Received update: ${event.result}');
});

await db.create('posts', {
  'title': 'My first post',
});
await db.create('posts', {
  'title': 'My second post',
  'active': true
});

You can read more about all the available methods and classes in the API documentation.

Contributions

Contributions are welcome! Feel free to submit issues, feature requests, or pull requests to improve this library.

License

This project is licensed under the MIT License. See the LICENSE file for more details.

所属分类

依赖

依赖清单 2 项

源码仓库

使用此插件的项目

暂无相关数据。