到目前为止,我们使用的几个小部件都是在material.dart中的,其实在它里边Flutter还为我们封装了其他好用的组件;

MaterialApp

Flutter中,runApp推荐返回一个MaterialApp,那么我们来看一下它是个什么样的部件:

  1. class MaterialApp extends StatefulWidget

我们从它的继承关系中可以看到,它继承自一个StatefulWidget,这是一个有状态的Widget,那么它有可能封装了一套方便我们使用的UI效果;

我们将代码修改如下:

image.png
运行工程,显示效果:
image.png
比起之前的显示效果多了两行下划线和debug标识;

Scaffold

我们在使用MaterialApp的时候,一般配合Scaffold使用,而Scaffold中含有AppBar的定义:

我们编写如下代码:

  1. void main() => runApp(MyApp());
  2. class MyApp extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return MaterialApp(
  6. home: Scaffold(
  7. appBar: AppBar(
  8. title: const Text('Flutter 工程'),
  9. ),
  10. ),
  11. );
  12. }
  13. }

直接运行项目,查看显示效果:
image.png

这个时候已经接近于我们常用的App样式了;

那么我们如果将自定义的MyWidget显示在界面上呢?我们查看一下Scaffold除了appBar是否还有其他属性?

我们发现Scaffold还有一个body属性,并且它也是一个Widgetfinal Widget? body;
image.png
我们将自定义的MyWidget赋值给Scaffoldbody属性试试看:

  1. class MyApp extends StatelessWidget {
  2. @override
  3. Widget build(BuildContext context) {
  4. return MaterialApp(
  5. home: Scaffold(
  6. appBar: AppBar(
  7. title: const Text('Flutter 工程'),
  8. ),
  9. body: MyWidget(),
  10. ),
  11. );
  12. }
  13. }

运行项目,查看效果:
image.png
自定义的MyWidget已经显示在界面上了,而且我们发现Center部件并不是在屏幕正中间,而是基于它的父部件也就是body居中的;

我们正常开发App的过程中,一般情况下也是基于MaterialApp来进行开发的;

Flutter小知识

debug标识

我们发现,在我们使用了MaterialApp之后,在App显示界面的右上角出现了一个debug的标识,那么如何将其隐藏掉呢?

既然是跟随MaterialApp这个部件出现的,那么在此部件内部是否有属性可以设置debug标识的显示与否呢?

MaterialAppdebugShowCheckedModeBanner就是控制debug标识的显示与隐藏的,我们将代码修改如下:

  1. class MyApp extends StatelessWidget {
  2. @override
  3. Widget build(BuildContext context) {
  4. return MaterialApp(
  5. debugShowCheckedModeBanner: false,
  6. home: Scaffold(
  7. appBar: AppBar(
  8. title: const Text('Flutter 工程'),
  9. ),
  10. body: MyWidget(),
  11. ),
  12. );
  13. }
  14. }

运行查看效果:
image.png