Flutter数据库管理插件angel3_sembast的使用
Flutter数据库管理插件angel3_sembast的使用
一个用于Angel3框架的持久化数据存储插件。
安装
在pubspec.yaml
文件中添加以下依赖:
dependencies:
angel3_sembast: ^8.0.0
使用
该库主要暴露了一个类:SembastService
。
SembastService
这个类与package:sembast
中的Database
和Store
进行交互,并将数据序列化为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
更多关于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应用中管理一个简单的用户数据库。你可以扩展这个示例以包含更多复杂的操作,如更新和删除记录,添加更多字段到数据模型,或者处理更复杂的查询。