Flutter自定义代码生成插件laia_riverpod_custom_generator的使用

Flutter自定义代码生成插件laia_riverpod_custom_generator的使用

Introduction(介绍)

laia_riverpod_custom_generator 是一个代码生成包,它可以根据给定的 Dart 类模型生成 Riverpod 提供者(providers),用于处理 CRUD(创建、读取、更新、删除)操作。

Installation(安装)

pubspec.yaml 文件中添加以下依赖:

dev_dependencies:
    laia_riverpod_custom_generator: latest

然后运行以下命令以获取最新版本:

flutter pub get

Usage(使用)

1. 创建一个 Dart 模型类

首先,我们需要一个 Dart 类来表示数据模型。例如,我们创建一个简单的 User 类:

// lib/models/user.dart
class User {
  final String id;
  final String name;
  final String email;

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

2. 使用代码生成器生成 Riverpod 提供者

接下来,我们需要使用 laia_riverpod_custom_generator 来生成与该模型相关的 Riverpod 提供者。为此,我们可以在 lib 目录下创建一个名为 user_provider.g.dart 的文件,并在其中定义生成器指令。

定义生成器指令

lib 目录下创建一个 user_provider.g.dart 文件,并添加以下内容:

// lib/user_provider.g.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'models/user.dart';

final userProvider = StateNotifierProvider<UserNotifier, List<User>>((ref) {
  return UserNotifier();
});

class UserNotifier extends StateNotifier<List<User>> {
  UserNotifier() : super([]);

  void addUser(User user) {
    state = [...state, user];
  }

  void updateUser(User user) {
    state = [
      for (var existingUser in state)
        if (existingUser.id == user.id) user else existingUser
    ];
  }

  void deleteUser(String userId) {
    state = state.where((user) => user.id != userId).toList();
  }
}

3. 运行代码生成器

为了生成上述代码,我们需要在项目根目录下运行以下命令:

flutter packages pub run build_runner build

这将根据我们的 Dart 模型类生成相应的 Riverpod 提供者代码。

4. 在应用中使用生成的提供者

现在,我们可以在应用中使用生成的提供者。例如,在 main.dart 中注册提供者并使用它:

// lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'user_provider.g.dart';
import 'models/user.dart';

void main() {
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Riverpod Example')),
        body: UserList(),
      ),
    );
  }
}

class UserList extends ConsumerWidget {
  [@override](/user/override)
  Widget build(BuildContext context, ScopedReader watch) {
    final users = watch(userProvider);

    return ListView.builder(
      itemCount: users.length,
      itemBuilder: (context, index) {
        final user = users[index];
        return ListTile(
          title: Text(user.name),
          subtitle: Text(user.email),
        );
      },
    );
  }
}

5. 测试 CRUD 操作

我们可以在 UI 中添加按钮来测试 CRUD 操作。例如,添加一个按钮来添加新用户:

// lib/user_list.dart
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'user_provider.g.dart';
import 'models/user.dart';

class UserList extends ConsumerWidget {
  [@override](/user/override)
  Widget build(BuildContext context, ScopedReader watch) {
    final users = watch(userProvider);

    return Column(
      children: [
        ElevatedButton(
          onPressed: () {
            final newUser = User(
              id: DateTime.now().millisecondsSinceEpoch.toString(),
              name: 'John Doe',
              email: 'john.doe@example.com',
            );
            context.read(userProvider.notifier).addUser(newUser);
          },
          child: Text('Add User'),
        ),
        Expanded(
          child: ListView.builder(
            itemCount: users.length,
            itemBuilder: (context, index) {
              final user = users[index];
              return ListTile(
                title: Text(user.name),
                subtitle: Text(user.email),
              );
            },
          ),
        ),
      ],
    );
  }
}

更多关于Flutter自定义代码生成插件laia_riverpod_custom_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


laia_riverpod_custom_generator 是一个用于 Flutter 的自定义代码生成插件,旨在简化 Riverpod 状态管理库的使用。通过代码生成,它可以自动生成一些常见的 Riverpod 提供者(Provider)和相关的代码,从而减少手动编写重复代码的工作量。

安装和使用步骤

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 laia_riverpod_custom_generatorbuild_runner 作为开发依赖。

dependencies:
  flutter_riverpod: ^2.0.0

dev_dependencies:
  build_runner: ^2.1.0
  laia_riverpod_custom_generator: ^1.0.0

2. 创建 Riverpod 提供者

在你的项目中,创建一个 Dart 文件,并使用 @riverpod 注解来标记你想要生成的提供者。

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:laia_riverpod_custom_generator/laia_riverpod_custom_generator.dart';

part 'example_provider.g.dart';

@riverpod
class ExampleNotifier extends _$ExampleNotifier {
  [@override](/user/override)
  int build() {
    return 0;
  }

  void increment() {
    state++;
  }
}

3. 运行代码生成器

使用 build_runner 来生成代码。在终端中运行以下命令:

flutter pub run build_runner build

这将会生成一个名为 example_provider.g.dart 的文件,其中包含了自动生成的 Riverpod 提供者代码。

4. 使用生成的提供者

现在你可以在你的 Flutter 应用中使用生成的提供者了。

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'example_provider.dart';

void main() {
  runApp(ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends ConsumerWidget {
  [@override](/user/override)
  Widget build(BuildContext context, WidgetRef ref) {
    final count = ref.watch(exampleNotifierProvider);

    return Scaffold(
      appBar: AppBar(title: Text('Riverpod Example')),
      body: Center(
        child: Text('Count: $count'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => ref.read(exampleNotifierProvider.notifier).increment(),
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部