The Flutter SurrealDB package is a powerful integration for Flutter, built upon the foundation of surrealdb, the official SurrealDB library.

Getting started

❗ In order to start using surrealdb_dart you must have the flutter_install_link installed on your machine.

Install via flutter pub add:

flutter pub add surrealdb_dart

Alternatively, add surrealdb_dart to your pubspec.yaml:

dependencies:
  surrealdb_dart:

Install it:

flutter pub get

Features

close()

Closes the persistent connection to the database.

use({String namespace, String database})

Switch to a specific namespace and database.

info()

Retrieve info about the current Surreal instance.

signup({String namespace, String database, String scope, Map<String, Object?>? data})

Signs up to a specific authentication scope.

signin({String? namespace, String? database, String? scope, String? username, String? password Map<String, Object?>? data})

Signs in to a specific authentication scope.

authenticate(String token)

Authenticates the current connection with a JWT token.

invalidate()

Invalidates the authentication for the current connection.

let(String variable, Object? value)

Assigns a value as a parameter for this connection.

unset(String variable)

Assigns a value as a parameter for this connection.

live(String table)

Creates a stream queryUuid.

listenLive(String queryUuid)

Listen a stream queryUuid.

kill(String queryUuid)

Kill a stream queryUuid.

query(String sql, [Map<String, Object?>? vars])

Runs a set of SurrealQL statements against the database.

select(String table)

Selects all records in a table, or a specific record, from the database.

create(String thing, dynamic data)

Creates a record in the database. data has to be json encodable object or class has toJson method.

insert(String thing, [Object? data])

Updates all records in a table, or a specific record, in the database.

update(String thing, [Object? data])

Updates all records in a table, or a specific record, in the database. NOTE: This function replaces the current document / record data with the specified data.

merge(String thing, [Object? data])

Modifies all records in a table, or a specific record, in the database. NOTE: This function merges the current document / record data with the specified data.

patch(String thing, {List<Object> data, bool? diff})

Applies JSON Patch changes to all records, or a specific record, in the database. NOTE: This function patches the current document / record data with the specified JSON Patch data.

delete(String thing)

Deletes all records in a table, or a specific record, from the database.

Usage

Here you have a simple example!

import 'package:surrealdb/surrealdb.dart';

void main() async {
  try {
    // Connect to the database
    final db = SurrealDB.connect(Uri.parse('wss://dei-surrealdb.fly.dev/rpc'));

    // Signin as a namespace, database, or root user
    await db.signin(
      username: "root",
      password: "root",
    );

    // Select a specific namespace / database
    await db.use(namespace: "test", database: "test");

    // Create a new person with a random id
    final created = await db.create("person", data: {
      'title': "Founder & CEO",
      'name': {
        'first': "Tobie",
        'last': "Morgan Hitchcock",
      },
      'marketing': true,
    });
    print(created);


    // Update a person record with a specific id
    final updated = await db.merge("person:jaime", data: {
      'marketing': true,
    });
    print(updated);


    // Select all people records
    final people = await db.select("person");
    print(people);

    // Perform a custom advanced query
    final groups = await db.query(
      "SELECT marketing, count() FROM type::table(\$tb) GROUP BY marketing",
      vars: {
        'tb': "person",
      },
    );
    print(groups);

  } catch (e) {
    print(e);
  }
}

Libraries

surrealdb_dart