Flutter实战指南
上QQ阅读APP看书,第一时间看更新

2.7 深入学习Dart语法

我们创建了一个非常简单的Flutter应用,在main.dart文件中调用main()方法,然后调用runApp()方法,在runApp()方法中创建了一个我们自己的类的对象,实际上是调用Flutter的build()方法返回了一个小部件树。我们用Dart语言编写了以上内容,例如导入语句、方法的语法、类等,这些都是用Dart编写的。Dart实际上是一种强类型语言,意味着必须定义方法和变量的类型。这对开发者来说是有帮助的,因为如果你输入一个错误的类型,IDE会有错误的提示信息,在构建应用过程中也会被发现。

build()方法返回了一个小部件,但是我们并没有声明返回类型,不过IDE也没提示报错。这是因为Dart语言实际上已经根据MaterialApp小部件推测出会返回一个小部件。为了使这段代码更清晰,我们需要在build()方法前面加Widget这个类型,意味着Widget是我们期望的返回类型。如果把return返回的内容设置为'hello',IDE会给我们错误的提示信息,显示返回类型错误。这样当保存代码的时候,代码不能被重新编译。所以在build()方法前,要改成返回一个小部件。代码如下:

添加返回类型可以避免出现错误。build()方法实际上是StatelessWidget中一个已经定义的方法,我们可以在build()方法的参数前面加一个类型,使代码更清晰,参数context的类型是BuildContext,BuildContext是material包中提供的另外一个类,代码如下:

这样我们可以很清楚地知道context是BuildContext的类型,确保我们在使用时不会犯错。对IDE来说也很好,在IDE中我们可以通过context加点来获得提示和建议。

我们也可以给main()方法加返回类型,main()方法没有返回任何内容,可以在前面加void类型,表示这个方法不会返回任何内容,代码如下:

如果有返回值,IDE会提示报错。现在的代码比之前更易读了,所以强烈建议使用类型,类型是一个关键的特性,将在后面章节中经常使用它。

如果main()方法中只有一行代码,有一个更简单的写法,代码如下:

build()方法实际上是StatelessWidget类中的方法,我们覆盖了它,所以我们需要在这里加一个注解,代码如下:

添加@override注解不是必须的,@override可以告诉Dart和Flutter,我们有意重写这个方法。加注解可以使代码变得好理解。现在代码变得更清晰了,下一节我们给这个应用加些其他的内容。