Flutter控制器构建插件controller_builder的使用

Flutter控制器构建插件controller_builder的使用

简介

controller_builder 是一个用于简化 TextEditingController 和其他 ChangeNotifier 的初始化与释放的 Flutter 插件。它通过抽象常见的生命周期管理逻辑,帮助开发者更高效地处理控制器的创建与销毁。

特性

  • 自动管理生命周期:无需手动调用 dispose,插件会自动处理。
  • 灵活扩展:支持自定义的 createdispose 回调。
  • 易于集成:与现有代码无缝结合。

使用示例

以下是一个完整的示例,展示如何在 Flutter 中使用 controller_builder

示例代码
import 'dart:developer';

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: ControllerBuilderExample(),
    );
  }
}

class ControllerBuilderExample extends StatelessWidget {
  const ControllerBuilderExample({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: ControllerBuilder<TextEditingController>(
            // 创建一个控制器(或其他 ChangeNotifier)
            create: () {
              final controller = TextEditingController(text: 'Hello, world!');
              return controller..addListener(someListener);
            },

            // 构建函数中可以访问创建的控制器
            builder: (context, controller) {
              return TextField(
                controller: controller,
                onChanged: log,
              );
            },

            // 可选的 dispose 回调,如果需要手动释放资源
            dispose: (controller) {
              controller
                ..removeListener(someListener)
                ..dispose();
            },
          ),
        ),
      ),
    );
  }
}

// 自定义监听器
void someListener() {}

// 自定义日志记录
void log(String value) {
  log('Text changed: $value');
}

代码解析

  1. 创建控制器

    create: () {
      final controller = TextEditingController(text: 'Hello, world!');
      return controller..addListener(someListener);
    }
    

    create 回调中,我们创建了一个 TextEditingController 并为其添加了一个监听器。

  2. 构建 UI

    builder: (context, controller) {
      return TextField(
        controller: controller,
        onChanged: log,
      );
    }
    

    builder 回调中,我们可以直接使用创建的控制器来构建 UI。这里使用了 TextField,并绑定了控制器。

  3. 释放资源

    dispose: (controller) {
      controller
        ..removeListener(someListener)
        ..dispose();
    }
    

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

1 回复

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


controller_builder 是一个用于 Flutter 的插件,它可以帮助你更轻松地管理和构建控制器(Controller)。控制器在 Flutter 中通常用于管理状态、业务逻辑以及与 UI 的交互。controller_builder 插件提供了一种简洁的方式来创建和使用控制器,尤其是在使用状态管理库(如 ProviderGetX 等)时。

安装 controller_builder

首先,你需要在 pubspec.yaml 文件中添加 controller_builder 依赖:

dependencies:
  flutter:
    sdk: flutter
  controller_builder: ^1.0.0  # 请使用最新版本

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

使用 controller_builder

controller_builder 提供了一个 ControllerBuilder 小部件,它允许你在构建 UI 时自动创建和管理控制器。以下是一个简单的使用示例:

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

class MyController extends Controller {
  int counter = 0;

  void increment() {
    counter++;
    notifyListeners();
  }
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('ControllerBuilder Example')),
        body: ControllerBuilder<MyController>(
          create: () => MyController(),
          builder: (context, controller) {
            return Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Counter: ${controller.counter}'),
                  ElevatedButton(
                    onPressed: controller.increment,
                    child: Text('Increment'),
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

void main() {
  runApp(MyApp());
}
回到顶部