Flutter数据库管理插件dorm_bloc_database的使用
Flutter数据库管理插件dorm_bloc_database的使用
dorm_bloc_database
dorm_bloc_database
是一个基于 bloc
的 dORM
数据库管理插件。
开始使用
在命令行中运行以下命令以添加插件:
dart pub add dorm_bloc_database
使用 dorm_annotations
和 dorm_generator
生成您的 dORM
代码:
dart run build_runner build
这将创建一个 Dorm
类,您可以使用它来连接到此包。
使用方法
首先,创建一个 Reference
:
void main() {
final Reference reference = Reference();
}
然后,将上面创建的引用传递给生成的 Dorm
类:
void main() {
final Dorm dorm = Dorm(reference);
}
完整示例
以下是一个完整的示例,展示了如何使用 dorm_bloc_database
插件来管理用户数据。
import 'package:device_preview/device_preview.dart';
import 'package:dorm_bloc_database/dorm_bloc_database.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:provider/provider.dart';
import 'models.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final Engine engine = Engine();
// 推荐的方法是有一个全局实例来访问生成的 `Dorm` 类。这里我们使用依赖注入,
// 并且使用了一个很棒的解决方案叫做 `get_it`,但你可以自由地使用 `provider` 或任何其他方法。
GetIt.instance.registerSingleton<Dorm>(Dorm(engine));
runApp(DevicePreview(
defaultDevice: DeviceInfo.genericPhone(
platform: TargetPlatform.android,
id: '',
name: '',
screenSize: const Size(360, 800),
),
isToolbarVisible: false,
builder: (_) => const MyApp(),
));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<AsyncSnapshot<List<User>>>( // 使用 StreamProvider 提供用户列表的异步快照
initialData: const AsyncSnapshot.waiting(), // 初始状态为等待
create: (_) => GetIt.instance
.get<Dorm>() // 获取 Dorm 实例
.users // 获取用户 Repository
.repository // 获取 Repository 实例
.pullAll() // 拉取所有用户数据
.map((event) => AsyncSnapshot.withData(ConnectionState.active, event)), // 将事件映射为 AsyncSnapshot
),
],
child: SafeArea(
child: Scaffold(
appBar: AppBar(title: const Text('Users')), // 设置应用栏标题
body: Consumer<AsyncSnapshot<List<User>>>( // 使用 Consumer 来监听 AsyncSnapshot 的变化
child: const Center(child: CircularProgressIndicator()), // 在加载时显示圆形进度指示器
builder: (context, snapshot, child) {
if (snapshot.connectionState == ConnectionState.waiting) {
return child!; // 如果正在等待,则显示圆形进度指示器
}
final List<User> users = snapshot.data ?? []; // 获取用户列表
if (users.isEmpty) {
return const Center(child: Text('No users.')); // 如果没有用户,显示 "No users."
}
return ListView.builder( // 显示用户列表
itemCount: users.length, // 用户数量
itemBuilder: (context, i) {
final User user = users[i]; // 获取当前用户
return ListTile(
leading: const Icon(Icons.person), // 用户图标
title: Text(user.name), // 用户名
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
OutlinedButton( // 编辑按钮
onPressed: () async {
final String? updatedName = await showDialog(
context: context,
builder: (_) => const TextInputDialog(title: 'Update user'), // 弹出对话框
);
if (updatedName == null) return;
await GetIt.instance
.get<Dorm>() // 获取 Dorm 实例
.users // 获取用户 Repository
.repository // 获取 Repository 实例
.push(User(id: user.id, name: updatedName)); // 更新用户信息
},
child: const Text('edit'), // 编辑文本
),
const SizedBox(width: 10), // 间距
OutlinedButton( // 删除按钮
onPressed: () async {
await GetIt.instance
.get<Dorm>() // 获取 Dorm 实例
.users // 获取用户 Repository
.repository // 获取 Repository 实例
.pop(user.id); // 删除用户
},
child: const Text(
'delete',
style: TextStyle(color: Colors.red), // 删除文本颜色为红色
),
),
],
),
);
},
);
},
),
floatingActionButton: FloatingActionButton( // 添加按钮
onPressed: () async {
final String? name = await showDialog(
context: context,
builder: (_) => const TextInputDialog(title: 'Create user'), // 弹出对话框
);
if (name == null) return;
await GetIt.instance
.get<Dorm>() // 获取 Dorm 实例
.users // 获取用户 Repository
.repository // 获取 Repository 实例
.put(const UserDependency(), UserData(name: name)); // 创建新用户
},
child: const Icon(Icons.add), // 添加图标
),
),
),
);
}
}
class TextInputDialog extends StatelessWidget {
final String title;
const TextInputDialog({super.key, required this.title});
[@override](/user/override)
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<TextEditingController>( // 使用 ChangeNotifierProvider 管理 TextEditingController
create: (_) => TextEditingController(), // 创建 TextEditingController 实例
),
],
child: AlertDialog(
title: Text(title), // 对话框标题
icon: const Icon(Icons.supervisor_account), // 图标
content: Padding(
padding: const EdgeInsets.symmetric(horizontal: 15),
child: Consumer<TextEditingController>( // 使用 Consumer 监听 TextEditingController 的变化
builder: (context, controller, _) {
return TextFormField( // 文本输入框
controller: controller, // 绑定 TextEditingController
decoration: const InputDecoration(
border: OutlineInputBorder(), // 输入框边框样式
labelText: 'Name', // 输入框标签
),
);
},
),
),
actions: [
TextButton( // 取消按钮
onPressed: () => Navigator.of(context).pop(), // 关闭对话框
child: const Text('cancel', style: TextStyle(color: Colors.red)), // 取消文本颜色为红色
),
Consumer<TextEditingController>( // 使用 Consumer 监听 TextEditingController 的变化
builder: (context, controller, _) {
return TextButton( // 提交按钮
onPressed: () => Navigator.of(context).pop(controller.text), // 提交文本并关闭对话框
child: const Text('submit'), // 提交文本
);
},
),
],
),
);
}
}
更多关于Flutter数据库管理插件dorm_bloc_database的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库管理插件dorm_bloc_database的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dorm_bloc_database
是一个用于 Flutter 的数据库管理插件,它结合了 dorm
和 bloc
两个库,提供了一个简单的方式来管理应用程序的本地数据库。dorm
是一个 ORM(对象关系映射)库,而 bloc
是一个状态管理库。通过结合这两个库,dorm_bloc_database
可以帮助你在 Flutter 应用中更高效地管理数据库操作和状态。
安装
首先,你需要在 pubspec.yaml
文件中添加 dorm_bloc_database
依赖:
dependencies:
flutter:
sdk: flutter
dorm_bloc_database: ^0.1.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
1. 定义数据模型
首先,你需要定义你的数据模型。dorm
使用注解来定义实体和字段。
import 'package:dorm/dorm.dart';
@Entity()
class User {
@Field()
int id;
@Field()
String name;
@Field()
String email;
User({this.id, this.name, this.email});
}
2. 创建数据库连接
接下来,你需要创建一个数据库连接。dorm_bloc_database
提供了一个 DatabaseBloc
来管理数据库操作。
import 'package:dorm_bloc_database/dorm_bloc_database.dart';
final databaseBloc = DatabaseBloc(
databaseName: 'my_database.db',
version: 1,
entities: [User],
);
3. 初始化数据库
在使用数据库之前,你需要初始化它。你可以在 main
函数中初始化数据库:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await databaseBloc.init();
runApp(MyApp());
}
4. 使用 BLoC 进行数据库操作
你可以使用 DatabaseBloc
来执行数据库操作,例如插入、查询、更新和删除数据。
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: BlocProvider(
create: (context) => databaseBloc,
child: HomePage(),
),
);
}
}
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
final databaseBloc = BlocProvider.of<DatabaseBloc>(context);
return Scaffold(
appBar: AppBar(title: Text('Dorm BLoC Database Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () async {
final user = User(id: 1, name: 'John Doe', email: 'john@example.com');
await databaseBloc.insert(user);
},
child: Text('Insert User'),
),
ElevatedButton(
onPressed: () async {
final users = await databaseBloc.query<User>();
print(users);
},
child: Text('Query Users'),
),
],
),
),
);
}
}