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
更多关于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
-
导入库
在你的 Dart 文件中导入
database_viewer
库:import 'package:database_viewer/database_viewer.dart';
-
初始化数据库查看器
在应用的某个地方(比如在
main
函数中或某个页面的initState
中),初始化DatabaseViewer
:void main() { runApp(MyApp()); // 初始化数据库查看器 DatabaseViewer.init(); }
-
打开数据库查看器
你可以在应用中的某个按钮点击事件中打开数据库查看器:
ElevatedButton( onPressed: () { DatabaseViewer.open(); }, child: Text('Open Database Viewer'), );
当用户点击这个按钮时,
database_viewer
将会打开一个新的页面,显示应用中的所有数据库表及其数据。 -
配置数据库路径
如果你的数据库文件不在默认路径下,你可以手动指定数据库路径:
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'),
),
),
),
);
}
}