颤抖MyhomePage({Key key,this.title}):super(key:key);请任何人以颤振的例子清楚地说明

时间:2018-08-28 10:48:19

标签: key flutter

flutter中,任何人都可以通过示例清楚地说明 我对key感到困惑,代码如下

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

4 个答案:

答案 0 :(得分:6)

代码是MyHomepage小部件的构造函数。

{Key key, this.title}

声明2个可选的命名参数(由于{}而命名为可选参数),其中

  • 第一个名称为key,类型为密钥`

  • 第二个名称为title,具有字段this.title的类型,并使用传递的值自动初始化this.title 这是一个很好的语法糖,可以节省一些写作。

:启动初始化程序列表。 初始化程序列表允许某些程序在将调用转发到超类的构造函数之前执行一些表达式。

初始化类时,将禁止对this的读取访问,直到对超级构造函数的调用完成为止(直到构造函数的主体执行-在您的示例中,构造函数没有主体)。

初始化器列表通常用于通过assert(key != null)验证传递的参数值或使用计算值初始化final字段(final字段以后无法初始化或更新)。 / p>

super(key: key)转发到超类的构造函数,并将传递给key的参数MyHomepage传递给超级构造函数key参数(与{{1}相同) }。

答案 1 :(得分:2)

感谢@Günter的详细解释,这对我一开始就很有帮助。在这里,我想解释这个问题的背景,尤其是标点符号作为语法。

提到的代码行:

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

应来自自动生成的flutter application boilerplate

完整上下文是:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

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

对我来说,怪异的标点符号(花括号{ }和两个冒号:)使我无法理解其语法。

{Key key, this.title}

括号:是在Dart中定义功能时声明可选参数的语法。

MyHomepage(...) : super(key: key)的第一个冒号是一个分隔符,用于指定构造函数super(key: key)初始化列表MyHomepage(...))< / p> super(key: key)中的

第二个冒号是您将参数传递给命名函数的方式({{1}在这种情况下 )。

  • 例如,函数super()的定义如下
enableFlags
  • 要调用该函数,Dart会将参数传递给该函数的方式是,在void enableFlags({bool bold, bool hidden}) {...} 之前声明parameterName,并用冒号value分隔,这对开发人员来说比pythononic安全。 swift中的对应语法应为外部参数。
:

希望这会有所帮助。

所有定义和示例都可以在Dart的official document

中找到

答案 2 :(得分:2)

Flutter在框架内的许多事情上都使用了Keys。由于您的窗口小部件扩展了StatelessWidget或StatefulWidget,因此这是窗口小部件具有密钥的方式,以便框架知道如何处理(超级功能将密钥传递给超类窗口小部件-框架可以理解)。

除此之外,只有Dart语法(顺便说一句真棒)。

您可以在此处了解有关键的更多信息:https://www.youtube.com/watch?v=kn0EOS-ZiIc

另一个例子是测试框架。 Flutter驱动程序需要一个密钥来知道要查找哪个小部件并与其进行交互。使用这种语法,您的小部件将具有一个密钥,它将起作用!

答案 3 :(得分:-1)

看看我的图片,包括两个案例:Only exists initializer list

initializer list and super.constructor