Flutter数据库生成插件floor_generator的使用
Flutter数据库生成插件floor_generator的使用
Floor简介
Floor是一个为Flutter应用程序(iOS、Android、Linux、macOS、Windows)提供的类型安全、反应式和轻量级的SQLite抽象层。它来源于Android的Room库,是应用数据库层的基础,同时“fl”也指明了该库适用于Flutter环境。
示例代码
下面将提供一个完整的示例demo来展示如何在Flutter项目中使用floor_generator
。
依赖配置
首先,在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
floor: ^1.3.0 # 确保版本号是最新的稳定版
sqlite3_flutter_libs: any # SQLite3支持
dev_dependencies:
build_runner: ^2.0.0
floor_generator: ^1.3.0 # 确保版本号与floor保持一致
然后运行命令安装这些包:
flutter pub get
创建实体类
接下来,定义一个实体类。例如,我们创建一个名为User
的实体:
import 'package:floor/floor.dart';
@Entity(tableName: 'users')
class User {
@PrimaryKey(autoGenerate: true)
final int? id;
final String name;
final String email;
User({this.id, required this.name, required this.email});
// 必须实现copyWith方法用于更新对象
User copyWith({
int? id,
String? name,
String? email,
}) =>
User(
id: id ?? this.id,
name: name ?? this.name,
email: email ?? this.email,
);
}
定义DAO接口
接着,定义一个数据访问对象(DAO),用于操作User
实体:
import 'package:floor/floor.dart';
import '../entities/user.dart';
@dao
abstract class UserDao {
@Insert(onConflict: OnConflictStrategy.replace)
Future<int> insertUser(User user);
@Query('SELECT * FROM users')
Future<List<User>> findAllUsers();
}
创建数据库
最后,创建一个继承自FloorDatabase
的类,将前面定义的DAO注册进去:
import 'package:floor/floor.dart';
import 'dart:async';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart' as sqflite;
import '../dao/user_dao.dart';
import '../entities/user.dart';
part 'app_database.g.dart'; // the generated code will be there
@Database(version: 1, entities: [User])
abstract class AppDatabase extends FloorDatabase {
UserDao get userDao;
}
注意:你需要确保文件名和part
指令中的路径匹配,并且在同一个目录下。此外,还需保证AppDatabase
类的文件名以.dart
结尾,而生成的代码文件将以.g.dart
结尾。
生成代码
完成上述步骤后,你可以通过以下命令生成必要的代码:
flutter pub run build_runner build
这将在指定的位置生成对应的.g.dart
文件,其中包含了所有需要的实现。
使用数据库
现在你可以在应用程序中使用这个数据库了。例如,在主函数中初始化并执行一些操作:
import 'package:flutter/material.dart';
import 'package:floor/floor.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
import 'database/app_database.dart';
import 'entities/user.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final database = await $FloorAppDatabase.databaseBuilder('app_database.db').build();
final userDao = database.userDao;
runApp(MyApp(userDao));
}
class MyApp extends StatelessWidget {
final UserDao userDao;
MyApp(this.userDao);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Floor Example')),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 插入新用户
final user = User(name: 'John Doe', email: 'john.doe@example.com');
await userDao.insertUser(user);
// 查询所有用户
final users = await userDao.findAllUsers();
print(users);
},
child: Text('Add User'),
),
),
),
);
}
}
以上就是使用floor_generator
在Flutter项目中集成SQLite数据库的基本流程。希望这个例子能帮助你更好地理解和使用这个强大的工具!
如果你有任何问题或遇到困难,请随时查阅官方文档或前往GitHub Issues寻求帮助。
更多关于Flutter数据库生成插件floor_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库生成插件floor_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter数据库生成插件floor_generator
的示例代码。这个示例将展示如何设置一个简单的数据库、定义一个实体类、创建一个DAO(数据访问对象),并使用Floor生成相关的数据库代码。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加floor
和floor_generator
依赖:
dependencies:
flutter:
sdk: flutter
floor: ^1.0.0 # 请检查最新版本号
dev_dependencies:
build_runner: ^2.0.0 # 请检查最新版本号
floor_generator: ^1.0.0 # 请检查最新版本号
2. 创建实体类
定义一个简单的实体类,例如User
:
import 'package:floor/floor.dart';
@Entity(tableName: 'users')
class User {
@PrimaryKey(autoGenerate: true)
final int id;
@ColumnInfo(name: 'name')
final String name;
User({required this.name});
}
3. 创建DAO接口
定义一个DAO接口来执行数据库操作:
import 'package:floor/floor.dart';
import 'user.dart';
@Dao
abstract class UserDao {
@Insert(onConflict: OnConflictStrategy.replace)
Future<void> insertUser(User user);
@Query('SELECT * FROM users')
Future<List<User>> getAllUsers();
@Delete
Future<void> deleteUser(User user);
}
4. 定义数据库类
定义一个数据库类来管理数据库连接:
import 'package:floor/floor.dart';
import 'user.dart';
import 'user_dao.dart';
@Database(version: 1, entities: [User])
abstract class AppDatabase extends FloorDatabase {
UserDao get userDao;
}
5. 生成数据库代码
在项目根目录下运行以下命令来生成数据库代码:
flutter pub run build_runner build
这将生成一个AppDatabase
的实现类,你可以在应用的其它部分使用这个实现类。
6. 使用数据库
在你的Flutter应用中打开数据库并执行一些操作:
import 'package:flutter/material.dart';
import 'package:my_app/database/app_database.dart';
import 'package:my_app/database/user.dart';
import 'package:floor/floor.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final database = await $FloorAppDatabase.databaseBuilder('my_database.db').build();
runApp(MyApp(database: database));
}
class MyApp extends StatelessWidget {
final AppDatabase database;
MyApp({required this.database});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(database: database),
);
}
}
class MyHomePage extends StatefulWidget {
final AppDatabase database;
MyHomePage({required this.database});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<List<User>>? _usersFuture;
@override
void initState() {
super.initState();
_initializeDatabase();
}
Future<void> _initializeDatabase() async {
final User user = User(name: 'Alice');
await widget.database.userDao.insertUser(user);
setState(() {
_usersFuture = widget.database.userDao.getAllUsers();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Floor Example'),
),
body: FutureBuilder<List<User>>(
future: _usersFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('User ${snapshot.data![index].name}'),
);
},
);
} else {
return CircularProgressIndicator();
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
final User user = User(name: 'Bob');
await widget.database.userDao.insertUser(user);
setState(() {
_usersFuture = widget.database.userDao.getAllUsers();
});
},
tooltip: 'Add User',
child: Icon(Icons.add),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,它使用Floor数据库来存储和检索用户信息。在应用的初始化阶段,我们插入了一个用户,并在UI中显示所有用户。通过点击浮动操作按钮,可以添加新用户。
希望这个示例能够帮助你理解如何使用floor_generator
插件。如果你有任何其他问题,请随时提问!