Flutter数据库查看插件database_viewer的使用

Flutter数据库查看插件database_viewer的使用

database_viewer 是一个用于查看数据库的插件。

开始使用

此项目是一个用于 Flutter 的插件包,包括 Android 和/或 iOS 平台的特定实现代码。

示例代码

以下是一个完整的示例代码,展示了如何使用 database_viewer 插件来查看数据库。

import 'package:database_viewer/database_viewer.dart';
import 'package:flutter/material.dart';

import 'database.dart';
import 'task.dart';
import 'task_dao.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 创建数据库实例
  final database = await $FloorFlutterDatabase.databaseBuilder('flutter_database.db').build();
  // 获取任务数据访问对象
  final dao = database.taskDao;
  // 启动应用
  runApp(FloorApp(dao));
}

// 应用主类
class FloorApp extends StatelessWidget {
  final TaskDao dao;
  const FloorApp(this.dao);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Floor Demo',
      theme: ThemeData(primarySwatch: Colors.blueGrey),
      home: TasksWidget(
        title: 'Floor Demo',
        dao: dao,
      ),
    );
  }
}

// 任务列表视图
class TasksWidget extends StatelessWidget {
  final String title;
  final TaskDao dao;

  const TasksWidget({
    Key? key,
    required this.title,
    required this.dao,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(title)),
      body: SafeArea(
        child: Column(
          children: [
            TasksListView(dao: dao),
            TasksTextField(dao: dao),
          ],
        ),
      ),
    );
  }
}

// 任务列表单元格
class TasksListView extends StatelessWidget {
  final TaskDao dao;

  const TasksListView({
    Key? key,
    required this.dao,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Expanded(
      child: StreamBuilder<List<Task>>(
        stream: dao.findAllTasksAsStream(),
        builder: (_, snapshot) {
          if (!snapshot.hasData) return Container();
          final tasks = snapshot.data;
          return ListView.builder(
            itemCount: tasks?.length,
            itemBuilder: (_, index) {
              return TaskListCell(
                task: tasks![index],
                dao: dao,
              );
            },
          );
        },
      ),
    );
  }
}

// 任务列表单元格视图
class TaskListCell extends StatelessWidget {
  final Task task;
  final TaskDao dao;
  const TaskListCell({
    Key? key,
    required this.task,
    required this.dao,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Dismissible(
      key: Key('${task.hashCode}'),
      background: Container(color: Colors.red),
      direction: DismissDirection.endToStart,
      child: Padding(
        padding: const EdgeInsets.symmetric(
          vertical: 8,
          horizontal: 16,
        ),
        child: Text(task.message),
      ),
      onDismissed: (_) async {
        await dao.deleteTask(task);
        ScaffoldMessenger.of(context).hideCurrentSnackBar();
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Removed task')),
        );
      },
    );
  }
}

// 添加任务文本框
class TasksTextField extends StatelessWidget {
  final TextEditingController _textEditingController;
  final TaskDao dao;

  TasksTextField({
    Key? key,
    required this.dao,
  })  : _textEditingController = TextEditingController(),
        super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      color: Colors.black12,
      child: Row(
        children: [
          Expanded(
            child: TextField(
              controller: _textEditingController,
              decoration: const InputDecoration(
                fillColor: Colors.transparent,
                filled: true,
                contentPadding: EdgeInsets.all(16),
                border: InputBorder.none,
                hintText: 'Type task here',
              ),
              onSubmitted: (_) async {
                await _persistMessage();
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.only(right: 16),
            child: TextButton(
              style: ButtonStyle(
                backgroundColor: MaterialStateProperty.all(Colors.blueGrey),
                foregroundColor: MaterialStateProperty.all(Colors.white),
              ),
              child: const Text('Save'),
              onPressed: () async {
                await _persistMessage();
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.only(right: 16),
            child: TextButton(
              style: ButtonStyle(
                backgroundColor: MaterialStateProperty.all(Colors.blueGrey),
                foregroundColor: MaterialStateProperty.all(Colors.white),
              ),
              child: const Text('Go'),
              onPressed: () async {
                // 打开数据库查看器
                DatabaseViewer.DATABASE_VIEWER_CHANNEL.send('flutter_database.db');
              },
            ),
          ),
        ],
      ),
    );
  }

  // 保存任务到数据库
  Future<void> _persistMessage() async {
    final message = _textEditingController.text;
    if (message.trim().isEmpty) {
      _textEditingController.clear();
    } else {
      final task = Task(null, message, "", "88888", "", new DateTime.now().millisecondsSinceEpoch.toString());
      await dao.insertTask(task);
      _textEditingController.clear();
    }
  }
}

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

1 回复

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


database_viewer 是一个用于 Flutter 应用的插件,它可以帮助开发者在开发过程中查看和管理应用的本地数据库。这个插件特别适合在调试和开发阶段使用,让你能够直观地查看 SQLite 数据库中的表结构和数据。

安装 database_viewer

首先,你需要将 database_viewer 添加到你的 pubspec.yaml 文件中:

dependencies:
  flutter:
    sdk: flutter
  database_viewer: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

使用 database_viewer

  1. 导入库

    在你的 Dart 文件中导入 database_viewer 库:

    import 'package:database_viewer/database_viewer.dart';
    
  2. 初始化数据库查看器

    在应用的某个地方(比如在 main 函数中或某个页面的 initState 中),初始化 DatabaseViewer

    void main() {
      runApp(MyApp());
    
      // 初始化数据库查看器
      DatabaseViewer.init();
    }
    
  3. 打开数据库查看器

    你可以在应用中的某个按钮点击事件中打开数据库查看器:

    ElevatedButton(
      onPressed: () {
        DatabaseViewer.open();
      },
      child: Text('Open Database Viewer'),
    );
    

    当用户点击这个按钮时,database_viewer 将会打开一个新的页面,显示应用中的所有数据库表及其数据。

  4. 配置数据库路径

    如果你的数据库文件不在默认路径下,你可以手动指定数据库路径:

    DatabaseViewer.setDatabasePath('your_database_path.db');
    

示例代码

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 database_viewer

import 'package:flutter/material.dart';
import 'package:database_viewer/database_viewer.dart';

void main() {
  runApp(MyApp());

  // 初始化数据库查看器
  DatabaseViewer.init();
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Database Viewer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              DatabaseViewer.open();
            },
            child: Text('Open Database Viewer'),
          ),
        ),
      ),
    );
  }
}
回到顶部