typesql
是一个用于 Flutter 的数据库操作插件,它旨在简化 SQLite 数据库的操作,并提供类型安全的查询功能。typesql
通过生成类型安全的代码来减少手动编写 SQL 语句时的错误,并提高开发效率。
以下是如何在 Flutter 项目中使用 typesql
的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 typesql
和 build_runner
依赖:
dependencies:
flutter:
sdk: flutter
typesql: ^1.0.0
dev_dependencies:
build_runner: ^2.1.0
然后运行 flutter pub get
以安装依赖。
2. 定义数据库模型
创建一个 Dart 文件(例如 models.dart
),并在其中定义你的数据库模型。typesql
使用 @TypeSql
注解来标记数据库表和字段。
import 'package:typesql/typesql.dart';
@TypeSql(
tableName: 'users',
primaryKey: 'id',
)
class User {
final int id;
final String name;
final int age;
User({required this.id, required this.name, required this.age});
}
3. 生成数据库代码
运行以下命令生成数据库操作代码:
flutter pub run build_runner build
这将生成一个与你的模型相对应的数据库操作类,例如 UserTable
。
4. 初始化数据库
在你的 Flutter 应用中初始化数据库,并使用生成的类进行操作。
import 'package:flutter/material.dart';
import 'package:typesql/typesql.dart';
import 'models.dart'; // 导入你的模型文件
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化数据库
final database = await $TypeSql.open(
databaseName: 'my_database.db',
version: 1,
onCreate: (db, version) async {
await db.execute(UserTable.createTable());
},
);
runApp(MyApp(database: database));
}
class MyApp extends StatelessWidget {
final TypeSqlDatabase database;
MyApp({required this.database});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('TypeSQL Example')),
body: Center(
child: FutureBuilder(
future: _fetchUsers(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
final users = snapshot.data as List<User>;
return ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
final user = users[index];
return ListTile(
title: Text(user.name),
subtitle: Text('Age: ${user.age}'),
);
},
);
}
},
),
),
),
);
}
Future<List<User>> _fetchUsers() async {
final users = await database.query(UserTable.selectAll());
return users.map((row) => User.fromJson(row)).toList();
}
}
5. 插入数据
你可以使用生成的 UserTable
类来插入数据:
final user = User(id: 1, name: 'John Doe', age: 30);
await database.insert(UserTable.insert(user));
6. 查询数据
你可以使用 UserTable.selectAll()
或其他生成的查询方法来获取数据:
final users = await database.query(UserTable.selectAll());
7. 更新和删除数据
更新和删除操作也可以通过生成的类来完成:
// 更新数据
await database.update(UserTable.update(user));
// 删除数据
await database.delete(UserTable.deleteById(1));
8. 关闭数据库
在不再需要数据库时,记得关闭它:
await database.close();