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

网站的评测系统怎么做的源码时代培训机构官网

网站的评测系统怎么做的,源码时代培训机构官网,做服装网站的意义是什么,建设网站要先给钱才能做1、构造方法传递2、InheritedWidget3、Notification4、Stream & event_bus 在Flutter中,常见的数据传递一共有以下几种: 1、构造方法传递 Flutter的构造方法具备着dart语言的特点,参数具备可选状态,通过构造方法传递数据&…
  • 1、构造方法传递
  • 2、InheritedWidget
  • 3、Notification
  • 4、Stream & event_bus

在Flutter中,常见的数据传递一共有以下几种:

1、构造方法传递

Flutter的构造方法具备着dart语言的特点,参数具备可选状态,通过构造方法传递数据,可以很方便的将任意数据进行传递,平时开发中,A跳转B页面最常用的方法就是通过构造方法进行传递。比如我们最常见的Key就是通过构造一级一级向下传递的。

优点: 相邻页面之间传递数据非常方便,你不需要进行任何额外的操作。

缺点: 当页面层级过多以及类过多时,需一级一级传递,写起来非常麻烦,代码耦合性高。

2、InheritedWidget

为了解决构造函数一级一级乡下传递的的缺点,Flutter派生出了功能性组件InheritedWidget,通过它可以实现顶级widget的数据共享,也就是说无需一级一级向下传递,即可获取数据,比如A页面有一个数据,需要在C页面使用,那么就可以不经过B页面获取,前提ABC三个页面是属于一个Widget中的,常见的 TabView布局顶层数据共享,适合复杂页面顶层向下传递数据,使用也很简单。

示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/// 数据共享

class TestData extends InheritedWidget {

  final Widget child;

  final String data; // 共享数据

  // 构造

  const TestData({

    Key? key,

    required this.child,

    required this.data,

  }) : super(key: key, child: child);

/// 定义一个静态方法 获取数据

static String of(BuildContext context) {

// return context.dependOnInheritedWidgetOfExactType<TestDataestData>()?.data??"数据有误";

return (context.getElementForInheritedWidgetOfExactType<TestData>()?.widget as TestData).data ;

}

  @override

  bool updateShouldNotify(covariant TestData oldWidget) {

    return child != oldWidget.child;

  }

}

然后在A页面的根布局套上TestData,在C页面通过of方法即可获取数据。

两种更新数据方法:

dependOnInheritedWidgetOfExactType: 子组件更新didChangeDependencies();

getElementForInheritedWidgetOfExactType: 不更新。

需要注意的点: 这种传递方式是树状结构从上而下进行传递,所共享数据的页面必须在顶层的build方法中,并且没有延迟加载,比如这个页面为动态加载,那么在C页面中的initState获取数据就会报错,原因就是首次构建时,没有加载子页面导致,可在build方法中获取,或者延时获取。

优点: 自上而下,无需一级一级传递,传递方便。

缺点: 不能跨组件传递。

应用场景: 系统中比如我们常见的MediaQuery设备信息和Theme应用主题就是通过这种方式在来进行统一数据共享的。

3、Notification

Notification是FLutter中的一种通知机制,和 InheritedWidget相反,他可以自下而上通知父组件更新数据,

定义传递数据类:

1

2

3

4

class TestDataN extends Notification{

  final String data;

  TestDataN(this.data);

}

子组件通知调用dispacth方法通知父组件。

1

TestDataN("data").dispatch(context);

在父组件进行监听:

1

2

3

4

5

NotificationListener(

    onNotification: (data){

      print("data$data");

  return true;

},child: child);

应用场景: 比如我们的ListView滚动监听、就是通过Notification实现的。

4、Stream & event_bus

以上的2、3数据传递方式都是基于同一个widget树进行传递的,跨组件通信我们可以使用Stream事件流进行传递,通过订阅者模式监听数据,可以在任意组件中进行数据传递,event_bus插件就是使用这种方式来进行数据传递的。

eventBus示例代码:

1

2

3

4

5

6

7

8

// 创建公用对象

EventBus eventBus = EventBus();

// 监听数据

eventBus.on().listen((event) {

});

// 发送

eventBus.fire(event);

使用完毕在注册接收数据页面记得销毁:eventBus.destroy();

优点: 可以跨组件通信。

到此这篇关于详解Flutter中数据传递的方式的文章就介绍到这了,更多相关Flutter数据传递内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

http://www.lbrq.cn/news/2629585.html

相关文章:

  • 正规刷手机单做任务网站网络推广怎么推广
  • 外包网站都有哪些品牌宣传推广策划方案
  • 静态网站制作模板宣传推广计划怎么写
  • 简单网站开发实例教程乐清网站建设
  • freedns免费域名申请seo推广seo技术培训
  • 怎么做婚庆网站平台网络优化行业的发展前景
  • 武汉装修网站建设it培训机构哪个好一点
  • app和网站开发电脑学校培训
  • 怎么做整人点不完的网站口碑营销理论
  • python做网站有优势智能建站网站模板
  • 初级网站建设百度置顶广告多少钱
  • 自己搭建云手机服务器杭州seo关键词优化公司
  • 做网站开发要学什么软件无锡做网站的公司
  • 网站设计ps做效果图过程萧山区seo关键词排名
  • bex5可以做网站吗如何做好网络营销工作
  • 中牟网站推广阿里云注册域名
  • 投资网站建设百度在线识图查图片
  • 招聘类网站怎么做人工智能培训机构排名前十
  • 临沂医院网站建设cms网站
  • 上城区网站建设价格黄页
  • pc站和手机网站爱战网关键词查询网站
  • 南山网站设计电话网络营销理论
  • 网站二级目录 修改路径关键词收录查询工具
  • 酒店网站建设 源码产品软文范例1000字
  • 地图上如何添加自己公司的地址网站seo优化发布高质量外链
  • 郑州做网站公司有哪些百度帐号
  • 网站统计工具是什么意思长沙seo外包服务
  • 南宁3及分销网站制作seo技术培训山东
  • 榆次做网站搭建一个网站需要多少钱?
  • 有哪些做外贸网站互联网推广员是做什么
  • 【AI智能编程】Trae-IDE工具学习
  • 【嵌入式电机控制#26】BLDC:三相模拟采集
  • 医疗AI中GPU部署的“非对等全节点架构“方案分析(上)
  • 3.JVM,JRE和JDK的关系是什么
  • 机器学习【五】decision_making tree
  • 开源工具FossFLOW,绘制技术图表