Flutter WebAssembly数据库交互插件surrealdb_wasm的使用

Flutter WebAssembly数据库交互插件surrealdb_wasm的使用

<surrealdb_wasm> 是一个强大的 Flutter 插件,它基于 SurrealDB 的 WebAssembly 引擎,为 Flutter 提供了与 SurrealDB 数据库的交互能力。通过该插件,开发者可以方便地在 Flutter 应用中进行数据库操作。

🔍 示例

您可以尝试在浏览器中运行一些 surreal_wasm 应用程序:

💻 安装

为了开始使用 surrealdb_wasm,您必须已经在您的机器上安装了 Flutter SDK。

  1. 通过 flutter pub add 命令添加依赖:

    flutter pub add surrealdb_wasm
    
  2. 或者,在 pubspec.yaml 文件中添加依赖项:

    dependencies:
      surrealdb_wasm:
    
  3. 运行 flutter pub get 来安装依赖项。

  4. 最后,在 web/index.html 文件的 <head> 标签之前添加以下代码:

    <script type="module">
      import { Surreal, StringRecordId } from "/assets/packages/surrealdb_js/assets/js/index.bundled.mjs";
      import { surrealdbWasmEngines } from "/assets/packages/surrealdb_wasm/assets/wasm/surrealdb/index.bundled.js";
    
      // 将类型暴露到全局作用域
      globalThis.SurrealJS = Surreal;
      globalThis.StringRecordId = StringRecordId;
      globalThis.WasmEngine = surrealdbWasmEngines;
    </script>
    

✨ 功能

请参阅 surrealdb_js 包以获取功能列表。

🏃 示例代码

基本示例
import 'package:surrealdb_js/surrealdb_js.dart';
import 'package:surrealdb_wasm/surrealdb_wasm.dart';

final db = SurrealWasm.getInstance();

// 连接到数据库
await db.connect('indxdb://surreal');
await db.use(namespace: 'test', database: 'test');

// 创建记录
final created = db.create('person',
          {
            'title': 'CTO',
            'name': {
              'first': 'Tom',
              'last': 'Jerry',
            },
            'marketing': true,
          },
        );

// 获取创建记录的ID
final id = created['id'].toString();

// 更新记录
final merged = await db.merge(
        id,
        {
          'marketing': false,
        },
      );

// 查询记录
final tom = await db.select(id);

// 删除记录
final deleted = await db.delete(id);

更多代码示例请参考 integration testexample project

事务支持
final result = await db.transaction((txn) async {
    txn.query('DEFINE TABLE test SCHEMAFULL;');
    txn.query(r'DEFINE FIELD id ON test VALUE <record>($value) ASSERT $value != NONE;');
    txn.query('DEFINE FIELD name ON test TYPE string;');
    txn.query(
      r'CREATE test SET name = $name;',
      bindings: {'name': 'John'},
    );
    if (somethingWrong) {
      txn.cancel();
    }
});

更多代码示例请参考 transaction test

🧑‍💼 贡献

欢迎贡献!请查看仓库中的未实现功能或问题,并随时提交拉取请求。更多信息请参阅 贡献指南

贡献者

📔 许可证

该项目根据 MIT 许可证授权。

🗒️ 引用

如果您使用了这个包,请考虑引用它:

[@misc](/user/misc){surrealdb_wasm,
  author = {Lim Chee Kin},
  title = {surrealdb_wasm: Flutter SurrealDB WebAssembly(WASM) package},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/limcheekin/surrealdb_wasm}},
}

更多关于Flutter WebAssembly数据库交互插件surrealdb_wasm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter WebAssembly数据库交互插件surrealdb_wasm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


SurrealDB 是一个分布式数据库,而 surrealdb_wasm 是一个基于 WebAssembly (Wasm) 的插件,允许你在 Flutter Web 应用中与 SurrealDB 进行交互。以下是如何在 Flutter Web 项目中使用 surrealdb_wasm 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 surrealdb_wasm 依赖:

dependencies:
  flutter:
    sdk: flutter
  surrealdb_wasm: ^0.1.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 SurrealDB

在你的 Flutter 代码中,首先需要初始化 SurrealDB 实例。通常,你可以在应用的 main 函数中或某个初始化方法中进行。

import 'package:surrealdb_wasm/surrealdb_wasm.dart';

Future<void> main() async {
  // 初始化 SurrealDB
  final db = SurrealDB();

  // 连接到数据库
  await db.connect('ws://localhost:8000/rpc');  // 替换为你的 SurrealDB 地址

  // 设置命名空间和数据库
  await db.use('namespace', 'database');

  runApp(MyApp(db: db));
}

class MyApp extends StatelessWidget {
  final SurrealDB db;

  const MyApp({Key? key, required this.db}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SurrealDB Flutter Demo',
      home: MyHomePage(db: db),
    );
  }
}

3. 与数据库交互

MyHomePage 中,你可以使用 SurrealDB 实例来执行查询、插入、更新和删除操作。

class MyHomePage extends StatefulWidget {
  final SurrealDB db;

  const MyHomePage({Key? key, required this.db}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<dynamic> records = [];

  @override
  void initState() {
    super.initState();
    fetchData();
  }

  Future<void> fetchData() async {
    // 查询数据
    final result = await widget.db.query('SELECT * FROM table_name');
    setState(() {
      records = result;
    });
  }

  Future<void> insertData() async {
    // 插入数据
    await widget.db.create('table_name', {
      'name': 'John Doe',
      'age': 30,
    });
    fetchData();  // 刷新数据
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SurrealDB Flutter Demo'),
      ),
      body: ListView.builder(
        itemCount: records.length,
        itemBuilder: (context, index) {
          final record = records[index];
          return ListTile(
            title: Text(record['name']),
            subtitle: Text('Age: ${record['age']}'),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: insertData,
        child: Icon(Icons.add),
      ),
    );
  }
}

4. 运行应用

确保你已经启动了 SurrealDB 服务器,并且可以通过 WebSocket 连接到它。然后运行你的 Flutter Web 应用:

flutter run -d chrome

5. 注意事项

  • WebAssembly 支持: surrealdb_wasm 依赖于 WebAssembly,因此只能在 Flutter Web 项目中使用。
  • CORS 问题: 如果你在开发环境中遇到 CORS 问题,确保 SurrealDB 服务器配置了正确的 CORS 头。
  • 安全性: 在生产环境中,确保数据库连接是安全的(例如使用 wss:// 而不是 ws://)。

6. 其他操作

除了查询和插入,你还可以使用 surrealdb_wasm 执行其他操作,如更新和删除:

// 更新数据
await widget.db.update('table_name:id', {
  'age': 31,
});

// 删除数据
await widget.db.delete('table_name:id');
回到顶部