Flutter注解绑定插件getx_binding_annotation的使用

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

Flutter注解绑定插件getx_binding_annotation的使用

Getx Dependencies Binding Annotation Generator

PubVersion PubPoints build Star on Github Latest Dartdocs

android ios ios linux windows mac-os

一个基于注解的代码生成插件,用于根据注解生成GetX状态管理器所需的页面和依赖项。该包旨在防止逐个添加依赖到GetX的列表中。您可以将其用于页面、控制器或其他任何依赖项。

目录:

入门

pubspec.yaml文件中添加依赖:

dependencies:
  get: ^latest
  getx_binding_annotation: ^latest

dev_dependencies:
  build_runner: ^latest
  getx_binding_annotation_generator: ^latest

通过以下命令获取更改:

flutter pub get

或者

dart pub get

用法

首先导入插件:

import 'package:getx_binding_annotation/annotation.dart';

然后,在所需的类上添加所需的@Annotation并设置所需的选项。

例如:

[@GetPut](/user/GetPut).page(isInitial: true)
class HomePage extends GetView<HomePageController> {}
[@GetPut](/user/GetPut).controller()
class SettingsController extends GetxController {}

之后,运行build_runner以生成代码,并创建相关的文件,将所有页面、控制器、组件和存储库集中在一个地方,并准备使用。

你可以使用以下命令运行构建任务:

dart pub run build_runner build --delete-conflicting-outputs

成功生成后,你将在项目根目录/lib下的main.dart旁边看到新的main.get_put.dart文件。

然后可以导入生成的文件:

import 'main.get_put.dart';

接下来,你需要在main.dart中进行以下更改:

void main() {
  GetPutBindings().dependencies();
  runApp(const MainApp());
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      /// 你必须在你的项目中设置这四个函数和变量
      initialBinding: GetPutBindings(), // 注入所有依赖
      getPages: GetPutPages.pages, // 将所有页面添加到GetX上下文中
      initialRoute: GetPutPages.initialRoute.name, // 设置初始路由
      unknownRoute: GetPutPages.unknownRoute, // 设置未知或未定义路由的处理
    );
  }
}

你可以查看/example目录以获得更完整的示例、更多详细信息和进一步的信息。

选项

你可以在@Annotation中设置一些注解及其选项。可用选项包括:

[@GetPut](/user/GetPut).page()

  • as: 更改页面在依赖项中的名称。
  • route: 插件会根据页面名称生成默认名称,但你也可以设置字符串作为新路由。如果未设置route,则将使用自动生成的路由。
  • isInitial: 你应该为GetX设置初始路由,应用程序将从该页面和其路由开始。这是一个必需的选项。如果你设置了两个或更多的初始页面,插件不会抛出异常,但会将第一个标记为初始页面的页面作为默认初始路由。
  • isUnknown: 你可以设置未知路由,当应用程序中发生无效路由时,将显示该页面。如果你设置了两个或更多的未知页面,插件不会抛出异常,但会将第一个标记为未知页面的页面作为默认未知路由。

[@GetPut](/user/GetPut).controller()

  • as: 更改控制器在依赖项中的名称。

[@GetPut](/user/GetPut).component()

  • as: 更改组件在依赖项中的名称。

[@GetPut](/user/GetPut).repository()

  • as: 更改存储库在依赖项中的名称。

一些例子

Settings:

[@GetPut](/user/GetPut).page()
class SettingsPage extends GetView<SettingsController> {}
[@GetPut](/user/GetPut).controller()
class NotFoundController extends GetxController {}

NotFound:Unknown:

[@GetPut](/user/GetPut).page(isUnknown: true)
class NotFoundPage extends GetView<NotFoundController> {}
[@GetPut](/user/GetPut).controller()
class NotFoundController extends GetxController {}

Storage Component:

abstract class StorageComponent {}

[@GetPut](/user/GetPut).component(as: 'StorageComponent')
class StorageComponentImpl {}

Remote DataSource Repository:

[@GetPut](/user/GetPut).repository()
class RemoteDataSourceRepository {}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用getx_binding_annotation插件的代码示例。这个插件主要用于简化GetX状态管理的绑定过程,通过注解自动注册控制器。

首先,确保你的pubspec.yaml文件中已经添加了getgetx_binding_annotation依赖:

dependencies:
  flutter:
    sdk: flutter
  get: ^4.0.0  # 请确保使用最新版本
  getx_binding_annotation: ^1.0.0  # 请确保使用最新版本

然后运行flutter pub get来获取这些依赖。

接下来,让我们设置一个简单的示例,展示如何使用getx_binding_annotation来自动绑定控制器。

1. 创建控制器

首先,创建一个简单的控制器类,并使用@GetxController注解标记它:

import 'package:get/get.dart';
import 'package:getx_binding_annotation/getx_binding_annotation.dart';

part 'counter_controller.g.dart'; // 自动生成绑定文件的引用

@GetxController()
class CounterController extends GetxController {
  var count = 0.obs;

  void increment() {
    count++;
  }
}

2. 生成绑定文件

在项目的根目录(通常与pubspec.yaml文件相同的目录)下运行以下命令以生成绑定文件:

flutter pub run build_runner build

这将生成一个名为counter_controller.g.dart的文件,其中包含控制器绑定的代码。

3. 主应用文件

在主应用文件中(通常是main.dart),我们不再需要手动绑定控制器。getx_binding_annotation插件已经为我们处理了这部分工作。我们只需要启动GetX的依赖注入系统:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:your_app_name/bindings/bindings.dart'; // 导入自动生成的绑定集合

void main() {
  // 使用GetMaterialApp并传入自动生成的绑定集合
  runApp(GetMaterialApp(
    title: 'Flutter Demo',
    initialBinding: Bindings(), // 绑定集合
    home: MyHomePage(),
  ));
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final CounterController controller = Get.put(CounterController()); // 虽然这里我们仍然调用Get.put,但实际上不需要,因为绑定已经自动处理了
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${controller.count}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          controller.increment();
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

4. 自动生成的绑定集合

bindings目录下(你需要手动创建这个目录),build_runner会生成一个bindings.dart文件,它包含了所有使用@GetxController注解的控制器绑定。通常,这个文件的内容类似于:

import 'package:get/get.dart';
import 'package:your_app_name/controllers/counter_controller.dart';

class Bindings implements BindingsInterface {
  @override
  void dependencies() {
    Get.lazyPut<CounterController>(() => CounterController());
  }
}

请注意,build_runner会自动处理并生成这部分代码,因此你不需要手动编写它。

总结

通过以上步骤,你可以利用getx_binding_annotation插件自动处理GetX控制器的绑定,从而减少手动绑定控制器的工作量。这种方法不仅提高了开发效率,还减少了因手动绑定错误而导致的潜在问题。

回到顶部