Flutter数据库生成插件room_generator的使用

Flutter数据库生成插件room_generator的使用

在本教程中,我们将介绍如何使用 room_generator 插件来简化在 Flutter 应用程序中管理 SQLite 数据库的过程。room_generator 是一个与 room_annotation 包一起使用的代码生成器。

准备工作

首先,确保你的项目已经添加了必要的依赖项。在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  room_annotation: ^1.0.0
  room_generator: ^1.0.0

dev_dependencies:
  build_runner: ^2.0.0

然后运行 flutter pub get 来安装这些依赖项。

创建实体类

创建一个用于表示数据库表的实体类。例如,我们创建一个 User 类来表示用户信息:

import 'package:room_annotation/room_annotation.dart';

part 'user.g.dart';

@entity
class User {
  @PrimaryKey(autoGenerate: true)
  final int? id;

  final String name;
  final int age;

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

创建 DAO 类

接下来,创建一个数据访问对象(DAO)类,该类包含对数据库的操作方法。例如,我们创建一个 UserDao 类:

import 'package:room_annotation/room_annotation.dart';
import 'user.dart';

part 'user_dao.g.dart';

@dao
abstract class UserDao {
  @Query('SELECT * FROM user')
  Future<List<User>> getAllUsers();

  @insert
  Future<void> insertUser(User user);
  
  @delete
  Future<void> deleteUser(User user);

  @update
  Future<void> updateUser(User user);
}

生成代码

为了生成所需的代码,我们需要运行构建命令。在终端中运行以下命令:

flutter pub run build_runner build

这将生成 user.g.dartuser_dao.g.dart 文件,其中包含了必要的实现代码。

使用 DAO 类

现在可以在应用程序中使用 UserDao 类来进行数据库操作。例如,在 main() 函数中初始化数据库并执行一些操作:

import 'package:flutter/material.dart';
import 'package:your_project_name/user_dao.dart';
import 'package:your_project_name/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('Room Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 插入新用户
              final newUser = User(name: 'John Doe', age: 25);
              await userDao.insertUser(newUser);

              // 获取所有用户
              final users = await userDao.getAllUsers();
              print(users);
            },
            child: Text('Add User'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


room_generator 是一个用于简化 Flutter 应用中数据库操作的代码生成插件,它基于 floor 库,并提供了类似 Android 的 Room 持久化库的功能。通过使用 room_generator,你可以通过注解和代码生成的方式,自动生成数据库操作所需的代码,从而减少手动编写重复代码的工作量。

以下是使用 room_generator 的基本步骤:

1. 添加依赖

首先,在你的 Flutter 项目的 pubspec.yaml 文件中添加 floorroom_generator 的依赖。

dependencies:
  flutter:
    sdk: flutter
  floor: ^1.4.0  # 最新版本请查看 pub.dev

dev_dependencies:
  build_runner: ^2.1.0
  room_generator: ^1.4.0  # 最新版本请查看 pub.dev

然后运行 flutter pub get 来安装依赖。

2. 定义实体类

实体类代表数据库中的表。你可以使用 @Entity 注解来标记一个类,并定义表的列。

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 (Data Access Object)

DAO 是用于访问数据库的接口。你可以使用 @dao 注解来标记一个类,并定义查询、插入、更新和删除等操作。

import 'package:floor/floor.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);

  @update
  Future<void> updatePerson(Person person);

  @delete
  Future<void> deletePerson(Person person);
}

4. 定义数据库

你需要定义一个抽象类来表示数据库,并使用 @Database 注解来标记它。在这个类中,你需要指定数据库的版本号和包含的实体类。

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

part 'app_database.g.dart'; // 生成的代码

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

5. 生成代码

运行以下命令来生成数据库操作代码:

flutter pub run build_runner build

这将会生成 app_database.g.dart 文件,其中包含了数据库的实现和 DAO 的具体实现。

6. 使用数据库

现在你可以在你的应用中使用生成的数据库和 DAO 来执行数据库操作。

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

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

  runApp(MyApp(personDao: personDao));
}

class MyApp extends StatelessWidget {
  final PersonDao personDao;

  MyApp({required this.personDao});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Room Generator Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  final person = Person(id: null, name: 'John Doe', age: 30);
                  await personDao.insertPerson(person);
                  print('Person inserted');
                },
                child: Text('Insert Person'),
              ),
              ElevatedButton(
                onPressed: () async {
                  final persons = await personDao.findAllPersons();
                  print('Persons: $persons');
                },
                child: Text('Find All Persons'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部