Flutter MaterialApp 界面

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return Center(
            child: Text(
                'hello',
                textDirection: TextDirection.ltr,
                style: TextStyle(
                    fontSize: 40.0,
                    fontWeight: FontWeight.bold,
                    color: Colors.yellow,
                ),
            ),
        );
    }
}

将 App 类的build 函数里面的内容独立成 Hello 类:

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return Hello();
    }
}

class Hello extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return Center(
            child: Text(
                'hello',
                textDirection: TextDirection.ltr,
                style: TextStyle(
                    fontSize: 40.0,
                    fontWeight: FontWeight.bold,
                    color: Colors.yellow,
                ),
            ),
        );
    }
}

运行结果和上面并没有什么差异。

接下来就是说我们的今天的主角——MaterialApp。

将 App 类的build 函数使用 MaterialApp Widget,代码如下:

class App extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
          home: Hello(),
        );
    }
}

效果也改变了。多了两条横线。

FF2B635B-DF7B-49A1-8DF1-CEFA5A6FE78A

看来 MaterialApp Widget 有自己一套的设计理念,home 属性直接放普通的 Widget 好像没有达到理想的效果。

接下来就是要介绍一下 Scaffold Widget。

官方说他是一个符合 Material 设计的 Widget,那我们试试用他吧。

class App extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Hello(),
          ),
        );
    }
}

A831F7CB-BD4F-4A47-97AE-4B167F

先不说有没有达到理想的效果,但是他是真的是正常了。

Scaffold Widget 定义了很多界面的设计,比如 appBar:

Scaffold(
    appBar: AppBar(
        title: Text('Muzico')
    ),
)

46837088-2459-4841-9F38-5E81DC9DF3AE

AppBar Widget 可以设置阴影,通过 elevation 属性,默认值为4.0,不需要阴影可以设置为0.0。

Scaffold(
    appBar: AppBar(
        title: Text('Muzico'),
        elevation: 0.0,
    ),
)

通过 theme 属性可以改变 MaterialApp 的主题。

MaterialApp(
    theme: ThemeData(
        primaryColor: Colors.orange
    ),
)

最后,完整代码:

import 'package:flutter/material.dart';

void main() => runApp(App());

class App extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Muzico'),
              elevation: 0.0,
            ),
            body: Hello(),
          ),
          theme: ThemeData(
            primaryColor: Colors.orange
          ),
        );
    }
}

class Hello extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return Center(
            child: Text(
                'hello',
                textDirection: TextDirection.ltr,
                style: TextStyle(
                    fontSize: 40.0,
                    fontWeight: FontWeight.bold,
                    color: Colors.yellow,
                ),
            ),
        );
    }
}

6606E69B-8663-484E-968B-02F698F4