1. 写在前面

在上篇文章中介绍了Dart的方法与箭头函数,那么现在就继续来学习 Dart的方法中的可选参数、方法作为参数传递。

【Flutter】苹果Mac电脑配置flutter开发环境

【Flutter】 Android Studio 安装第三方模拟器—网易MuMu

【Flutter】项目运行报错Failed to find Build Tools revision 29.0.2

【Flutter】flutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘

【Flutter】如何新建项目,运行你的第一个 flutter 工程项目

【Flutter】Dart中的var、final 和 const基本使用

【Flutter】Dart数据类型之num

【Flutter】Dart数据类型之String

【Flutter】Dart的数据类型list&Map(数组和字典)

【Flutter】Dart的方法与箭头函数

2. 可选参数

首先来看看,方法中的可选参数

sum1 (int a ,{b,c}){b ??= 1;c ??= 2;return a + b + c;
}

上面的方法里面,bc 是可选参数,调用的时候也会提示:

因为可选的 bc 参数没有指定类型,所以是 dynamic 动态类型。

可选参数:调用方法的时候,必须带上形参的名字

void functionTest() {print(sum1(1,c:2,b:3));
}
// 可选参数:调用的方法的时候,必须带上形参的名字,顺序可以不一样
sum1 (int a ,{b,c}){//如果 b/c 为 空就赋值为 1、2b ??= 1;c ??= 2;return a + b + c;
}

可选参数,可以选择给值,也可以选择不给,如果有多个可选参数,可以选择其中一个赋值。

那可选参数是否可以加上类型,如下这么写呢?

sum1 (int a ,{int b,int c}){

这样写会报错的,如下:

错误:参数“b”的值不能为“null”,因为其类型为“int”,但隐式默认值为“null”。

// nullability
sum1 (int a ,{int? b,int? c}){// int? 告诉编译器,我处理了后面为空的情况//如果 b/c 为 空就赋值为 1、2b ??= 1;c ??= 2;return a + b + c;
}

加个?就可以了,就是告诉编译器这是nullability类型,告诉编译器如果为空,我后面自己会处理的。

不使用?的话,就直接赋值默认值就可以

sum1 (int a ,{int b=1,int c=2}){// b ??= 1;// c ??= 2;return a + b + c;
}

上面的可选参数需要带形参名,可以指定是给 b还是c赋值,下面这种写法,不需要带形参名,但是不能指定赋值

sum1 (int a ,[int b=1,int c=2])

如果指定赋值会报错,如下:

跳过中间某个也是会报错的,如下:

只能按顺序赋值

可选参数全部赋值如下:

print(sum1(1,2,3));

3. 方法作为参数传递

方法也是一个对象,可以赋值给一个变量,可以直接调用运行

void functionTest() {var hello = jpHello();hello(); //可以直接调用
}
jpHello(){print("hello reno");
}

方法作为参数传递,当然它和我们 OC 中的 block不一样,用法倒是差不多,那么下面举例看看。

void functionTest() {var list = [1,2,3,4,5];list.forEach(print);
}

这里调用系统的forEach方法,传入一个方法参数 print打印list内容。


我们去看看forEach方法的内部实现

forEach接受一个外界传进来的action方法,再遍历方法的调用者 this里面的每一个元素element,再调用action,传入element

那我们就自己实现一个forEach功能的方法吧!

void functionTest() {var list = [1,2,3,4,5];// list.forEach(print);forEachTest(list,print);}
//自定义一个 forEach
forEachTest(List list,void func(var element)){for (var e in list) func(e);
}

测试打印结果如下:

这就是 dart的方法作为参数,也就是一个对象,可以进行参数传递,这也是使用场景最多的。

4. 写在后面

关注我,更多内容持续输出

  • CSDN
  • 掘金
  • 简书

【Flutter】Dart的方法中的可选参数、方法作为参数传递相关推荐

  1. Flutter 可选参数方法构建

    在Flutter 中不存在Java 方法重载概念,类似  test(), test(int a), test(String a) 这种一个类里面多个不同参数形式的相同名称的方法,但提供了可选参数构造方 ...

  2. C# 中的可变参数方法(VarArgs)

    首先需要明确一点:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法.可以通过MethodBase.Call ...

  3. 在JAVA语言程序中main_在Java程序main方法中,正确的参数是

    [单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...

  4. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传 ...

  5. Java中的可变参数方法

    1.一个小例子: 为了比较直观地说明Java的可变参数方法,我们举个例子: //求若干个整型数中的最大值 public int getMax(int... items){ //定义可变参数itemsi ...

  6. Mybatis的Mapper方法中传递map参数的写法

    Mybatis的Mapper方法中传递map参数的写法 当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进 ...

  7. 在jQuery方法中能调用JS方法吗?

    在jQuery方法中能调用JS方法吗? 能,在jQuery方法中直接写入要调用已写好的方法名()即可. 在项目中,有多个地方用到结账的功能. 比如, 点击结账按钮,由JS获取对应行列的数据,进行计算并 ...

  8. flutter中的可选参数

    在iOS原生开发中,只要是方法定义了形数,在方法调用时就必须在对应的位置上传递实参:在Flutter中参数定义可以定义非必选参数,可选参数,具名参数和不具名参数. 非具名参数 不具名参数的定义不使用{ ...

  9. Dart可选参数方法的写法!

    一, 可选参数的方法 有两种, 1,大括号{}包围的. 特点:实现方法时,可以指定具体传递某一个参数. 2,中括号[]包围的. 特点,多个可选参数时,默认按照前后顺序传递. 共同点:必填的参数,必须要 ...

  10. Struts2中action接受参数方法

    Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:    a.定义:在Action类中定义属性,创建get和set方法:    b.接收:通过属性接收参数 ...

最新文章

  1. 使用 mkdocs 搭建个人 wiki 站点
  2. 安卓4.4.4安装哪个微信版本_微信一个开关,速度立马提升一倍
  3. 始化mysql系统库_安装和初始化mysql-8.0.11-winx64
  4. 自己都不觉得自己值钱,别人怎么觉得你值钱?
  5. vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定
  6. mongodb 监控分析命令
  7. android生命周期_Android片段生命周期
  8. BackBone及其实例探究
  9. android studio trace,天猫Android性能优化1—AndroidStudio内置的Traceview视图
  10. 冒泡排序图解+代码示例
  11. 【应急响应】————7、服务器大量发包
  12. C语言使用文件指针时遇到的位置问题
  13. ubuntu 串口调试助手
  14. iOS多线程——GCD底层探索中(dispatch_async与dispatch_sync源码)
  15. 前端图片放大缩小/比例自适应/打码/码大小可调整
  16. IDEA Material Theme UI 暗黑系主题的安装
  17. webman apidoc安装、生成接口文档
  18. 计算机应用研究所912,2019清华大学计算机考研912考试初试常问问题?
  19. java B2C电商系统架构
  20. linux操作系统学习网站整理

热门文章

  1. 安装了Python2.X和Python3.X后Python2.X IDLE打不开解决办法总结
  2. 一步步构造自己的vue2.0+webpack环境
  3. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操
  4. asp.net优化方案
  5. Hibernate 中 set 里的属性及定义
  6. Ext JS 6学习文档-第8章-主题和响应式设计
  7. LINQ 花3个礼拜的时间来弄清楚
  8. 反射实例化不同类型的实例
  9. Openwrt Uboot烧写
  10. 面试准备——springboot相关