美文网首页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可选参数默认值之坑

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