Flutter数据库管理插件drift_postgres的使用
Flutter数据库管理插件 drift_postgres
的使用
package:drift_postgres
扩展了 drift,通过使用 postgres
包来支持与PostgreSQL数据库的通信。
使用此插件
有关使用 drift 的一般说明,请参阅此指南。关于 drift_postgres
的详细文档可在此处找到:drift_postgres 文档。
添加依赖项
首先,在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
drift: "$latest version"
drift_postgres: ^0.1.0
连接到 PostgreSQL 数据库
要将你的 drift 数据库类连接到 PostgreSQL,可以使用 package:drift_postgres/postgres.dart
中的 PgDatabase
:
import 'package:drift/drift.dart';
import 'package:drift_postgres/drift_postgres.dart';
import 'package:postgres/postgres.dart' as pg;
class AppDatabase extends _$AppDatabase {
AppDatabase(PgDatabase connection) : super(connection);
@override
int get schemaVersion => 1;
}
final database = AppDatabase(PgDatabase(
endpoint: PgEndpoint(
host: 'localhost',
database: 'postgres',
username: 'postgres',
password: 'postgres',
),
));
配置生成器选项
为了使 drift 生成特定于 PostgreSQL 的代码,你可以在 build.yaml
中添加以下配置:
targets:
$default:
builders:
drift_dev:
options:
sql:
dialects:
- sqlite # 如果只需要 postgres 可以删除这一行
- postgres
运行测试
为了测试这个包,首先运行以下 Docker 命令启动一个 PostgreSQL 容器:
docker run -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres postgres
然后可以使用以下命令进行测试(需要禁用并发,因为测试使用的是同一个数据库):
dart test -j 1
示例 Demo
下面是一个完整的示例 demo,展示了如何使用 drift_postgres
插件进行数据库操作:
import 'package:drift/drift.dart';
import 'package:drift_postgres/drift_postgres.dart';
import 'package:postgres/postgres.dart' as pg;
import 'package:uuid/uuid.dart';
part 'main.g.dart'; // 生成的文件
class Users extends Table {
UuidColumn get id => customType(PgTypes.uuid).withDefault(genRandomUuid())();
TextColumn get name => text()();
@override
Set<Column<Object>>? get primaryKey => {id};
}
@DriftDatabase(tables: [Users])
class DriftPostgresDatabase extends _$DriftPostgresDatabase {
DriftPostgresDatabase(super.e);
@override
int get schemaVersion => 1;
}
void main() async {
final database = DriftPostgresDatabase(PgDatabase(
endpoint: pg.Endpoint(
host: 'localhost',
database: 'postgres',
username: 'postgres',
password: 'postgres',
),
settings: pg.ConnectionSettings(
sslMode: pg.SslMode.disable, // 对于公共连接,请使用 SslMode.verifyFull
),
logStatements: true,
));
// 插入新用户
final user = await database.users.insertReturning(
UsersCompanion.insert(name: 'Simon', id: Value(Uuid().v4obj())));
print(user);
// 删除该用户
await database.users.deleteOne(user);
// 关闭数据库连接
await database.close();
}
上述代码展示了如何定义表、插入数据和删除数据的基本操作。确保你已经正确配置了 PostgreSQL 数据库,并且 Docker 容器正在运行以便测试这些功能。
更多关于Flutter数据库管理插件drift_postgres的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件drift_postgres的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何在Flutter项目中使用drift_postgres
进行数据库管理的代码示例。drift_postgres
是一个用于与PostgreSQL数据库交互的Flutter插件,基于drift
(以前称为moor
)库。
首先,确保你已经添加了必要的依赖项到你的pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
drift: ^x.y.z # 请使用最新版本
drift_postgres: ^x.y.z # 请使用最新版本
postgres_dart: ^x.y.z # drift_postgres的依赖
接下来,让我们编写一些代码来展示如何使用drift_postgres
。
1. 定义数据模型
首先,定义一个数据模型。例如,我们有一个简单的User
表:
import 'package:drift/drift.dart';
part 'user.g.dart';
@DataClassName('User')
class Users extends Table {
IntColumn get id => integer().autoIncrement().primaryKey()();
TextColumn get name => text()();
TextColumn get email => text().nullable()();
}
运行flutter pub run build_runner build
来生成数据类User
。
2. 配置数据库连接
然后,配置PostgreSQL数据库连接:
import 'package:drift/drift.dart';
import 'package:drift_postgres/drift_postgres.dart';
import 'package:postgres_dart/postgres_dart.dart';
import 'user.dart'; // 导入之前定义的模型
part 'database.g.dart';
DatabaseConnection createConnection() {
final postgresConfiguration = PostgresConfiguration(
host: 'your_host',
port: 5432,
database: 'your_database',
username: 'your_username',
password: 'your_password',
);
final client = PostgresClient(postgresConfiguration);
return PostgresDatabase(client);
}
@DriftDatabase(
tables: [Users],
daos: [UserDao] // 如果需要DAO类,可以在这里声明
)
abstract class AppDatabase extends _$AppDatabase {
AppDatabase() : super(createConnection());
// 你可以在这里添加自定义的查询和更新方法
}
同样,运行flutter pub run build_runner build
来生成数据库类AppDatabase
。
3. 使用数据库
现在,你可以在Flutter应用中使用这个数据库了:
import 'package:flutter/material.dart';
import 'package:drift/drift.dart';
import 'database.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Drift Postgres Example'),
),
body: FutureBuilder<AppDatabase>(
future: Database.connect(AppDatabase.schema),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
final db = snapshot.data!;
return MyHomePage(db: db);
} else {
return Center(child: CircularProgressIndicator());
}
},
),
),
);
}
}
class MyHomePage extends StatefulWidget {
final AppDatabase db;
MyHomePage({required this.db});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late final UserDao userDao = widget.db.userDao;
void _insertUser() async {
final user = User(name: 'John Doe', email: 'john.doe@example.com');
await userDao.insert(user);
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
ElevatedButton(
onPressed: _insertUser,
child: Text('Insert User'),
),
],
),
);
}
}
这个简单的示例展示了如何连接到PostgreSQL数据库,并在Flutter应用中插入数据。你可以根据需要扩展这个示例,添加更多的查询、更新和删除操作。
请注意,你需要替换your_host
、your_database
、your_username
和your_password
为你的实际PostgreSQL数据库凭据。此外,确保你的PostgreSQL服务器允许从你的Flutter应用所在的网络进行连接。