Flutter自定义UI组件插件fancy_flutter的使用

Fancy Flutter

Fancy 是一个轻量级的状态管理包,用于简化 Flutter 中的控制器管理和依赖注入。受 GetX 等框架的启发,Fancy 提供了一种简洁的方式来管理状态、依赖关系和 UI 更新,而无需过多的样板代码。

功能

  • 高效的状态管理:使用 FancyBaseController 来管理你的应用状态,内置支持初始化、清理和监听器管理。
  • 依赖注入:通过 Fancy 轻松注册和检索依赖项,实现简单的依赖管理和服务定位。
  • 自定义小部件:利用 FancyBuilder 创建响应式 UI 组件,当状态变化时自动重建。
  • 继承小部件集成:使用 FancyMaterialApp 提供一致的上下文,以便在整个应用中进行依赖注入。

开始使用

安装

在你的 pubspec.yaml 文件中添加以下内容:

dependencies:
  fancy_flutter: 0.0.1 # 或最新版本

使用

步骤

  1. 定义控制器:通过扩展 FancyBaseController 创建控制器,并实现你的业务逻辑。
  2. 注册依赖项:使用 Fancy.register 注册服务和控制器。
  3. 构建小部件:使用 FancyBuilder 创建响应式 UI 组件,当状态变化时自动重建。

示例

以下是使用 Fancy Flutter 的完整示例代码:

import 'package:flutter/material.dart';
import 'package:fancy_flutter/fancy.dart';

// 示例服务
class AuthService {
  // AuthService 实现
}

// 示例控制器
class AuthController extends FancyBaseController {
  final AuthService _authService = Fancy.get<AuthService>();

  String _username = '';
  String _password = '';

  String get username => _username;
  String get password => _password;

  void updateUsername(String username) {
    _username = username;
    fancyUpdate(); // 触发状态更新
  }

  void updatePassword(String password) {
    _password = password;
    fancyUpdate(); // 触发状态更新
  }

  void login() {
    // 处理登录逻辑
  }

  [@override](/user/override)
  void onInit() {
    super.onInit();
    // 初始化认证状态
  }

  [@override](/user/override)
  void onStart() {
    super.onStart();
    // 启动逻辑
  }

  [@override](/user/override)
  void onDispose() {
    super.onDispose();
    // 清理逻辑
  }
}

import 'package:example/injector.dart';
import 'package:fancy_flutter/fancy_flutter.dart';
import 'package:flutter/material.dart';
import 'auth_controller.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  final injector = AppDependenciesEnjector();
  injector.registerDependencies();
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return FancyStateInjector(
      injector: FancyDependencyInjector(),
      child: const MaterialApp(
        home: LoginPage(),
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FancyBuilder<AuthController>(
          builder: (controller) {
            return Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                TextField(
                  onChanged: controller.updateUsername,
                ),
                TextField(
                  onChanged: controller.updatePassword,
                ),
                ElevatedButton(
                  onPressed: controller.login,
                  child: const Text('Login'),
                ),
                // 添加一个 Text 小部件以观察状态变化
                Text('Username: ${controller.username}'),
                Text('Password: ${controller.password}'),
              ],
            );
          },
        ),
      ),
    );
  }
}

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

1 回复

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


fancy_flutter 是一个 Flutter 插件,提供了一些自定义的 UI 组件和效果,可以帮助开发者快速构建美观且功能丰富的应用程序。以下是如何使用 fancy_flutter 插件的基本步骤:

1. 安装插件

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

dependencies:
  flutter:
    sdk: flutter
  fancy_flutter: ^latest_version

然后运行 flutter pub get 来安装插件。

2. 导入插件

在你的 Dart 文件中导入 fancy_flutter 插件:

import 'package:fancy_flutter/fancy_flutter.dart';

3. 使用组件

fancy_flutter 提供了多种自定义 UI 组件和效果,以下是一些常见的用法示例:

3.1 自定义按钮

FancyButton(
  onPressed: () {
    // 按钮点击事件
  },
  text: 'Click Me',
  color: Colors.blue,
  textColor: Colors.white,
  borderRadius: 10.0,
)

3.2 自定义卡片

FancyCard(
  elevation: 5.0,
  borderRadius: 10.0,
  child: Padding(
    padding: const EdgeInsets.all(16.0),
    child: Text('This is a fancy card!'),
  ),
)

3.3 自定义加载指示器

FancyLoader(
  size: 50.0,
  color: Colors.blue,
)

3.4 自定义对话框

FancyDialog(
  title: 'Title',
  content: 'This is a fancy dialog.',
  onConfirm: () {
    // 确认按钮点击事件
  },
  onCancel: () {
    // 取消按钮点击事件
  },
)

3.5 自定义动画效果

FancyAnimation(
  duration: Duration(seconds: 2),
  curve: Curves.easeInOut,
  child: Container(
    width: 100.0,
    height: 100.0,
    color: Colors.red,
  ),
)
回到顶部