构造函数

flutter官方给的示例代码,没有对构造函数进行语法解释,记录一下详解。

class MyWidget extends StatefulWidget {final String userName;MyWidget({Key key, this.userName}) : super(key: key);_MyWidgetState createState() => _MyWidgetState();
}class _MyWidgetState extends State<MyWidget> {}

key

key 表示 widget 的标识符. flutter 会为每一个 widget 自动指定 key 值,一旦对 不同的 widget 指定了相同的’key’属性, 那么在 widget 被渲染为 element 时就会被复用.

# 调用自己得构造函数
MyWidget();# 调用父类构造函数,并传一个参数key。(将当前widget得默认的key值传给父类得key属性值).
super(key:key)

关于构造函数中这个大括号的意思解释:

  • 1.调用自己得构造函数,并声明可选参数
  • 2.通过大括号{}来申明可选参数,如果去掉大括号,就表示必选参数
  • 3.调用 MyWidget 时,如果是可选参数,

示例:MyWidget 定义可选参数,RaisedButton 调用

// 申明一个可选参数 userName
class MyWidget extends StatefulWidget {final String userName;MyWidget({this.userName}) : super();_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {}// 调用可选参数类:
RaisedButton(child: Text('raiseButton'),onPressed: () {String str = "Ifredom";Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {return new MyWidget(userName: str); // 注意写法},));},
),

// 申明一个必选参数: userName
class MyWidget extends StatefulWidget {final String userName;MyWidget(this.userName) : super(); // 注意此处去掉了大括号_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {}// 调用可选参数类:
RaisedButton(child: Text('raiseButton'),onPressed: () {String str = "Ifredom";Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {return new MyWidget(str); // 注意写法,因为参数是必选,所以可以直接根据参数位置推断,写法上就省略了username,},));},
),

思考题:关于传参,如果想要传一个必选参数,和一个可选参数,应该如何写呢?

关于冒号:的含义

冒号的作用就是初始化。 在执行构造函数体之前,初始化实例变量.

class MyWidget extends StatefulWidget {// final String userName;final String userName;MyWidget() : userName = 'ifredom’s name!';_MyWidgetState createState() => _MyWidgetState();
}

所以示例中的代码,我们使用的一个变种写法,调用 super()这个内置方法,去对父类进行初始化.
下面的示例中,MyWidget 继承自 StatefulWidget,而父类 StatefulWidget 构造函数中有一个属性叫做 key,没有属性叫做 userName.

class MyWidget extends StatefulWidget {// final String userName;final String userName;MyWidget() : super(userName : 'ifredom’s name!'); // 此句代码错误,对比使用// MyWidget() : super(key: key); // 此句正确_MyWidgetState createState() => _MyWidgetState();
}

关于key的使用场景

  • 当使用 Stateless Widget 时,我们并不需要使用 key,

  • 当使用 Stateful Widget 时,widget 内有数据移动和改变并且需要显示到界面时才需要 key,否则可以不写。

  • 在具有相同父级的[Element]中,键必须是唯一的。[Key]的子类应该是[LocalKey]或[GlobalKey]的子类。

# Key表示类型,key表示为当前widget的标识符,是flutter自动送给你的值,所以不用像 userName 一样去声明一下.
> MyWidget({Key key, this.userName})# 此语法表示 :在构造函数体执行之前进行变量的初始化,变量使用逗号分隔,该过程叫初始化列表
# 第一个`key`为父类定义的一个属性名,类似于userName(不可更改,默认名为key),第二个`key`为自己的`key`,由flutter隐式创造
> :super(key: key)# 生成额外得key的方法
> : super(key: new ObjectKey(userName));

参考资料

硅谷大佬-王叔不秃

------ 如果文章对你有用,感谢右上角 >>>点赞 | 收藏 <<<

flutter - 构造函数相关推荐

  1. 【Flutter】Future 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )

    文章目录 一.FutureBuilder 简介 二.处理 Flutter 中的中文乱码 三.完整代码示例 四.相关资源 一.FutureBuilder 简介 FutureBuilder 本质是组件 : ...

  2. 【Flutter】Image 组件 ( Image 组件简介 | Image 构造函数 | Image.network 构造函数 | Image.asset 构造函数 )

    文章目录 一.Image 组件简介 二.Image 构造函数 三.Image.network 构造函数 四.Image.file 构造函数 五.Image.asset 构造函数 六.Image.mem ...

  3. 【Flutter】GridView 网格布局 ( GridView.count 构造函数 | crossAxisCount 参数指定每行元素个数 )

    文章目录 一.GridView 网格布局简介 二.完整代码示例 三.相关资源 一.GridView 网格布局简介 GridView 可用于显示网格布局 ; 一般使用 GridView.count 函数 ...

  4. Flutter学习笔记:identical函数的用法以及常量构造函数的特点

    identical函数 用法: bool identical( Object? a, Object? b ) 作用:检查两个引用是否指向同一个对象,简单说就是检查两个实例是否共用一个存储空间 例1: ...

  5. 类的初始化列表_【Flutter 111】Flutter手把手教程Dart语言——类、类的的成员变量和方法、类的构造函数...

    类 Dart是一种面向对象的语言,所有对象都是一个类的实例,而所有的类都继承自Object类.每个除了Object类之外的类都只有一个超类,一个类的代码可以在其它多个类继承中重复使用. 类的实例变量 ...

  6. flutter中的生命周期

    前言 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数提现在了State上面.理解flutter的生命周期,对我们写出一个 ...

  7. 用Flutter + Dart快速构建一款绝美移动App

    作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...

  8. 构建你的第一个Flutter视频通话应用

    Flutter 1.0 发布也已经有一段时间了,春节后声网发布了Flutter平台上的Agora Flutter SDK(一个基于 Flutter 开发的 Plugin),今天我们就来看一下如何使用A ...

  9. Flutter 布局控件完结篇

    本文对Flutter的29种布局控件进行了总结分类,讲解一些布局上的优化策略,以及面对具体的布局时,如何去选择控件. 1. 系列文章 Flutter 布局详解 Flutter 布局(一)- Conta ...

最新文章

  1. 编写高性能的 JavaScript 程序的几个提示
  2. 标杆徐linux云计算视频,标杆徐2018 Linux自动化运维系列④: Shell脚本自动化编程实战...
  3. python测试之道进阶,Pytest-Mock 进阶用法详解
  4. Exercise: Logistic Regression and Newton's Method
  5. 安全扫描工具​Nmap引擎理解文档
  6. 28Python正则表达式、正则表达式对象、正则表达式修饰符、表达式模板、表达式实例、match函数、search方法、检索和替换、repl、compile、findall等
  7. 《炉石传说》的退环境机制失败在哪
  8. VS 2005 WEB PROJECT包括Crystal Report水晶报表的发布
  9. win10管理凌乱桌面_用于管理凌乱的开源存储库的命令行技巧
  10. “被枪指头,中国教授用功夫击退美国劫匪”,他的身份不简单
  11. 使用容器服务支持开发者快速搭建小程序后端服务
  12. 福建农商银行计算机类笔试题目,2020年福建福州农商银行免笔试面试试题
  13. Spring字段注入
  14. Bailian3713 外星人翻译用数字转换模块【递归+映射】
  15. 生命科学研究需求推动云计算发展
  16. 【机器人】关于驱动器与控制器的工作机制
  17. C++Lambda表达式作为参数
  18. 如何在 Mac 上设置和使用快捷方式?
  19. 058线性反馈移位寄存器产生m序列
  20. podman 开机自启

热门文章

  1. C语言变量和数据类型及数据长度
  2. 手机便签会保存动图吗?
  3. GD32F4XX IAP升级
  4. 2019面试总结(阿里巴巴蚂蚁金服、饿了么、人人车等)
  5. SOTA模型飞入寻常百姓家-BEiT模型在AIStudio动手实践
  6. 【Pytorch】 repeat()的用法详解
  7. 英特尔x系列cpu针对服务器,8年前的英特尔服务器CPU,现在如何?X5650对比i3-8100...
  8. 华为防火墙会话 session table
  9. Verilog语言简介(数字逻辑课程笔记)
  10. 哪些人不适合做程序员?