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

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

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

1 回复

更多关于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_hostyour_databaseyour_usernameyour_password为你的实际PostgreSQL数据库凭据。此外,确保你的PostgreSQL服务器允许从你的Flutter应用所在的网络进行连接。

回到顶部