第一个页面
app首页
入口函数
一个Flutter工程的入口函数与Dart命令行工程一样是main
,不同的是在Flutter中执行runApp(ArticleApp())
就能够在手机屏幕上展示这个Widget。
import 'package:flutter/material.dart';
void main() => runApp(new ArticleApp());
ArticleApp
我们要实现的文章列表页面UI就在ArticleApp
中定义:
class ArticleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: new Text(
'文章',
style: const TextStyle(color: Colors.white),
),
),
body: new ArticlePage(),
),
);
}
}
build
方法中返回的就是我们需要显示在屏幕上的widget。MaterialApp
代表使用Material Design风格,这是一个封装了很多Android MD设计所必须要的组件的小部件。假设我们需要显示一个Text
,而没有包裹在MaterialApp
内:
class ArticleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
//Center:摆放在中间
return Center(
child: Text("你好!"),
);
}
}
如果直接运行则会出现异常,因为Flutter不知道以什么顺序摆放文字(从左到右/从右到左)
因此我们不得不给Text
指名textDirection
属性:
class ArticleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text("你好!",
style: const TextStyle(color: Colors.white),
textDirection: TextDirection.ltr),
);
}
}
但是如果包含在MaterialApp
当中我们就不需要指名类似textDirection
这样的属性了,因为内部已经内置了一套风格,指明了这些必须属性。而Scaffold
则实现了基本的 Material Design布局结构,在 Material 设计中定义的单个界面上的各种布局元素,在 Scaffold 中都支持。比如:AppBar、抽屉菜单、BottomNavigationBar等等。
ArticlePage
在我们的布局中指定了Scaffold
的body(主体)为ArticlePage
,这是一个我们自定义的组合Widget。
class ArticlePage extends StatefulWidget {
@override
_ArticlePageState createState() => _ArticlePageState();
}
class _ArticlePageState extends State<ArticlePage> {
///滑动控制器
ScrollController