首页 > 其他分享 >Flutter状态管理-FlyingRedux

Flutter状态管理-FlyingRedux

时间:2023-07-30 12:00:08浏览次数:35  
标签:count 状态 return state PageState FlyingRedux increment redux Flutter

简介

Flying Redux 是一个基于Redux状态管理的组装式flutter应用框架。

flying-redux

它有四个特性:

  1. 函数式编程
  2. 可预测的状态
  3. 插拔式的组件化
  4. 支持null safety 和 flutter 3.x

如何开始

以计数器为例,仅需要5步即可使用flying redux构建应用:

  1. 引入 flying_redux
  2. 创建状态类和初始化状态
  3. 定义 Action 和 ActionCreator
  4. 创建修改状态的 Reducer
  5. 创建组件或页面视图以显示
import 'package:flying_redux/flying_redux.dart';

/// [State]
class PageState extends Cloneable<PageState> {
  late int count;

  @override
  PageState clone() {
    return PageState()..count = count;
  }
}

/// [InitState]
PageState initState(Map<String, dynamic>? args) {
  //just do something here...
  return PageState()..count = 0;
}

/// [Action]
enum CounterAction { increment }

/// [ActionCreator]
class CounterActionCreator {
  static Action increment() {
    return const Action(CounterAction.increment, payload: 1);
  }
}

/// [Reducer]
buildReducer() {
  return asReducer(<Object, Reducer<PageState>>{
    CounterAction.increment: _increment,
  });
}

PageState _increment(PageState state, Action action) {
  final int num = action.payload;
  return state.clone()..count = (state.count + num);
}

/// [Page]
class CountPage extends Page<PageState, Map<String, dynamic>> {
  CountPage()
      : super(
            initState: initState,
            reducer: buildReducer(),
            view: (PageState state, Dispatch dispatch, ComponentContext<PageState> ctx) {
              return Scaffold(
                body: Center(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      const Text(
                        'You have pushed the button this many times:',
                      ),
                      Text(state.count.toString()),
                    ],
                  ),
                ),
                floatingActionButton: FloatingActionButton(
                  onPressed: () => dispatch(CounterActionCreator.increment()),
                  tooltip: 'Increment',
                  child: const Icon(Icons.add),
                ), // This trailing comma makes auto-formatting nicer for build methods.
              );
            });
}

待办示例

如果你需要一个完整的使用例子,请参考 /example 文件夹中的 todo-list 示例。

  • todo list - 一个简单的待办列表示例
  • 在命令行中运行:
cd ./example
flutter run

模板插件(未上架,进行中)

感谢

实际上,flying-redux的源码在命名和实现上与fish-redux基本类似,但是fish-redux
太长时间不更新了,基于它做了大量重构和修改,精简了很多概念,最后重新命名了它。

本文首次发表于掘金专栏文章

标签:count,状态,return,state,PageState,FlyingRedux,increment,redux,Flutter
From: https://www.cnblogs.com/duoduostyle/p/17591228.html

相关文章

  • 使用Cloud Studio&Flutter完成全平台博客网站的搭建
    前言本文我将使用CloudStudio以及Flutter完成自己的一个博客平台的搭建。并且会将该项目作为模版,供大家使用。先来看一下效果一.CloudStudioCloudStudio是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用CloudStudio时无需安装,随时随地......
  • 常见的状态码 11
    状态码   短语   描述100   Continue   服务端已收到请求并要求客户端继续发送主体200   Ok   已成功提交,且响应主体中包含请求结果201   Created   PUT请求方法的返回状态,请求成功提交301   MovedPermanently   请求永久重定向302  ......
  • 使用WGCLOUD监测安卓(Android)设备的运行状态
    WGCLOUD是一款开源运维软件,除了能监测各种服务器、主机、进程应用、端口、接口、docker容器、日志、数据等资源WGCLOUD还可以监测安卓设备,比如安卓手机、安卓设备等我们只要下载对应的安卓客户端,部署运行即可详细说明:https://www.wgstart.com/help/docs63.html......
  • 为什么使用 CDN 需要 Angular 应用正确返回 HTTP 200 和 404 状态码
    CDN(ContentDeliveryNetwork)是内容分发网络,它的目的是通过在各地建立节点缓存数据,使用户可以就近获取数据,从而提高数据获取的速度和稳定性。Angular是一种用于构建客户端应用的开发平台。它带来了一种新的方式来构建应用,完全是在浏览器中运行,无需借助任何后端服务。HTTP200......
  • Angular 服务器端渲染应用返回 HTTP 404 和 200 状态码对 SEO 的影响
    在理解为什么Angular应用在正确的时间点返回HTTP404状态码对SEO非常重要之前,我们首先需要了解一些基本的SEO(搜索引擎优化)概念,以及HTTP404状态码的含义。搜索引擎优化(SEO)是一种通过理解搜索引擎如何工作、什么样的内容受欢迎,以及用户在搜索时会使用什么样的关键词......
  • Flutter是跨平台开发终极之选吗?Android开发该如何快速上手Flutter?
    跨端技术是Android程序员乃至所有移动开发程序员一直在研究的课题。3月4日,谷歌正式发布了Flutter的2.0。该版本最大的特性就是可以支持五大主流的操作系统:iOS、Android、Linux、Windows和MacOS。官方甚至还说丰田将会把Flutter带到汽车中。也就是说,我们可以用一套Flutter......
  • 使用Cloud Studio&Flutter完成全平台博客网站的搭建
    前言本文我将使用CloudStudio以及Flutter完成自己的一个博客平台的搭建。并且会将该项目作为模版,供大家使用。先来看一下效果一.CloudStudioCloudStudio是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用CloudStudio时无需安装,随时随......
  • 有状态的应用如何部署 1?
    前面我们分享很多关于K8S的内容,有没有发现pod都是无状态,RS/RC管理的pod也是无状态的,我们可以任意删除一个pod,副本管理器又会马上给我们创建一个pod那么如果咱们的这个pod是有挂载持久卷的,那么我们用老方法可还行?有状态和无状态简单说明一下,什么是有状态的服务,什......
  • shell预定义变量:进程号 | 后台最后一个进程的进程号 | 最有一个返回状态
    摘要介绍shell的预定义变量一、基本介绍就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用二、基本语法转义符说明$$当前进程的进程号(PID)$!后台运行的最后一个进程的进程号(PID)$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明......
  • linux监控网络状态 | netstat指令
    摘要目的:介绍linux如何监控网络状态介绍linux的netstat指令指令netstat可以看到当前的网络服务,哪些服务处于监听状态,哪些连接建立,发现网络变慢了,或者有些端口很大,要小心,如果你从来没有启动过,那么可能这是一个木马程序在监听。指令功能说明选项yuminstallne......