Flutter数据库可视化插件drift_db_viewer的使用

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

Flutter数据库可视化插件drift_db_viewer的使用

drift_db_viewer 是一个方便在开发过程中查看Flutter应用中数据库内容的插件。它允许我们在不导出数据库文件的情况下直接在应用内查看和过滤数据库数据。

示例

设置

添加依赖到 pubspec.yaml

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

dependencies:
  drift_db_viewer: <latest-version>

请确保将 <latest-version> 替换为最新的版本号。

使用方法

要在应用中使用 DriftDbViewer,你需要创建一个路由并传递你的数据库实例给它。例如:

import 'package:flutter/material.dart';
import 'package:drift_db_viewer/drift_db_viewer.dart';
import 'my_database.dart'; // 假设这是你定义的数据库类

void main() {
  final db = MyDatabase(); // 这应该是一个单例
  runApp(MyApp(db: db));
}

class MyApp extends StatelessWidget {
  final MyDatabase db;

  MyApp({required this.db});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Drift DB Viewer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(builder: (context) => DriftDbViewer(db))
              );
            },
            child: Text('View Database'),
          ),
        ),
      ),
    );
  }
}

Drift配置

使用命名列

当你在表中使用命名列时,需要为该列添加 @JsonKey 注解,否则无法隐藏该表。例如:

import 'package:drift/drift.dart';

class Todos extends Table {
  IntColumn get id => integer().autoIncrement()();

  TextColumn get title => text().withLength(min: 6, max: 32)();

  @JsonKey('body') // This is required for the drift_db_viewer.
  TextColumn get content => text().named('body')();

  IntColumn get category => integer().nullable()();
}

完整示例 Demo

以下是一个完整的示例项目结构:

example/
├── lib/
│   ├── main.dart
│   └── my_database.dart
└── pubspec.yaml

main.dart:

import 'package:flutter/material.dart';
import 'package:drift_db_viewer/drift_db_viewer.dart';
import 'my_database.dart';

void main() {
  final db = MyDatabase();
  runApp(MyApp(db: db));
}

class MyApp extends StatelessWidget {
  final MyDatabase db;

  MyApp({required this.db});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Drift DB Viewer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(builder: (context) => DriftDbViewer(db))
              );
            },
            child: Text('View Database'),
          ),
        ),
      ),
    );
  }
}

my_database.dart:

import 'package:drift/drift.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';

part 'my_database.g.dart';

@DriftDatabase(tables: [Todos])
class MyDatabase extends _$MyDatabase {
  MyDatabase() : super(_openConnection());

  @override
  int get schemaVersion => 1;
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dbFolder = await getApplicationDocumentsDirectory();
    final file = File(p.join(dbFolder.path, 'db.sqlite'));
    return VmDatabase(file);
  });
}

class Todos extends Table {
  IntColumn get id => integer().autoIncrement()();

  TextColumn get title => text().withLength(min: 6, max: 32)();

  @JsonKey('body')
  TextColumn get content => text().named('body')();

  IntColumn get category => integer().nullable()();
}

通过以上步骤和代码示例,你可以轻松地在Flutter应用中集成 drift_db_viewer 插件,从而更方便地查看和调试数据库内容。


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

1 回复

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


在Flutter项目中,drift_db_viewer 是一个非常有用的插件,它允许开发者在应用内直接可视化 SQLite 数据库的内容。这对于调试和展示数据非常有帮助。以下是如何在 Flutter 项目中使用 drift_db_viewer 插件的一个简单示例。

步骤 1: 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 driftdrift_db_viewer 的依赖:

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

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

步骤 2: 设置 Drift 数据库

接下来,你需要设置 Drift 数据库。假设你有一个简单的用户表:

import 'package:drift/drift.dart';

part 'database.g.dart';

@DataClassName('User')
class Users extends Table {
  IntColumn get id => integer().autoIncrement().primaryKey();
  TextColumn get name => text().withDefault(Constant('Unknown'));
}

class MyDatabase extends GeneratedDatabase {
  Users get users => attachedDatabase.users;

  @override
  int get version => 1;
}

生成代码文件:

flutter pub run build_runner build

步骤 3: 初始化 Drift 和 Drift DB Viewer

在你的应用主文件中,初始化 Drift 数据库并集成 drift_db_viewer

import 'package:flutter/material.dart';
import 'package:drift/drift.dart';
import 'package:drift_db_viewer/drift_db_viewer.dart';
import 'database.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 打开数据库连接
  final database = MyDatabase(VmDatabase.memory());
  await database.open();

  // 创建一些初始数据(可选)
  final userInsert = UserCompanion.insert(name: Value('Alice'));
  await database.into(users).insert(userInsert);

  runApp(MyApp(database: database));
}

class MyApp extends StatelessWidget {
  final MyDatabase database;

  MyApp({required this.database});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Drift DB Viewer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 显示数据库查看器
              await showDialog<void>(
                context: context,
                builder: (BuildContext context) {
                  return AlertDialog(
                    title: Text('Database Viewer'),
                    content: DriftDbViewer(
                      database: database,
                    ),
                    actions: <Widget>[
                      TextButton(
                        onPressed: () {
                          Navigator.of(context).pop();
                        },
                        child: Text('Close'),
                      ),
                    ],
                  );
                },
              );
            },
            child: Text('Open Database Viewer'),
          ),
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在 pubspec.yaml 中添加 driftdrift_db_viewer
  2. 数据库设置:定义一个 Drift 数据库和表结构,并使用 build_runner 生成代码。
  3. 初始化:在 main 函数中打开数据库连接,并可选择性地插入一些初始数据。
  4. 集成 DB Viewer:在 Flutter 应用中使用 DriftDbViewer 小部件来显示数据库内容。

这个示例展示了如何在 Flutter 应用中集成并使用 drift_db_viewer 插件来可视化 SQLite 数据库。通过点击按钮,你可以打开一个对话框,显示数据库中的所有表和记录。

回到顶部