Flutter数据库代码生成插件hive_generator的使用

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

Flutter数据库代码生成插件hive_generator的使用

hive扩展

hive_generator 是一个用于Hive数据库的代码生成插件,它可以帮助您自动生成Hive对象的适配器代码。请参考 hive 的文档获取更多信息。

Hive示例

要查看使用Hive的示例,请访问 这里

接下来,我们将提供一个完整的示例来演示如何在Flutter项目中使用 hive_generator 插件。

完整示例Demo

  1. 添加依赖项

    在您的 pubspec.yaml 文件中添加以下依赖项:

    dependencies:
      flutter:
        sdk: flutter
      hive: ^2.0.4
      hive_flutter: ^1.1.0
    
    dev_dependencies:
      build_runner: ^2.0.4
      hive_generator: ^1.1.0
    
  2. 创建实体类

    创建一个新的Dart文件(例如 user.dart),并定义一个简单的实体类:

    import 'package:hive/hive.dart';
    
    // 使用 [@HiveType](/user/HiveType) 注解标识这个类是一个Hive对象
    [@HiveType](/user/HiveType)(typeId: 0)
    class User extends HiveObject {
      // 使用 @HiveField 注解标识字段
      @HiveField(0)
      String name;
    
      @HiveField(1)
      int age;
    
      User({required this.name, required this.age});
    }
    
  3. 生成适配器

    运行以下命令生成适配器代码:

    flutter packages pub run build_runner build
    

    这将生成一个名为 user.g.dart 的文件,其中包含 User 类的适配器代码。

  4. 初始化Hive

    在您的 main.dart 文件中初始化Hive:

    import 'package:flutter/material.dart';
    import 'package:hive_flutter/hive_flutter.dart';
    import 'user.dart'; // 导入实体类
    
    void main() async {
      // 初始化Hive
      await Hive.initFlutter();
      
      // 注册适配器
      Hive.registerAdapter(UserAdapter());
      
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: HomeScreen(),
        );
      }
    }
    
  5. 使用Hive存储数据

    创建一个 HomeScreen 小部件来演示如何使用Hive存储和检索数据:

    class HomeScreen extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: Text('Hive Demo')),
          body: ValueListenableBuilder<Box<User>>(
            valueListenable: Hive.box<User>('users').listenable(),
            builder: (context, box, widget) {
              final users = box.values.toList();
              return ListView.builder(
                itemCount: users.length,
                itemBuilder: (context, index) {
                  final user = users[index];
                  return ListTile(
                    title: Text(user.name),
                    subtitle: Text('Age: ${user.age}'),
                  );
                },
              );
            },
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: () async {
              // 打开或创建一个名为 'users' 的盒子
              final box = await Hive.openBox<User>('users');
              
              // 添加一个新的用户
              box.add(User(name: 'John Doe', age: 30));
            },
            child: Icon(Icons.add),
          ),
        );
      }
    }
    

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用hive_generator插件来生成Hive数据库代码的具体代码案例。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加hivehive_generator的依赖:

dependencies:
  flutter:
    sdk: flutter
  hive: ^2.0.4  # 请确保使用最新版本
  hive_flutter_helper: ^1.1.0  # 如果需要在Flutter中使用Hive的便捷功能

dev_dependencies:
  build_runner: ^2.1.4
  hive_generator: ^1.1.1  # 请确保使用最新版本

2. 运行Flutter Pub Get

在终端中运行以下命令来获取依赖:

flutter pub get

3. 创建数据模型

创建一个新的Dart文件(例如models/user.dart),并定义一个Hive Type:

import 'package:hive/hive.dart';

part 'user.g.dart';  // 生成的代码将会放在这个文件里

@HiveType(typeId: 0)
class User extends HiveObject {
  @HiveField(0)
  String name;

  @HiveField(1)
  int age;

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

4. 生成Hive代码

在终端中运行以下命令来生成Hive代码:

flutter pub run build_runner build

这个命令将会生成user.g.dart文件,里面包含了Hive需要的序列化代码。

5. 使用Hive数据库

接下来,在你的应用中初始化Hive并使用生成的模型:

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter_helper/hive_flutter_helper.dart';
import 'models/user.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化Hive
  final box = await Hive.initFlutter();
  await box.openBox<User>('users');

  // 示例数据
  final user = User(name: 'Alice', age: 30);

  // 保存数据
  await box.box<User>('users').put(user.id, user);

  // 读取数据
  final retrievedUser = await box.box<User>('users').get(user.id);

  runApp(MyApp(retrievedUser: retrievedUser));
}

class MyApp extends StatelessWidget {
  final User? retrievedUser;

  MyApp({this.retrievedUser});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hive Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Name: ${retrievedUser?.name ?? 'N/A'}'),
              Text('Age: ${retrievedUser?.age ?? 'N/A'}'),
            ],
          ),
        ),
      ),
    );
  }
}

6. 运行应用

现在你可以运行你的Flutter应用,并查看是否正确地保存和读取了Hive数据库中的数据。

flutter run

这个代码案例展示了如何在Flutter项目中使用hive_generator插件来生成Hive数据库的代码,并演示了基本的CRUD操作。确保你已经正确设置了所有依赖,并且按照步骤生成了必要的代码文件。

回到顶部