Flutter可控生成器插件controllable_generator的使用

Flutter可控生成器插件controllable_generator的使用

controllable_generator 是一个用于生成控制器和状态代码的 Flutter 插件。它还可以生成 BuildContext 扩展,以便在用户界面级别使用。

安装

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

dependencies:
  controllable_generator: ^0.0.8

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

使用

接下来,我们来看一下如何使用这个插件。

示例代码

以下是一个简单的示例,展示了如何使用 controllable_generator 来生成控制器和状态代码。

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

// 通过生成器生成的控制器类
class MyController extends GeneratedController {
  // 控制器逻辑
}

// 通过生成器生成的状态类
class MyState extends GeneratedState {
  // 状态逻辑
}

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> with GeneratedWidgetMixin {
  final MyController _controller = MyController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Controllable Generator Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${_controller.counter}',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _controller.incrementCounter();
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

控制器和状态

GeneratedControllerGeneratedState 是通过 controllable_generator 自动生成的类。你可以在这些类中添加自己的业务逻辑。

控制器逻辑

class MyController extends GeneratedController {
  int counter = 0;

  void incrementCounter() {
    counter++;
    notifyListeners(); // 通知监听器更新UI
  }
}

状态逻辑

class MyState extends GeneratedState {
  // 状态逻辑可以在这里实现
}

BuildContext 扩展

controllable_generator 还提供了一些 BuildContext 扩展方法,可以方便地访问控制器和状态。

extension MyBuildContextExtensions on BuildContext {
  MyController get myController => inheritedWidgetOf(this);
}

你可以这样使用扩展方法:

TextButton(
  onPressed: () {
    final controller = context.myController;
    controller.incrementCounter();
  },
  child: Text('Increment Counter'),
)

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

1 回复

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


controllable_generator 是一个 Flutter 插件,用于生成可控的代码。它通常用于生成一些重复性高、结构相似的代码,比如模型类、服务类、UI 组件等。通过使用 controllable_generator,开发者可以节省大量时间,减少手动编写代码的工作量。

安装 controllable_generator

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

dev_dependencies:
  controllable_generator: ^1.0.0

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

使用 controllable_generator

controllable_generator 通常与 build_runner 一起使用。build_runner 是一个 Dart 工具,用于生成代码。

1. 创建生成器

首先,你需要创建一个生成器类。生成器类通常继承自 Generator,并实现 generate 方法。以下是一个简单的生成器示例:

import 'package:controllable_generator/controllable_generator.dart';
import 'package:source_gen/source_gen.dart';

class MyGenerator extends Generator {
  [@override](/user/override)
  String generate(LibraryReader library, BuildStep buildStep) {
    // 这里编写你的生成逻辑
    return '''
class GeneratedClass {
  void sayHello() {
    print('Hello, World!');
  }
}
''';
  }
}

2. 注册生成器

接下来,你需要将生成器注册到 controllable_generator 中。你可以在 build.yaml 文件中进行配置:

targets:
  $default:
    builders:
      controllable_generator|my_generator:
        enabled: true

3. 运行生成器

最后,你可以使用 build_runner 来运行生成器:

flutter pub run build_runner build

这将会根据你的生成器逻辑生成代码,并将生成的代码写入到指定的文件中。

示例

假设你有一个生成器,用于生成简单的 User 类:

class UserGenerator extends Generator {
  [@override](/user/override)
  String generate(LibraryReader library, BuildStep buildStep) {
    return '''
class User {
  final String name;
  final int age;

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

  void printInfo() {
    print('Name: \$name, Age: \$age');
  }
}
''';
  }
}
回到顶部