Flutter数据库管理插件tecfy_database的使用
Flutter数据库管理插件tecfy_database的使用
特性
- 快速
- 支持索引字段
- 兼容Android、iOS、macOS、Web、Windows和Linux平台
开始使用
安装并使用该插件。
使用示例
示例应用位于/example
文件夹中。以下是一个完整的示例代码,展示了如何使用tecfy_database
插件来管理和操作数据库。
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:project/roles_page.dart';
import 'package:project/users_page.dart';
import 'package:tecfy_database/tecfy_database.dart';
void main() async {
// 初始化数据库实例
var db = TecfyDatabase(collections: [
TecfyCollection('tasks', tecfyIndexFields: [
[
TecfyIndexField(name: "title", type: FieldTypes.text, nullable: false),
TecfyIndexField(
name: "desc",
type: FieldTypes.integer,
),
],
[TecfyIndexField(name: "isDone", type: FieldTypes.boolean, asc: false)],
[
TecfyIndexField(
name: "createdAt", type: FieldTypes.datetime, asc: false)
],
]),
TecfyCollection(
'users',
tecfyIndexFields: [
[
TecfyIndexField(name: "name", type: FieldTypes.text, nullable: false),
],
[
TecfyIndexField(
name: "mobile",
type: FieldTypes.integer,
),
],
[
TecfyIndexField(
name: "createdAt", type: FieldTypes.datetime, asc: false)
],
],
),
TecfyCollection('roles')
]);
// 确保数据库已准备好
await db.isReady();
// 注册数据库实例以便在应用中全局访问
GetIt.I.registerSingleton<TecfyDatabase>(db, instanceName: 'db');
// 启动应用
runApp(const MyApp());
}
// 主应用类
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Todo App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
// 主页面类
class MyHomePage extends StatefulWidget {
const MyHomePage({
super.key,
});
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var db = GetIt.I.get<TecfyDatabase>(instanceName: 'db');
final TextEditingController _titleFieldController = TextEditingController();
final TextEditingController _descFieldController = TextEditingController();
// 显示对话框以添加或更新任务
Future<void> _displayDialog(value) async {
if (value != null) {
_titleFieldController.text = value['title'];
_descFieldController.text = value['desc'];
}
var result = await showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: const Text('Add a task to your list'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
child: TextField(
controller: _titleFieldController,
decoration: const InputDecoration(hintText: 'title'),
),
),
TextField(
controller: _descFieldController,
decoration: const InputDecoration(hintText: 'desc'),
),
],
),
actions: <Widget>[
TextButton(
child: Text(value != null ? "Update" : 'ADD'),
onPressed: value != null
? () async {
await db
.collection('tasks')
.doc(value['id'])
.update(data: {
"title": _titleFieldController.text,
"desc": _descFieldController.text,
// "isDone": true,
// "createdAt": value['createdAt']
}, notifier: true);
Navigator.of(context).pop();
}
: () async {
var insertResult =
await db.collection('tasks').add(data: {
"title": _titleFieldController.text,
"desc": _descFieldController.text,
"isDone": false,
"createdAt": DateTime.now()
});
Navigator.of(context).pop();
},
),
TextButton(
child: const Text('CANCEL'),
onPressed: () {
Navigator.of(context).pop();
},
)
],
);
});
if (result != null) {}
}
// 构建应用主界面
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
drawer: Drawer(
child: ListView(
children: [
DrawerHeader(
child: Text(
'Options',
style: TextStyle(color: Colors.white),
),
decoration: BoxDecoration(color: Theme.of(context).primaryColor),
),
ListTile(
leading: Icon(Icons.person),
title: Text('Users'),
onTap: () {
Navigator.push(
context, MaterialPageRoute(builder: (_) => UsersPage()));
},
),
ListTile(
leading: Icon(Icons.settings),
title: Text('Roles'),
onTap: () {
Navigator.push(
context, MaterialPageRoute(builder: (_) => RolesPage()));
},
),
ListTile(
leading: Icon(Icons.delete),
title: Text('Delete db'),
onTap: () async {
var db = GetIt.I.get<TecfyDatabase>(instanceName: 'db');
await db.collection('roles').clear();
},
),
],
),
),
appBar: AppBar(
title: const Text('Todo App'),
),
body: Row(
children: [
Expanded(
child: StreamBuilder(
stream: db.collection('tasks').stream(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
if (snapshot.data?.isEmpty ?? false) {
return Center(
child: Text(
"No Data found",
),
);
} else {
return ListView.builder(
itemCount: snapshot.data?.length,
itemBuilder: (context, index) =>
ListTile(
onTap: () => onUpdateClicekd(snapshot.data?[index]),
trailing: traillingWidget(snapshot.data?[index]),
leading: Text(snapshot.data?[index]['title']),
));
}
}),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () => _displayDialog(null),
tooltip: 'add new todo',
child: const Icon(Icons.add),
),
);
}
// 当任务被点击时调用此方法
void onUpdateClicekd(value) {
_displayDialog(value);
}
// 构建任务删除按钮
Widget traillingWidget(value) {
return IconButton(
onPressed: () async {
var result = await db
.collection('tasks')
.doc(value['id'].toString())
.delete(notifier: true);
},
icon: Icon(Icons.delete));
}
}
更多关于Flutter数据库管理插件tecfy_database的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件tecfy_database的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
tecfy_database
是一个用于 Flutter 的数据库管理插件,它提供了一种简单而灵活的方式来管理本地数据库。这个插件通常用于需要本地数据存储和管理的应用程序中,例如存储用户设置、缓存数据等。以下是使用 tecfy_database
的基本步骤和示例代码。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 tecfy_database
依赖:
dependencies:
flutter:
sdk: flutter
tecfy_database: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化数据库
在使用 tecfy_database
之前,你需要初始化数据库。通常,你可以在 main.dart
文件中完成这个操作:
import 'package:tecfy_database/tecfy_database.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化数据库
await TecfyDatabase.initDatabase('my_database.db');
runApp(MyApp());
}
3. 创建表
在数据库中创建表,你可以使用 createTable
方法:
await TecfyDatabase.createTable('users', {
'id': 'INTEGER PRIMARY KEY',
'name': 'TEXT',
'email': 'TEXT',
'age': 'INTEGER',
});
4. 插入数据
使用 insert
方法向表中插入数据:
await TecfyDatabase.insert('users', {
'name': 'John Doe',
'email': 'john.doe@example.com',
'age': 30,
});
5. 查询数据
使用 query
方法从表中查询数据:
List<Map<String, dynamic>> users = await TecfyDatabase.query('users');
for (var user in users) {
print('User: ${user['name']}, Email: ${user['email']}, Age: ${user['age']}');
}
你可以添加条件来过滤查询结果:
List<Map<String, dynamic>> users = await TecfyDatabase.query('users', where: 'age > ?', whereArgs: [25]);
6. 更新数据
使用 update
方法更新表中的数据:
await TecfyDatabase.update('users', {
'age': 31,
}, where: 'id = ?', whereArgs: [1]);
7. 删除数据
使用 delete
方法从表中删除数据:
await TecfyDatabase.delete('users', where: 'id = ?', whereArgs: [1]);
8. 删除表
如果你想删除一个表,可以使用 dropTable
方法:
await TecfyDatabase.dropTable('users');
9. 关闭数据库
在应用程序生命周期结束时,或者当你不再需要数据库连接时,可以关闭数据库:
await TecfyDatabase.closeDatabase();
示例应用
以下是一个简单的示例应用,演示了如何使用 tecfy_database
进行 CRUD 操作:
import 'package:flutter/material.dart';
import 'package:tecfy_database/tecfy_database.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await TecfyDatabase.initDatabase('my_database.db');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Tecfy Database Example')),
body: DatabaseExample(),
),
);
}
}
class DatabaseExample extends StatefulWidget {
[@override](/user/override)
_DatabaseExampleState createState() => _DatabaseExampleState();
}
class _DatabaseExampleState extends State<DatabaseExample> {
[@override](/user/override)
void initState() {
super.initState();
_initDatabase();
}
Future<void> _initDatabase() async {
await TecfyDatabase.createTable('users', {
'id': 'INTEGER PRIMARY KEY',
'name': 'TEXT',
'email': 'TEXT',
'age': 'INTEGER',
});
}
Future<void> _addUser() async {
await TecfyDatabase.insert('users', {
'name': 'Jane Doe',
'email': 'jane.doe@example.com',
'age': 28,
});
setState(() {});
}
Future<void> _fetchUsers() async {
List<Map<String, dynamic>> users = await TecfyDatabase.query('users');
for (var user in users) {
print('User: ${user['name']}, Email: ${user['email']}, Age: ${user['age']}');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _addUser,
child: Text('Add User'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _fetchUsers,
child: Text('Fetch Users'),
),
],
),
);
}
}