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

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

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

在Flutter中使用Isar数据库时,isar_generator 插件可以简化数据库模型的创建过程。它可以根据预定义的类自动生成用于Isar数据库的代码。

安装依赖

首先,在你的 pubspec.yaml 文件中添加 isar_generatorisar_flutter_libs 依赖项:

dependencies:
  isar_flutter_libs: ^0.1.0

dev_dependencies:
  build_runner: ^2.1.7
  isar_generator: ^0.1.0

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

创建数据模型

接下来,我们需要定义一些数据模型类。这些类将被 isar_generator 使用来生成必要的代码。

import 'package:isar_flutter_libs/isar_flutter_libs.dart';

part 'person.g.dart'; // 这个文件将由isar_generator生成

@Collection()
class Person {
  Id id = Isar.autoIncrement; // 主键,自动增长
  String name;
  int age;

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

生成代码

为了生成必要的代码,你需要运行以下命令:

flutter pub run build_runner build

这将在你的项目中生成一个名为 person.g.dart 的文件。该文件包含了Isar所需的代码,例如索引和其他配置。

使用Isar数据库

现在,我们可以开始使用Isar数据库了。首先,我们需要初始化Isar数据库:

import 'package:flutter/material.dart';
import 'package:isar_flutter_libs/isar_flutter_libs.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  final dir = await getApplicationDocumentsDirectory();
  final isar = await Isar.open([PersonSchema], directory: dir.path);
  
  runApp(MyApp(isar: isar));
}

class MyApp extends StatelessWidget {
  final Isar isar;

  MyApp({required this.isar});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Isar Example')),
        body: Center(child: Text('Hello World')),
      ),
    );
  }
}

添加和查询数据

我们可以在应用中添加和查询数据。这里是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:isar_flutter_libs/isar_flutter_libs.dart';

class MyApp extends StatelessWidget {
  final Isar isar;

  MyApp({required this.isar});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Isar Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 添加数据
              final person = Person(name: 'Alice', age: 30);
              await isar.writeTxn(() => isar.persons.put(person));

              // 查询数据
              final query = isar.persons.where().nameEqualTo('Alice').findAll();
              print(await query);
            },
            child: Text('Add and Query Data'),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 isar_generator 插件来生成 Flutter 应用的 Isar 数据库模型的代码示例。isar_generator 是一个用于 Flutter 和 Dart 的代码生成器,它可以根据定义的模型类自动生成 Isar 数据库的代码。

首先,确保在你的 pubspec.yaml 文件中添加必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  isar: ^x.y.z  # 请使用最新版本号
  isar_flutter_libs: ^x.y.z  # 适配 Flutter 的 Isar 库

dev_dependencies:
  build_runner: ^x.y.z  # 代码生成工具
  isar_generator: ^x.y.z  # Isar 代码生成器

然后,在你的项目中创建一个数据模型类,并使用 @IsarCollection()@IsarIndex() 注解来标记它。例如,创建一个表示用户信息的模型类:

import 'package:isar/isar.dart';
import 'package:isar_generator/isar_generator.dart';

part 'user_model.g.dart';

@IsarCollection()
class User {
  @IsarId()
  int? id;

  @IsarIndex()
  String name;

  int age;

  // 其他字段...
}

注意上面的 part 'user_model.g.dart'; 语句,它指示 Dart 生成一个名为 user_model.g.dart 的文件,该文件将包含由 isar_generator 生成的代码。

接下来,运行 build_runner 来生成代码:

flutter pub run build_runner build

这将生成 user_model.g.dart 文件,其中包含了 Isar 数据库操作所需的代码。

现在,你可以在你的 Flutter 应用中使用生成的代码来操作数据库。例如,打开数据库并插入一些用户数据:

import 'package:flutter/material.dart';
import 'package:isar/isar.dart';
import 'user_model.dart';  // 导入你的模型类

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Isar Example'),
        ),
        body: IsarProvider(
          databases: [
            IsarDatabaseDef(
              name: 'my_database',
              schemas: [
                UserSchema(),  // 使用生成的 UserSchema
              ],
            ),
          ],
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late Isar isar;

  @override
  void initState() {
    super.initState();
    isar = Isar.open(schemas: [UserSchema()]);  // 打开数据库
    _insertData();
  }

  Future<void> _insertData() async {
    final user = User()
      ..name = 'John Doe'
      ..age = 30;

    await isar.write(() {
      isar.users.put(user);
    });

    print('User inserted: $user');
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text('Check console for user data'),
    );
  }

  @override
  void dispose() {
    isar.close();
    super.dispose();
  }
}

注意几点:

  1. IsarProviderIsar 用于管理数据库实例。
  2. UserSchema() 是由 isar_generator 自动生成的,用于定义数据库模式。
  3. 数据插入操作在 isar.write() 块中执行,以确保事务安全。

这个示例展示了如何使用 isar_generator 来简化 Isar 数据库模型的定义和操作。请确保在实际项目中根据需求调整模型类和数据库操作。

回到顶部