Flutter数据库注解插件floor_annotation的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter数据库注解插件floor_annotation的使用

Floor简介

Floor是一个类型安全、响应式且轻量级的SQLite抽象库,适用于您的Flutter应用程序(iOS, Android, Linux, macOS, Windows)。

不要导入这个包!你应该使用包含所有注解的floor包。将这些包分开对开发库有一些好处,但对用户没有。

名字来源

“Floor”这个词来源于它是Room架构中的一层,象征着数据库层是大多数应用程序的基础层。“fl”也暗示了该库在Flutter上下文中使用的含义。

Bugs和反馈

对于bug、问题和讨论,请使用Github Issues

License

Copyright 2022 The Floor Project Authors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

使用示例

下面是一个完整的示例,展示如何使用floorfloor_annotation来创建一个简单的数据库应用。

步骤1:添加依赖

首先,在pubspec.yaml文件中添加floorfloor_generator依赖:

dependencies:
  floor: ^1.2.0

dev_dependencies:
  floor_generator: ^1.2.0
  build_runner: ^2.1.7

步骤2:定义实体

创建一个实体类并使用注解来定义表结构:

import 'package:floor/floor.dart';

@Entity(tableName: 'person')
class Person {
  @PrimaryKey(autoGenerate: true)
  final int? id;

  final String name;
  final int age;

  Person({this.id, required this.name, required this.age});
}

步骤3:定义DAO

创建一个数据访问对象(DAO)接口,并使用注解定义查询方法:

import 'package:floor/floor.dart';
import 'person.dart';

@dao
abstract class PersonDao {
  @Query('SELECT * FROM person')
  Future<List<Person>> findAllPersons();

  @Query('SELECT * FROM person WHERE id = :id')
  Future<Person?> findPersonById(int id);

  @insert
  Future<void> insertPerson(Person person);
}

步骤4:设置数据库

创建一个数据库类并使用注解定义数据库配置:

import 'package:floor/floor.dart';
import 'person.dart';
import 'person_dao.dart';
import 'dart:async';

@Database(version: 1, entities: [Person])
abstract class AppDatabase extends FloorDatabase {
  PersonDao get personDao;
}

步骤5:生成代码

运行以下命令生成数据库相关代码:

flutter packages pub run build_runner build

步骤6:使用数据库

在你的主函数中初始化数据库并进行操作:

import 'package:flutter/material.dart';
import 'app_database.dart';
import 'person.dart';
import 'person_dao.dart';

void main() async {
  final database = await $FloorAppDatabase.databaseBuilder('app_database.db').build();
  final personDao = database.personDao;

  runApp(MyApp(personDao));
}

class MyApp extends StatelessWidget {
  final PersonDao personDao;

  MyApp(this.personDao);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Floor Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              final person = Person(name: 'John Doe', age: 30);
              await personDao.insertPerson(person);
              final persons = await personDao.findAllPersons();
              print(persons);
            },
            child: Text('Add Person'),
          ),
        ),
      ),
    );
  }
}

以上是一个完整的示例,展示了如何使用floorfloor_annotation插件来创建和操作SQLite数据库。希望对你有所帮助!


更多关于Flutter数据库注解插件floor_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库注解插件floor_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 floor_annotation 插件在 Flutter 中进行数据库操作的代码示例。floor 是一个基于 Dart 的 SQLite ORM 库,用于在 Flutter 应用中轻松处理数据库操作。floor_annotation 提供了必要的注解来定义数据库表、列和关系。

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 注解定义你的数据模型。例如,我们创建一个 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 注解定义数据访问对象(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. 定义数据库

使用 @Database 注解定义数据库,并将 DAO 接口包含在内:

import 'package:floor/floor.dart';
import 'user_dao.dart';
import 'user.dart';

@Database(version: 1, entities: [User])
abstract class AppDatabase extends FloorDatabase {
  UserDao get userDao;
}

5. 生成数据库代码

在项目根目录下运行以下命令来生成数据库代码:

flutter pub run build_runner build

这将生成一个 AppDatabase 的实现类,通常命名为 AppDatabase_Impl

6. 使用数据库

在你的 Flutter 应用中使用生成的数据库实例进行操作:

import 'package:flutter/material.dart';
import 'package:your_app_name/database/app_database.dart';
import 'package:your_app_name/models/user.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final database = await $FloorAppDatabase.databaseBuilder('your_database_name.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 user = User(name: 'John Doe');
    await widget.database.userDao.insertUser(user);
  }

  Future<void> _fetchUsers() async {
    final users = await widget.database.userDao.getAllUsers();
    print(users);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Floor Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            await _fetchUsers();
          },
          child: Text('Fetch Users'),
        ),
      ),
    );
  }
}

总结

以上代码展示了如何使用 floor_annotation 插件在 Flutter 应用中定义和使用 SQLite 数据库。通过注解定义数据模型和 DAO 接口,并使用 build_runner 生成数据库代码,可以简化数据库操作并提高效率。

回到顶部