Flutter快速切换功能插件quick_change的使用

Flutter快速切换功能插件quick_change的使用

quick_change 🧩

一个轻量级且直观的Flutter状态管理解决方案。

通过简单的类型安全的状态管理和强大的监听及构建能力,可以轻松地管理状态转换。

Version License Flutter


quick_change旨在简化Flutter应用中的状态管理,适合小型到中型的应用,并具有扩展到大型应用的灵活性。该包提供了易于使用的状态控制器、内置状态类型和直观的UI监听及构建能力。

特性 ✨

  • 简单且轻量级:无需依赖大量库即可管理状态。
  • 灵活的状态:使用预定义的状态如 QuickLoadingQuickDataQuickError
  • 简易的监听器:使用干净、直观的监听器API来响应状态变化。
  • 模块化设计:适用于模块化和可扩展的Flutter应用。
  • 优化性能:仅在必要时重建小部件。

目录 📚


安装

pubspec.yaml 中添加 quick_change

dependencies:
  quick_change: ^1.0.0

然后运行:

flutter pub get

快速开始 🚀

  1. 定义一个 QuickChangeController 来管理你的状态。
  2. 使用 QuickChangeBuilder 来监听状态变化并更新UI。
  3. 使用 .quickListen 在不重建的情况下响应状态变化。

API概览

  • QuickStateController:管理状态变化并通知监听器。
  • 状态
    • QuickInitial:代表初始状态。
    • QuickLoading:代表加载状态。
    • QuickData<T>:保存类型为 T 的数据。
    • QuickError:代表带有消息的错误状态。
  • QuickStateBuilder:根据控制器的状态构建UI的小部件。
  • .quickListen:在小部件上扩展,以监听状态变化而不重建。

示例

基本计数器示例

以下是使用 quick_change 创建一个简单的计数器的方法。

import 'package:quick_change/quick_change.dart';

class CounterController extends QuickChangeController<int> {

  void incrementCounter(int cVal) {
    int val = cVal + 1;
    setData(val);
  }

  void decrementCounter(int cVal) {
    int val = cVal - 1;
    setData(val);
  }
}
import 'package:flutter/material.dart';
import 'package:quick_change/quick_change.dart';

void main() {
  GetIt.I.registerLazySingleton<CounterController>(() => CounterController());
  runApp(const MyApp());
}

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

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

class CounterScreen extends StatefulWidget {
  const CounterScreen({super.key});

  @override
  CounterScreenState createState() => CounterScreenState();
}

class CounterScreenState extends State<CounterScreen> {
  CounterController counterController = GetIt.I<CounterController>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Quick_State Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            QuickChangeBuilder<int>(
              controller: counterController,
              onLoading: (context) => const CircularProgressIndicator(),
              onData: (context, data) =>
                  Text('Counter: $data', style: const TextStyle(fontSize: 24)),
              onError: (context, message) => Text('Error: $message'),
            ),
            ElevatedButton(
              onPressed: () {
                final currentValue = counterController.currentData ?? 0;
                counterController.incrementCounter(currentValue);
              },
              child: const Text('Increment Counter'),
            ),
            ElevatedButton(
              onPressed: () {
                final currentValue = counterController.currentData ?? 0;
                counterController.decrementCounter(currentValue);
              },
              child: const Text('Decrement Counter'),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.push(context,
                    MaterialPageRoute(builder: (context) => PostsScreen()));
              },
              child: const Text('Api Page'),
            ),
          ].quickListen<int>(
            controller: counterController,
            listener: (context, state) {
              if (state is QuickData) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('Counter: ${state.data}'),
                    duration: const Duration(milliseconds: 400),
                  ),
                );
              }
              if (state is QuickError) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text(state.message)),
                );
              }
            },
          ),
        ),
      ),
    );
  }
}

监听错误

你可以使用 .quickListen 显示自定义消息(例如 SnackBar)当错误发生时。

// 监听错误
Widget.quickListen(
  controller: counterController,
  listener: (state) {
    if (state is QuickError) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text(state.message)),
      );
    }
  },
);

高级用法

自定义状态类型

通过继承 QuickState 来定义自定义状态。

class QuickCustomSuccess extends QuickState {
  final String message;
  QuickCustomSuccess(this.message);
}

// 在控制器中使用自定义状态
quickFlux(QuickCustomSuccess("This is custom state"));

更多关于Flutter快速切换功能插件quick_change的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter快速切换功能插件quick_change的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


quick_change 是一个 Flutter 插件,用于在应用中快速切换不同的功能或设置。它可以帮助开发者在调试或测试时快速切换应用的配置、主题、语言等。以下是如何使用 quick_change 插件的基本步骤:

1. 添加依赖

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

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

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

2. 导入插件

在需要使用 quick_change 的 Dart 文件中导入插件:

import 'package:quick_change/quick_change.dart';

3. 初始化插件

main.dart 文件中初始化 QuickChange 插件。通常,你可以在 runApp 之前初始化它:

void main() {
  QuickChange.initialize();
  runApp(MyApp());
}

4. 添加可切换的功能

在应用中添加你想要快速切换的功能。例如,你可以添加主题切换、语言切换等功能。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'QuickChange Example',
      theme: ThemeData.light(),
      darkTheme: ThemeData.dark(),
      themeMode: QuickChange.get('themeMode', defaultValue: ThemeMode.system),
      home: MyHomePage(),
    );
  }
}

5. 在 UI 中触发切换

你可以在应用中的某个地方添加一个按钮或手势来触发 QuickChange 的切换功能。例如,你可以添加一个按钮来切换主题:

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('QuickChange Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            QuickChange.set('themeMode', ThemeMode.dark);
          },
          child: Text('Switch to Dark Theme'),
        ),
      ),
    );
  }
}

6. 使用 QuickChange 进行调试

你可以通过 QuickChange 提供的 API 来动态切换应用中的各种设置。例如,你可以通过以下方式来切换语言:

QuickChange.set('locale', Locale('fr', 'FR'));

7. 持久化设置(可选)

如果你希望在应用重启后仍然保留之前的设置,你可以使用 QuickChange 的持久化功能:

QuickChange.initialize(persist: true);

8. 自定义 QuickChange 界面(可选)

QuickChange 提供了一个默认的切换界面,你可以通过以下方式来显示它:

QuickChange.showQuickChangePanel(context);

你也可以自定义 QuickChange 的界面,通过传递自定义的 Widget 来实现。

9. 监听设置变化(可选)

你可以监听 QuickChange 的设置变化,以便在设置发生变化时执行某些操作:

QuickChange.listen('themeMode', (value) {
  print('Theme mode changed to: $value');
});
回到顶部