Flutter数据库基础设施插件db_infra的使用
Flutter数据库基础设施插件db_infra的使用
在本示例中,我们将展示如何使用db_infra
插件来处理数据库操作。我们将创建一个简单的Flutter应用,该应用能够连接到SQLite数据库并执行基本的CRUD(创建、读取、更新、删除)操作。
示例代码
首先,确保你已经添加了db_infra
依赖到你的pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
db_infra: ^1.0.0
然后,运行flutter pub get
以安装依赖项。
接下来,我们来看一下完整的示例代码。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:db_infra/db_infra.dart'; // 导入db_infra库
void main() {
runApp(const MyApp());
}
///
class MyApp extends StatelessWidget {
///
const MyApp({Key? key}) : super(key: key);
// 这个小部件是你的应用的根。
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// 这是你应用的主题。
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
///
class MyHomePage extends StatefulWidget {
///
const MyHomePage({required this.title, Key? key}) : super(key: key);
// 这个小部件是你的应用的主页面。它是一个有状态的小部件,意味着它有一个包含影响其外观字段的状态对象。
// 这个类是状态的配置。它持有由父级(在这个例子中是App小部件)提供的值(在这个例子中是标题),并用于构建方法的状态构建。
// 小部件子类中的字段总是标记为“final”。
///
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
DatabaseHelper dbHelper = DatabaseHelper(); // 创建DatabaseHelper实例
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('你按下了按钮次数:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
ElevatedButton(
onPressed: () async {
await dbHelper.insertData('test', {'name': 'John Doe'});
print('数据插入成功');
},
child: Text('插入数据'),
),
ElevatedButton(
onPressed: () async {
var data = await dbHelper.getData('test');
print('查询结果: $data');
},
child: Text('查询数据'),
),
ElevatedButton(
onPressed: () async {
await dbHelper.updateData('test', 1, {'name': 'Jane Doe'});
print('数据更新成功');
},
child: Text('更新数据'),
),
ElevatedButton(
onPressed: () async {
await dbHelper.deleteData('test', 1);
print('数据删除成功');
},
child: Text('删除数据'),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
数据库帮助类 DatabaseHelper
为了简化数据库操作,我们可以创建一个帮助类DatabaseHelper
来封装所有的数据库操作逻辑。
import 'package:db_infra/db_infra.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
factory DatabaseHelper() => _instance;
DatabaseHelper._internal();
Database? _database;
Future<Database> get database async {
if (_database != null) return _database!;
_database = await initializeDatabase();
return _database!;
}
Future<Database> initializeDatabase() async {
Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, 'app_database.db');
return await openDatabase(path, version: 1, onCreate: _onCreate);
}
void _onCreate(Database db, int version) async {
await db.execute("CREATE TABLE test(id INTEGER PRIMARY KEY, name TEXT)");
}
Future<void> insertData(String tableName, Map<String, dynamic> row) async {
final db = await database;
await db.insert(tableName, row);
}
Future<List<Map<String, dynamic>>> getData(String tableName) async {
final db = await database;
return await db.query(tableName);
}
Future<int> updateData(String tableName, int id, Map<String, dynamic> row) async {
final db = await database;
return await db.update(tableName, row, where: 'id = ?', whereArgs: [id]);
}
Future<int> deleteData(String tableName, int id) async {
final db = await database;
return await db.delete(tableName, where: 'id = ?', whereArgs: [id]);
}
}
更多关于Flutter数据库基础设施插件db_infra的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库基础设施插件db_infra的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
db_infra
是一个用于 Flutter 的数据库基础设施插件,旨在简化本地数据库的管理和操作。它提供了一种简单的方式来处理 SQLite 数据库,并且支持多种数据库操作,如查询、插入、更新和删除等。
以下是如何使用 db_infra
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 db_infra
插件的依赖:
dependencies:
flutter:
sdk: flutter
db_infra: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化数据库
在你的 Flutter 应用中,你需要初始化数据库。通常,你可以在 main.dart
文件中进行初始化:
import 'package:db_infra/db_infra.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化数据库
await DbInfra.initialize(dbName: 'my_database.db');
runApp(MyApp());
}
3. 创建数据模型
db_infra
使用数据模型来映射数据库表。你需要创建一个类来表示你的数据模型,并继承 DbModel
:
import 'package:db_infra/db_infra.dart';
class User extends DbModel {
int? id;
String? name;
int? age;
User({this.id, this.name, this.age});
[@override](/user/override)
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'age': age,
};
}
[@override](/user/override)
User fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
age: map['age'],
);
}
}
4. 创建数据库表
在使用数据模型之前,你需要创建对应的数据库表。你可以在应用的启动时执行此操作:
void createTable() async {
await DbInfra.createTable(User());
}
5. 插入数据
你可以使用 insert
方法将数据插入到数据库中:
void insertUser() async {
User user = User(name: 'John Doe', age: 30);
await DbInfra.insert(user);
}
6. 查询数据
你可以使用 query
方法来查询数据:
void queryUsers() async {
List<User> users = await DbInfra.query(User());
users.forEach((user) {
print('ID: ${user.id}, Name: ${user.name}, Age: ${user.age}');
});
}
7. 更新数据
你可以使用 update
方法来更新数据:
void updateUser() async {
User user = User(id: 1, name: 'Jane Doe', age: 25);
await DbInfra.update(user);
}
8. 删除数据
你可以使用 delete
方法来删除数据:
void deleteUser() async {
User user = User(id: 1);
await DbInfra.delete(user);
}
9. 关闭数据库
在应用退出时,你可以关闭数据库连接:
void closeDatabase() async {
await DbInfra.close();
}
10. 使用示例
以下是一个完整的示例,展示了如何使用 db_infra
:
import 'package:flutter/material.dart';
import 'package:db_infra/db_infra.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DbInfra.initialize(dbName: 'my_database.db');
// 创建表
await DbInfra.createTable(User());
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('db_infra Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: insertUser,
child: Text('Insert User'),
),
ElevatedButton(
onPressed: queryUsers,
child: Text('Query Users'),
),
ElevatedButton(
onPressed: updateUser,
child: Text('Update User'),
),
ElevatedButton(
onPressed: deleteUser,
child: Text('Delete User'),
),
],
),
),
),
);
}
}
class User extends DbModel {
int? id;
String? name;
int? age;
User({this.id, this.name, this.age});
[@override](/user/override)
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'age': age,
};
}
[@override](/user/override)
User fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
age: map['age'],
);
}
}
void insertUser() async {
User user = User(name: 'John Doe', age: 30);
await DbInfra.insert(user);
}
void queryUsers() async {
List<User> users = await DbInfra.query(User());
users.forEach((user) {
print('ID: ${user.id}, Name: ${user.name}, Age: ${user.age}');
});
}
void updateUser() async {
User user = User(id: 1, name: 'Jane Doe', age: 25);
await DbInfra.update(user);
}
void deleteUser() async {
User user = User(id: 1);
await DbInfra.delete(user);
}