2.5 小部件中的build方法
现在Myapp类已经继承了StatelessWidget,因此Myapp是一个有效的小部件了,我们可以看到Myapp下面有一个横线,如果把鼠标悬停在上面,会看见一些错误的提示信息,如图2.10所示。
图2.10 Myapp中错误的提示信息
提示当前类中缺少build方法,所以输入build()加上大括号,定义一个方法。但还是有下画线,如图2.11所示。
图2.11 build方法提示的错误信息
这里需要告诉Flutter,Myapp这个类创建的对象是一个小部件,需要显示到屏幕上,也可以认为Flutter通过调用对象中的build()方法来显示某些内容,这就是要在创建小部件中添加build()方法的原因。build()方法实际上需要通过方法中的参数传递一些数据,这些数据是Flutter传递的。因为Flutter会调用build()方法,build()方法需要一个参数context,context实际上是一个对象,包含应用的一些元信息,以及绘制小部件的位置。例如context中包含了应用的主题,目前可以先忽略它。
现在我们在build()方法中添加一些内容。build()方法需要返回内容,所以需要使用return关键字。因为Flutter需要执行build()方法来知道在屏幕上绘制什么,所以Flutter需要执行build()方法返回的内容,我们在方法体中添加return关键字,但现在的问题是需要在这里返回什么。这里有一个很重要的规则,在build()方法中,小部件总会返回另一个小部件,一直递归到Flutter附带的小部件为止。
这里可以使用Flutter附带的MaterialApp小部件,它是一个很特殊的小部件,可以用来包装整个App。App可以通过它来设置主题,也可以添加一个导航器,使应用在不同页面间进行切换等。所以MaterialApp是核心的根小部件,在每个Flutter App中都会用到它。在Myapp小部件中将MaterialApp返回,作为最顶级的小部件,代码如下:
MaterialApp小部件中可以配置一些内容,并显示在屏幕上。现在模拟器上面没有显示任何内容,所以需要给MaterialApp传递数据,下一节来实现这个功能。