Flutter数据库管理插件angel3_sembast的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter数据库管理插件angel3_sembast的使用

Pub Version (包括预发布版本) Null 安全性 Discord 许可证

一个用于Angel3框架的持久化数据存储插件。

安装

pubspec.yaml文件中添加以下依赖:

dependencies:
  angel3_sembast: ^8.0.0

使用

该库主要暴露了一个类:SembastService

SembastService

这个类与package:sembast中的DatabaseStore进行交互,并将数据序列化为Map。

查询

你可以通过以下方式查询这些服务:

/path/to/service?foo=bar

上述查询将在数据库中查找foo等于bar的记录。以下代码展示了如何查询数据:

List queried = await MyService.index({r"query": where.id(Finder(filter: Filter(...))));

当然,你也可以使用package:sembast的查询。只需将其作为query传递给params

更多用法示例可以查看测试文件。

示例代码

以下是完整的示例代码:

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_sembast/angel3_sembast.dart';
import 'package:logging/logging.dart';
import 'package:sembast/sembast_io.dart';

void main() async {
  var app = Angel();
  var db = await databaseFactoryIo.openDatabase('todos.db');

  app
    ..logger = (Logger('angel_sembast_example')..onRecord.listen(print))
    ..use('/api/todos', SembastService(db, store: 'todos'))
    ..shutdownHooks.add((_) => db.close());

  var http = AngelHttp(app);
  var server = await http.startServer('127.0.0.1', 3000);
  var uri =
      Uri(scheme: 'http', host: server.address.address, port: server.port);
  print('angel_sembast example listening at $uri');
}

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

1 回复

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


当然,以下是一个关于如何使用Flutter中的angel3_sembast插件进行数据库管理的代码示例。angel3_sembast是基于sembast的封装,用于在Flutter应用中管理SQLite数据库。

首先,确保在你的pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  angel3_sembast: ^x.y.z  # 请替换为最新版本号

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

接下来,我们将创建一个简单的Flutter应用,展示如何使用angel3_sembast进行基本的数据库操作,如创建数据库、存储和检索数据。

1. 导入必要的包

import 'package:flutter/material.dart';
import 'package:angel3_sembast/angel3_sembast.dart';
import 'package:sembast/sembast.dart';
import 'package:path/path.dart';

2. 创建数据库服务

class DatabaseService {
  final DatabaseFactory dbFactory = databaseFactoryDefault;
  String _dbName = 'my_database.db';

  Future<Database> openDatabase() async {
    // 获取数据库目录
    var dbPath = join(await getDatabasesPath(), _dbName);
    // 打开(或创建)数据库
    return dbFactory.openDatabase(dbPath);
  }

  Future<void> closeDatabase(Database db) async {
    db.close();
  }
}

3. 定义数据模型

class User {
  int id;
  String name;
  String email;

  User({required this.id, required this.name, required this.email});

  Map<String, dynamic> toMap() {
    return {'id': id, 'name': name, 'email': email};
  }

  factory User.fromMap(Map<String, dynamic> map) {
    return User(
      id: map['id'] as int,
      name: map['name'] as String,
      email: map['email'] as String,
    );
  }
}

4. 数据库操作

class DatabaseProvider {
  DatabaseService _dbService = DatabaseService();
  late Database _db;

  Future<void> init() async {
    _db = await _dbService.openDatabase();
  }

  Future<void> close() async {
    await _dbService.closeDatabase(_db);
  }

  Future<void> insertUser(User user) async {
    var store = intMapStoreFactory.store('users');
    await _db.transaction((txn) async {
      await store.record(user.id).put(txn, user.toMap());
    });
  }

  Future<List<User>> getAllUsers() async {
    var store = intMapStoreFactory.store('users');
    var snapshot = await store.find(db: _db);
    return snapshot.map((record) => User.fromMap(record.value)).toList();
  }
}

5. 使用数据库服务

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late DatabaseProvider _dbProvider;
  List<User> _users = [];

  @override
  void initState() {
    super.initState();
    _dbProvider = DatabaseProvider();
    _initializeDatabase();
  }

  Future<void> _initializeDatabase() async {
    await _dbProvider.init();
    _users = await _dbProvider.getAllUsers();
    setState(() {});

    // 插入示例数据
    if (_users.isEmpty) {
      await _dbProvider.insertUser(User(id: 1, name: 'Alice', email: 'alice@example.com'));
      await _dbProvider.insertUser(User(id: 2, name: 'Bob', email: 'bob@example.com'));
      _users = await _dbProvider.getAllUsers();
      setState(() {});
    }
  }

  @override
  void dispose() {
    _dbProvider.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Angel3 Sembast Demo'),
        ),
        body: ListView.builder(
          itemCount: _users.length,
          itemBuilder: (context, index) {
            var user = _users[index];
            return ListTile(
              title: Text('${user.name} (${user.email})'),
            );
          },
        ),
      ),
    );
  }
}

这个示例展示了如何使用angel3_sembast在Flutter应用中管理一个简单的用户数据库。你可以扩展这个示例以包含更多复杂的操作,如更新和删除记录,添加更多字段到数据模型,或者处理更复杂的查询。

回到顶部