Flutter

flutter可选参数默认值之坑

2020-11-23  本文已影响0人  HawkFlying

描述

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

上一篇下一篇

猜你喜欢

热点阅读