Flutter数据库访问插件floor_common的使用
Flutter数据库访问插件floor_common的使用
安全、响应式且轻量级的SQLite抽象库,适用于您的Flutter应用程序(iOS、Android、Linux、macOS、Windows)
请勿导入此包!
您应该使用包含所有注解的floor
包。将这些包分开开发库有一些好处,但对用户来说并没有什么用处。
库名的来源如下。
Floor
作为Room
的底层
,指代数据库层是大多数应用程序的基础层。
而fl
也表明该库在Flutter环境中使用。
Bugs和反馈
如遇到问题、疑问或讨论,请使用GitHub Issues。
许可证
版权所有 2021 The Floor Project 作者
根据Apache许可证2.0版("许可证")授权;
除非适用法律要求或书面同意,否则根据许可证分发的软件按"原样"分发,
不附带任何明示或暗示的保证或条件。有关许可证下管理权限和限制的具体语言,请参阅许可证。
示例代码
1. 添加依赖项
在pubspec.yaml
文件中添加以下依赖项:
dependencies:
floor: ^0.10.0
floor_generator: ^0.10.0
build_runner: ^2.1.7
2. 创建实体类
创建一个实体类来表示数据库表中的数据。例如,我们创建一个名为User
的实体类:
import 'package:floor/floor.dart';
@Entity(tableName: 'users')
class User {
@PrimaryKey(autoGenerate: true)
final int? id;
@ColumnInfo(name: 'name')
final String name;
@ColumnInfo(name: 'email')
final String email;
User({this.id, required this.name, required this.email});
}
3. 创建DAO接口
创建一个DAO(Data Access Object)接口来定义数据库操作方法:
import 'package:floor/floor.dart';
import 'user.dart';
@dao
abstract class UserDao {
@Query('SELECT * FROM users')
Future<List<User>> findAllUsers();
@insert
Future<void> insertUser(User user);
@delete
Future<void> deleteUser(User user);
@update
Future<void> updateUser(User user);
}
4. 创建数据库实例
创建一个继承自FloorDatabase
的类来定义数据库操作:
import 'package:floor/floor.dart';
import 'user_dao.dart';
import 'user.dart';
part 'database.g.dart'; // 由build_runner生成的文件
@Database(version: 1, entities: [User])
abstract class AppDatabase extends FloorDatabase {
UserDao get userDao;
}
5. 生成必要的代码
运行以下命令以生成必要的代码:
flutter pub run build_runner build
6. 使用数据库
现在可以在应用中使用数据库了。例如,在一个页面中插入用户数据:
import 'package:flutter/material.dart';
import 'package:floor_example/database.dart'; // 假设这是你的数据库类
import 'package:floor_example/user.dart'; // 假设这是你的实体类
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final database = await $FloorAppDatabase.databaseBuilder('app_database.db').build();
final userDao = database.userDao;
runApp(MyApp(userDao: userDao));
}
class MyApp extends StatelessWidget {
final UserDao userDao;
MyApp({required this.userDao});
[@override](/user/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);
print('User inserted: ${user.name}');
},
child: Text('Insert User'),
),
),
),
);
}
}
更多关于Flutter数据库访问插件floor_common的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库访问插件floor_common的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,floor
是一个流行的数据库访问插件,它提供了对SQLite数据库的抽象,使得数据持久化操作变得更加简单和类型安全。floor_common
通常是 floor
插件的一部分,用于定义一些通用的类型和工具。
以下是一个使用 floor
插件进行数据库访问的完整示例,包括定义数据模型、DAO(数据访问对象)以及打开数据库连接。请注意,虽然 floor_common
并不是直接引用的库(它通常作为 floor
的一部分被包含),但我们将使用 floor
插件的功能来展示数据库访问。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 floor
依赖:
dependencies:
flutter:
sdk: flutter
floor: ^1.0.0 # 确保使用最新版本
dev_dependencies:
build_runner: ^2.0.0
floor_generator: ^1.0.0 # 确保与 floor 版本匹配
2. 定义数据模型
创建一个数据模型类,并使用 @Entity
注解标记它。
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 接口,用于数据库操作,并使用 @Dao
注解标记它。
import 'package:floor/floor.dart';
import 'user.dart';
@Dao
interface 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. 定义数据库
创建一个数据库抽象类,并使用 @Database
注解标记它,同时指定 DAO 和数据库版本。
import 'package:floor/floor.dart';
import 'user_dao.dart';
import 'user.dart';
@Database(version: 1, entities: [User], daos: [UserDao])
abstract class AppDatabase extends FloorDatabase {
UserDao get userDao;
}
5. 打开数据库连接
在你的 Flutter 应用中打开数据库连接。
import 'package:flutter/material.dart';
import 'package:floor/floor.dart';
import 'app_database.dart';
Future<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> {
@override
void initState() {
super.initState();
_insertUser();
}
Future<void> _insertUser() async {
final userDao = widget.database.userDao;
await userDao.insertUser(User(name: 'Alice'));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Floor Example')),
body: FutureBuilder<List<User>>(
future: widget.database.userDao.getAllUsers(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
final users = snapshot.data ?? [];
return ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
return ListTile(title: Text(users[index].name));
},
);
} else {
return CircularProgressIndicator();
}
},
),
);
}
}
6. 生成代码
在项目根目录下运行以下命令以生成 floor
所需的代码:
flutter pub run build_runner build
这将生成 $FloorAppDatabase
等必要的类,这些类将用于数据库操作。
总结
以上代码展示了如何使用 floor
插件在 Flutter 项目中进行数据库访问。虽然 floor_common
不是直接引用的库,但 floor
插件本身已经包含了所有必要的通用类型和工具,使得数据库操作变得简单和类型安全。