【问题标题】:What is the use of curly braces in Dart method signatureDart方法签名中花括号的用途是什么
【发布时间】:2018-03-24 21:14:20
【问题描述】:
class TapboxA extends StatefulWidget {

 TapboxA({Key key}) : super(key: key);

}

这部分:

TapboxA({Key key}) 

下半场

super(key: key);

我明白了,(对超类构造函数的调用)。

但是什么是

{Key key}

语法做什么?

【问题讨论】:

    标签: syntax constructor dart


    【解决方案1】:

    在 Dart 构造函数(和其他方法)中可以有可选的命名参数:

    MyClass({String namedParam}){//...}
    

    在 Flutter 小部件构造函数的情况下:

    TapboxA({Key key})  // TapboxA constructor defines a named parameters `key`
    : super(key: key); //which is used within the super constructor call (which also has `key` as named parameter )
    

    你可以找到更多关于 optional named parameters in the Dart language tour的信息

    【讨论】:

    • key的值是从哪里得到的?我在小部件“child: new TapboxA()”中看到此代码,没有为提供的命名参数提供任何值....
    • @SirPaulMuaddib 这是因为可选参数是可选 :)
    • @SirPaulMuaddib Keys 用于对小部件重建进行细粒度控制。在无限滚动列表中,您可以通过为其项目分配一个键来避免整个列表的完全重建,因为新项目被添加到列表中,除非其键与其 runtimType 匹配,否则不会重建以前的项目:@ 987654322@
    【解决方案2】:

    Dart 在构造函数上提供了一个选项。默认情况下,当您使用构造函数实例化类时,您必须提供定义的参数。

    因此,TapboxA({Key key}) 意味着您可以在不提供参数的情况下实例化类

    【讨论】:

      【解决方案3】:

      只有构造函数没有什么特别的。

      对于所有 Dart 方法,我们可以选择命名参数,就像在 Python 等语言中一样

      使用大括号语法,您可以定义具有名称的可选参数。

      所以使用大括号的方法签名,

      TapboxA({Key key}) :
      

      你可以用两种不同的方式调用这个构造函数

      常用方法,无命名参数

      tapboxA1 = TapboxA(keyObject)
      

      命名参数的额外细节

      tapboxA2 = TapboxA(key: keyObject)
      

      换句话说,有用性在于调用方法时,而不是方法本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-11
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-18
        • 2020-01-20
        相关资源
        最近更新 更多