Flutter插件viper_gen的使用方法

Flutter插件viper_gen的使用方法

VIPER Gen

VIPER Gen 是一个用于生成 VIPER 模块的工具。

如何使用Flutter插件viper_gen

首先,你需要在你的 presenter 类上标记 @presenter 注解。以下是一个简单的例子:

import 'package:viper/viper.dart';
import 'package:viper/annotation.dart';

// 该文件将由生成器自动生成,请确保与源文件保持一致
part 'presenter.g.dart';

// 使用 @presenter 注解标记 presenter 类
@presenter
class MyPresenterImpl extends MyPresenter
    // 添加状态和绑定函数
    with _$MyPresenterImpl
    implements MyViewDelegate, MyInteractorDelegate {

  // 需要创建一个新的实例
  MyPresenterImpl._();

  // 绑定状态与绑定函数
  factory MyHomePresenterImpl() => _$BoundMyPresenterImpl(); 

  // 手动声明一个状态,这将跳过生成
  final incrementButtonDidTap = BehaviorSubject<void>();

  // incrementButtonDidTap 状态将绑定到此函数
  void $counterDidIncrement() {}
}

完整示例Demo

步骤 1: 创建一个新项目

首先,创建一个新的 Flutter 项目:

flutter create viper_example
cd viper_example

步骤 2: 添加依赖

pubspec.yaml 文件中添加 viperrxdart 依赖:

dependencies:
  flutter:
    sdk: flutter
  viper: ^0.1.0  # 请根据实际情况选择最新版本
  rxdart: ^0.27.3  # 请根据实际情况选择最新版本

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

步骤 3: 创建 Presenter 类

在项目中创建一个名为 presenter.g.dart 的文件,并在其中定义 MyPresenterImpl 类:

import 'package:viper/viper.dart';
import 'package:viper/annotation.dart';
import 'package:rxdart/rxdart.dart';

// 该文件将由生成器自动生成,请确保与源文件保持一致
part 'presenter.g.dart';

// 使用 @presenter 注解标记 presenter 类
@presenter
class MyPresenterImpl extends MyPresenter
    // 添加状态和绑定函数
    with _$MyPresenterImpl
    implements MyViewDelegate, MyInteractorDelegate {

  // 需要创建一个新的实例
  MyPresenterImpl._();

  // 绑定状态与绑定函数
  factory MyHomePresenterImpl() => _$BoundMyPresenterImpl(); 

  // 手动声明一个状态,这将跳过生成
  final incrementButtonDidTap = BehaviorSubject<void>();

  // incrementButtonDidTap 状态将绑定到此函数
  void $counterDidIncrement() {}
}

步骤 4: 创建 View 类

创建一个名为 view.dart 的文件,并定义 MyViewImpl 类:

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

class MyViewImpl extends StatelessWidget implements MyViewDelegate {
  final MyPresenter _presenter;

  MyViewImpl(this._presenter);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('VIPER Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Hello, VIPER!'),
            RaisedButton(
              onPressed: () {
                _presenter.incrementButtonDidTap.add(null);
              },
              child: Text('Increment Counter'),
            ),
          ],
        ),
      ),
    );
  }
}

步骤 5: 创建 Interactor 类

创建一个名为 interactor.dart 的文件,并定义 MyInteractorImpl 类:

import 'package:viper/viper.dart';

class MyInteractorImpl implements MyInteractorDelegate {
  [@override](/user/override)
  void onCounterDidIncrement() {
    print('Counter incremented');
  }
}

步骤 6: 创建 Router 类

创建一个名为 router.dart 的文件,并定义 MyRouterImpl 类:

import 'package:viper/viper.dart';

class MyRouterImpl implements MyRouterDelegate {
  [@override](/user/override)
  void routeToNextScreen() {
    print('Routing to next screen');
  }
}

步骤 7: 主入口文件

最后,在主入口文件 main.dart 中初始化并启动应用:

import 'package:flutter/material.dart';
import 'package:viper/viper.dart';
import 'presenter.dart';
import 'view.dart';
import 'interactor.dart';
import 'router.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ViperModule<MyPresenter, MyView, MyInteractor, MyRouter>(
        presenterFactory: MyHomePresenterImpl,
        viewFactory: (presenter) => MyViewImpl(presenter),
        interactorFactory: () => MyInteractorImpl(),
        routerFactory: () => MyRouterImpl(),
      ),
    );
  }
}

更多关于Flutter插件viper_gen的使用方法的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件viper_gen的使用方法的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


viper_gen 是一个用于 Flutter 的代码生成工具,它可以帮助开发者自动生成一些常见的代码结构,比如模型类、服务类、数据访问对象(DAO)等。这个工具的目的是减少重复代码的编写,提高开发效率。虽然 viper_gen 并不是 Flutter 官方推荐的插件,但它在某些场景下可以非常有用。

潜在使用场景

  1. 生成模型类(Model Classes)

    • 当你有一个 JSON API 返回的数据结构,并且你需要在 Flutter 中创建一个对应的模型类时,viper_gen 可以自动生成这些类。你只需要提供 JSON 数据,viper_gen 就可以生成对应的 Dart 类,并且包含必要的序列化和反序列化逻辑。
  2. 生成服务类(Service Classes)

    • 如果你有多个 API 调用,viper_gen 可以帮助你生成统一的 API 服务类。这些类可以包含 HTTP 请求的逻辑,减少手动编写重复代码的工作量。
  3. 生成数据访问对象(DAO)

    • 在处理数据库操作时,viper_gen 可以生成数据访问对象(DAO),这些对象封装了数据库的增删改查操作,使得数据库操作更加简洁和易于维护。
  4. 生成 Provider 或 Bloc 代码

    • 如果你在使用状态管理库如 ProviderBlocviper_gen 可以帮助你生成这些状态管理相关的代码,减少手动配置的工作量。
  5. 生成路由配置

    • 在大型项目中,路由配置可能会变得非常复杂。viper_gen 可以帮助你自动生成路由配置文件,减少手动维护路由的工作量。

使用示例

假设你有一个 JSON 数据结构如下:

{
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com"
}

你可以使用 viper_gen 生成对应的 Dart 模型类:

  1. 首先,安装 viper_gen 插件:

    flutter pub add viper_gen
    
  2. 然后,创建一个配置文件,比如 config.yaml,描述你想要生成的代码结构:

    models:
      User:
        fields:
          id: int
          name: String
          email: String
    
  3. 运行 viper_gen 生成代码:

    flutter pub run viper_gen generate
    

    生成的代码可能如下:

    class User {
      final int id;
      final String name;
      final String email;
    
      User({required this.id, required this.name, required this.email});
    
      factory User.fromJson(Map<String, dynamic> json) {
        return User(
          id: json['id'],
          name: json['name'],
          email: json['email'],
        );
      }
    
      Map<String, dynamic> toJson() {
        return {
          'id': id,
          'name': name,
          'email': email,
        };
      }
    }
回到顶部