当前位置: 首页 > news >正文

品质好的网站制作东莞网站建设 信科网络

品质好的网站制作,东莞网站建设 信科网络,营销网站价格,移动端cpu天梯图2021状态管理的艺术:探索Flutter的Provider库 前言 上一篇文章中,我们详细介绍了 Flutter 应用中的状态管理,以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式:Provider。 Provider优缺点 基…

状态管理的艺术:探索Flutter的Provider库

前言

上一篇文章中,我们详细介绍了 Flutter 应用中的状态管理,以及 StatefulWidgetsetState 的使用。

本篇我们继续介绍另一个实现状态管理的方式:Provider

Provider优缺点

基础介绍:

Provider 是一个轻量级的状态管理库,它使用 InheritedWidgetChangeNotifier 的概念来实现状态共享和更新。

Provider 允许我们在应用的任何位置访问和修改状态,并支持跨组件的状态共享。

优点:

(1)简单易用:提供了直观的 API,使得状态共享和更新变得简单。

(2)减少代码耦合:将状态管理逻辑与 UI 分离,提高了代码的可维护性和可重用性。

(3)支持跨组件状态共享:可以在应用的任何位置访问和修改状态。

缺点:

(1)性能考虑:虽然 Provider 优化了性能,但在大规模应用中仍需注意状态更新的效率和必要性。

(2)学习成本:对于初学者来说,需要一段时间来熟悉 Provider 的用法和原理。

使用步骤

1.添加 Provider 依赖

(provider 可自行选择,我这里选择了 6.0.5 版本 )

dependencies:flutter:sdk: flutterprovider: ^6.0.5

2.创建状态类

创建一个类来持有你的应用状态。这个类可以是简单的 Dart 类,包含一些属性和方法。

// 定义一个简单的状态类
class CounterState with ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners();}
}

3.使用 Provider 包裹你的应用

在你的应用的根 widget 或者使用状态的部分 widget 的上面,使用 ChangeNotifierProvider 来包裹你的应用或 widget

ChangeNotifierProvider 接受一个 create 参数,这个参数是一个返回你创建的状态类的实例的函数。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';void main() {runApp(// 使用Provider将状态包裹在顶层ChangeNotifierProvider(create: (context) => CounterState(),child: MyApp(),),);
}

4.在 widget 中使用状态

在你的 widget 中,使用 Consumer widget 或者 Provider.of<T>(context) 来访问和监听状态的变化。

当状态变化时,Consumer 会重新构建其子 widget

class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('Provider Example')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[// 使用Consumer来访问状态Consumer<CounterState>(builder: (context, counter, child) => Text('${counter.count}',style: TextStyle(fontSize: 24),),),RaisedButton(onPressed: () {// 使用Provider.of来访问状态并调用方法context.read<CounterState>().increment();},child: Text('Increment'),),],),),),);}
}

5.更新状态

在你的状态类中,当你需要更新状态时,直接修改状态类的属性,并确保你的状态类继承自 ChangeNotifier

在修改属性后,调用 notifyListeners() 方法来通知所有监听这个状态的 widget 进行更新。

class CounterState with ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners();  // 通知所有监听这个状态的widget进行更新}
}

完整示例

在下面这个例子中,我们定义了一个 CounterState 类,它包含一个计数器和 increment 方法来增加计数。

我们使用 ChangeNotifierProvider 来将状态包裹在应用的顶层,并在需要的地方使用 ConsumerProvider.of 来访问和修改状态。

代码如下(示例):

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';// 定义一个简单的状态类
class CounterState with ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners();}
}void main() {runApp(// 使用Provider将状态包裹在顶层ChangeNotifierProvider(create: (context) => CounterState(),child: MyApp(),),);
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('Provider Example')),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[// 使用Consumer来访问状态Consumer<CounterState>(builder: (context, counter, child) => Text('${counter.count}',style: TextStyle(fontSize: 24),),),ElevatedButton(onPressed: () {// 使用Provider.of来访问状态并调用方法context.read<CounterState>().increment();},child: Text('Increment')),],),),),);}
}

结果如下:

总结

Flutter 中,Provider 是一个非常流行的状态管理库,它允许你将状态(数据)在 widget 树中传递,而无需手动在每个 widget 层级上传递。

使用 Provider,你可以在应用的任何地方访问和更新状态,这使得状态管理变得更加简单和高效。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,gonghao同名

http://www.yayakq.cn/news/131893/

相关文章:

  • 免费做网站公司ydwzjs软文写作的基本要求
  • 六安网站建设全包视频链接生成
  • 经典的高端网站建设公司着陆页设计怎么建网站教程视频app
  • 石家庄网站seo外包万网总裁张向东
  • 东莞网站建设方案表网页小游戏手机版
  • 上海浦东建设管理有限公司网站创新网站内容建设
  • 网站做统计大数据平台怎么搭建
  • 池州专业网站建设怎么样广东佛山最新通知
  • 企业外贸网站建设方案保定seo排名公司
  • 阿里云 网站网站开发属于哪个大学专业
  • 建设用地规划许可证在哪个网站查询泰兴网站开发
  • 济南市高新技术官方网站开发区安康网站开发
  • 合肥专业做网站的公司哪家好沈阳网站建设方案模板
  • 17网站一起做网店档口出租那个网站有免费的模板
  • 百度做网站优化多少钱一年室内设计培训班要多少钱
  • 做暖暖免费视频网站近几年的网络营销案例
  • 网站域名续费后SEO查询未更换Thinkphp网站开发实例
  • 怎么建国外网站杭州网站免费制作
  • 好的网站首页建设公司中建装饰集团
  • wordpress英文站更新通知目录怎样建设个自己的网站首页
  • 易语言编程软件做网站江西建设职业技术学院迎新网站
  • 网站建站怎么分前端和后端网页制作与网站建设宝典 pdf
  • 怎么做网站出肉狗时尚wordpress免费主题下载
  • 做同城网站有哪些什么是市场营销什么是网络营销
  • 网站打开速度加快怎么做网上购物平台排名前十名
  • 北京建设银行对公网站京东网页设计教程
  • 营销型网站建设优化合肥市住房和建设局网站
  • 营销型企业网站测评表wordpress登录后搜索
  • 网站的ftp帐号软件开发流程图用啥画
  • 单页营销式网站模板下载长治推广型网站建设