颤振发展(14)-状态管理


浏览:883 次

状态管理是声明式编程的一个非常重要的概念。我们之前介绍过Flutter是声明式编程,它还将声明式编程与命令式编程区分开来。

在这里,我们将系统地学习Flutter声明性编程中非常重要的状态管理

我为什么需要国家管理?1.1.首先不适合承认状态管理从命令式编程框架(Android或iOS本地开发者)转变为声明式编程(Flutter、Vue、React等),因为需要一个新的视角来考虑APP的开发模式。

作为一个现代框架,Flutter是声明式编程:

在编写app的过程中,我们需要管理大量的状态,而更新界面刷新需要改变这些状态:

1.2.不同状态管理的分类1.2.1.短期状态星历状态有些状态只需要在自己的Widget中使用

例如,我们前面制作的简单计数器

例如,PageView组件记录当前页面

例如,记录当前进度的动画

例如,BottomNavigationBar中当前选定的选项卡

我们只需要使用StatefulWidget对应的State类来管理这个状态。小工具树的其他部分不需要访问此状态。

在先前的研究中,这种方法已被多次应用。

1.2.2.app状态在app状态的开发过程中,也有许多状态需要在多个部分中共享

例如,用户的个性化选项

例如,用户的登录状态信息

例如,电子商务app的购物车

例如,新闻app的已读消息或未读消息

如果我们将这种状态从一个小部件传递到另一个小,它将是无止境的,代码耦合将变得非常高,这将影响整个身体。无论是代码编写质量、后期维护、可扩展性,都很差。

此时,我们可以选择全局状态管理方法来统一管理和应用状态。

1.2.3.在制定如何选择不同的管理方法时,没有明确的规则来区分哪些状态是短期的,哪些是应用状态。

一些短期状态可能需要在未来的开发和维护中升级为app状态。

但我们可以简单地遵循以下流程图的规则:

关于React使用setState或Redux中的存储来管理状态哪个更好的问题,Redux的作者Dan Abramov在Redux问题上回答如下:

经验法则是:做任何不那么尴尬的事

经验法则是选择能减少麻烦的方法。

II共享状态管理2.1.InheritedWidgetInherited Widget具有与React中的上下文类似的功能,可以实现跨组件数据的传输。

定义一个InheritedWidget共享数据,该数据需要从inherited Widget继承

这里,定义了一个of方法,它开始通过上下文搜索祖先的HYDataWidget(您可以查看源代码搜索过程)

updateShouldNotify方法用于将新的HYDataWidget与旧的HYData Widget进行比较,并确定是否更新相关的依赖Widget

类HYDataWidget扩展InheritedWidget{

finalint计数器;

HYDataWidget({this.counter,Widget child}):super(child:child);

(BuildContext上下文)的静态HYDataWidget{

return context.dependOnInheritedWidgetOfExactType();

}

@超驰,超越

bool updateShouldNotify(HYDataWidget旧Widget){

返回此。计数器!=oldWidget.counter;

}

}

创建HYDataWidget并输入数据(单击此处的按钮修改数据并重新生成)类HYHomePage扩展StatefulWidget{

@超驰,超越

_HYHomePageState创建状态()=>_ HYHome PageState();

}

class _ HYHomePageState扩展状态{

int数据=100;

@超驰,超越

小工具生成(BuildContext上下文){

返回脚手架(

应用栏:应用栏(

title:文本(“InheritedWidget”),

),

正文:HYDataWidget(

计数器:数据,

child:中心(

child:列(

main轴对齐:Main轴对齐.center,

儿童:<小工具>[

HYShowData()

],

),

),

),

floatingActionButton:浮动操作按钮(

child:图标(Icons.add),

按下:(){

设置状态((){

data++;

});

},

),

);

}

}

在小部件中使用共享数据并侦听

2.2.ProviderProvider是官方推荐的全球状态管理工具,由社区作者Remi Rousselet和Flutter团队共同编写。

在使用它之前,我们需要介绍它的依赖性。截至本文,该提供商的最新版本为4.0.4:

依赖关系:

提供程序:^4.0.4

2.2.1.提供者的基本使用在使用提供者时,我们主要关注三个概念:

ChangeNotifier:存储真实数据(状态)的位置

ChangeNotifierProvider:在小部件树中提供数据(状态)的地方,相应的ChangeNotifier将

相关资讯:
农产品电子商务向企业个人农产品电子贸易方向发展的效益

农产品电子商务向企业个人农产品电子贸易方向发展的效益

查看
Web 3.0技术的基本方向

Web 3.0技术的基本方向

查看
认知

认知

查看
面向对象的

面向对象的

查看
2018-12-25

2018-12-25

查看