美文网首页Flutter
flutter可选参数默认值之坑

flutter可选参数默认值之坑

作者: HawkFlying | 来源:发表于2020-11-23 16:21 被阅读0次

描述

flutter方法的可选参数,非常方便,但在经过多层级包装和传递后,可能会出现没有注意的细节而掉进坑里:有时我们多层封装控件构造方法或普通方法时,会多层封装可选参数,以为底层的可选参数有默认值,顶层可选参数不传时就是底层可选参数的默认值,实际不是!

可选参数默认值

先看下下面示例:

class OptionParamPage extends StatefulWidget {
  final String title;

  OptionParamPage({Key key, this.title}) : super(key: key);

  @override
  _OptionParamPageState createState() => _OptionParamPageState();
}

class _OptionParamPageState extends State<OptionParamPage> {
  bool _boolValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(
          alignment: Alignment.center,
          width: double.infinity,
          height: double.infinity,
          child: Text(
            TestModel('不传').toString() +
                TestModel('传false', boolValue: false).toString() +
                TestModel('传定义的空值', boolValue: _boolValue).toString() +'\n'+
                _testMethod('不传') +
                _testMethod('传false', boolValue: false) +
                _testMethod('传定义的空值', boolValue: _boolValue) +'\n'+
                '多层包装'+_testModelMethod('不传').toString() +
                '多层包装'+_testModelMethod('传false', boolValue: false).toString() +
                '多层包装'+_testModelMethod('传定义的空值', boolValue: _boolValue).toString(),
          )),
    );
  }

  ///方法的可选参数默认值
  String _testMethod(String title, {bool boolValue = true}) {
    return 'method $title  可选参数bool值为${boolValue ?? 'null'}\n';
  }

  ///包裹方法的可选参数默认值
  TestModel _testModelMethod(String title, {bool boolValue}) {
    return TestModel(title, boolValue: boolValue);
  }
}

class TestModel {
  String title;
  bool boolValue;

  ///class构造方法的可选参数默认值
  TestModel(this.title, {this.boolValue = true});

  @override
  String toString() {
    return 'class $title  可选参数bool值为${boolValue ?? 'null'}\n';
  }
}

效果如下:


效果图.png

从上面例子可以看出:

  • 可选参数默认值并不是可选参数传值为空时的值;
  • 可选参数的值,实际是传值的值,当传值为null时,即使可选参数有默认值,并且默认值不为null,实际可选参数接收到的值也为null;
  • 可选参数默认值没设置时,它的默认值其实为null;
  • 多层封装可选参数时,要注意可选参数默认值的变化;

一句话:可选参数没传参时,可选参数的值为默认值,没有默认值则为null;
可选参数有传参时,可选参数值为传参的值,如传参值为null,可选参数默认值不为null,最后可选参数值为null

相关文章

  • flutter可选参数默认值之坑

    描述 flutter方法的可选参数,非常方便,但在经过多层级包装和传递后,可能会出现没有注意的细节而掉进坑里:有时...

  • 磨刀- Dart 函数

    ✨✨✨✨✨ 魏什么_多喝水 Flutter 之路 声明 参数 可选参数 可选命名参数: 可选位置参数

  • Flutter 中的一些区别

    1、可选的位置参数和可选的命名参数 可先的位置参数在 Flutter 中使用 [] 标记为可选位置参数,并放到参数...

  • TypeScript 函数

    1 . 函数的定义 2 . 可选参数 ?必须放在必选参数之后 3 . 默认参数与普通可选参数不同的是,带默认值的参...

  • TypeScript

    自动拆分字符串 参数类型 参数默认值 可选参数 Rest and Spread Generator方法 yield...

  • 一些JSdoc的规范

    (1)默认值 @param {number} [foo=1] (2) 可选参数 @param {number} ...

  • flutter 可选参数

    在flutter 里面传参数 option param 是非常有意思的 打印结果 仔细看,体会体会,有传参数,这个...

  • flutter 函数和构造函数

    //普通函数默认值,默认值只有可选参数才有。void say(String name,{int age = 3,S...

  • 函数的参数传递

    1.可选参数和可变数量参数 可选参数定义:某些函数在定义参数时就为一些参数设置默认值,在调用函数时可以不用为这些参...

  • 3、TS 函数

    1、函数的返回值 2、函数的形参 3、可选参数 4、默认值如果设置了默认,那他就是可选参数,不需要再加问号 5、剩余参数

网友评论

    本文标题:flutter可选参数默认值之坑

    本文链接:https://www.haomeiwen.com/subject/jdcviktx.html