搜索插件、代码仓与 APP 分类

插件详情v0.10.0

flutter_state_management

一组帮助类,使使用 ChangeNotifier 进行状态管理更加简便

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
296
喜欢数
4
Pub 分数
160

安装插件

flutter pub add flutter_state_management

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个轻量级包,通过提供用于处理 ChangeNotifier 的帮助类来简化 Flutter 中的状态管理。它减少了样板代码,提升了开发者在管理应用状态时的生产力。该包专为与 Flutter 的响应式框架无缝集成而设计,支持所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。对于希望采用简洁、清晰的状态处理方式而又不想使用更复杂状态管理解决方案的开发者来说,这个包非常理想。

适合场景

  • 小型应用中的简单状态更新
  • 减少 ChangeNotifier 实现中的样板代码
  • 简化表单和UI组件中的状态逻辑
  • 在多个小部件之间管理共享数据
  • BLoC 或 Provider 的轻量级替代方案

主要特点

  • ChangeNotifier 的辅助类
  • 最小化设置和集成
  • 跨平台支持
  • 干净且可读的代码结构
  • 用于常见状态模式的内置工具

适合对象

  • 初学者 Flutter 开发者
  • 中小型项目
  • 需要基本状态管理的应用程序
  • 开发者更倾向于简单而非复杂
  • 希望快速原型设计的团队

使用建议

  • 不适合复杂的状态流转
  • 与功能齐全的状态管理库相比功能有限
  • 大型应用程序可能需要额外的工具
  • 在扩展时与其他状态管理方法结合使用效果最佳
  • 不包含内置的持久化或异步处理

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Flutter State Management

Just a couple of utility classes to make it easier to use Flutter framework's built-in ChangeNotifier and Listenable for state management.

Features

  • No learning curve if you already know Flutter
  • Simple package based on ChangeNotifier (No bloatware)

Usage

Create your model class

class Counter extends StateNotifier<int, String> {
  Counter() : super(const Active(data: 0));

  void increment() async {
    setWaiting();

    await Future.delayed(const Duration(seconds: 2));

    if (data > 20) {
     setFailed('greater than 20');
    } else {
      setActive(data + 1);
    }
  }
}

Or if you want the state to persist across restarts

class Counter extends PersistedStateNotifier<int, String> {
  Counter() : super(IsarKeyValue(), startState: 0);

  void increment() async {
    setWaiting();

    await Future.delayed(const Duration(seconds: 2));

    if (data > 20) {
      setFailed('greater than 20');
    } else {
      setActive(data + 1);
    }
  }
}

Handle State Changes in UI

To only rebuild specific parts:
  1. Use ValueListenableBuilder from the Flutter framework:
final counter = Counter();

ValueListenableBuilder(
  valueListenable: counter,
  child: Text()
  builder: (context, state, child) => // return updated UI here (can also use counter.builderArg here)
  child: const Text('Hello'),
  ),
);

You can also use builderArg helper:

builder: counter.builderArg(
  onActive: ,
  onWaiting: ,
  onNone: ,
  onFailure: ,
),
  1. Or use StateNotifierBuilder that comes with this package and is more user friendly:
final counter = Counter();

counter.builder(
  onActive: (context, data) => Text(data.toString()),
),


\

To rebuild whole widget

Convert your existing StatelessWidget to RStatelessWidget, and StatefulWidget to RStatefulWidget and and just watch the model inside the build method:

class CounterText extends RStatelessWidget {
  @override
  Widget build(BuildContext context) {
    counter.watch(context); // call watch inside the build method (do not use any if) 
    return Text(data.toString());
  }
}

所属分类

源码仓库

使用此插件的项目

暂无相关数据。