Flutter应用的用户界面是由布局控件(不可见的)和展示控件(可见的)协同完成的,布局控件就像是建筑里的框架,而展示控件则相当于建筑里的砖瓦。展示控件按照布局控件的要求依次排列,就组成了用户所看见的界面。在Flutter应用中,最基础的布局结构是脚手架(Scaffold),例如:

import 'package:flutter/material.dart';
void main(){runApp(new MaterialApp(title: 'Flutter应用',home: new Scaffold(),),);
}

脚手架是一个布局控件,它实现了基本的Material Design视觉布局结构。布局控件是不可见的,因此当你执行了上面代码,屏幕显示的是一片空白。现在这个脚手架正等你添砖加瓦,如下图所示:

从上图来看,脚手架里能添加的东西还是比较多的,您可以先从最常用的应用栏(AppBar)开始入手,应用栏也叫主工具栏,位于脚手架的顶部。

在应用栏中,您能添加以下内容:

属性 添加控件 描述
title 文本(Text 应用栏显示的主要控件,描述应用程序当前内容的简短文本
leading 不用添加控件 title之前显示的控件,如果应用栏位于具有侧导航(Drawer)的脚手架中,则脚手架将使用打开侧导航的图标按钮(IconButton)填充该属性。如果没有侧导航并且可以返回上一个屏幕,则应用栏将使用一个调用Navigator.maybePop方法的返回按钮(BackButton
actions 图标按钮、弹出菜单按钮(PopupMenuButton title之后显示的控件,这里主要放一些常用功能的按钮
flexibleSpace 活动空间栏(FlexibleSpaceBar)、图片(Image)等控件 在应用栏后面显示的控件,它的高度与应用栏的整体高度相同
bottom 标签栏(TabBar 在应用栏底部显示的控件

应用栏需要放在脚手架的appBar属性中,该属性将应用栏作为固定高度的控件放置在屏幕的顶部(如果需要可滚动的应用栏,可以使用SliverAppBar)。一个应用栏通常由一个文本和多个常用功能的图标按钮组成,例如:

import 'package:flutter/material.dart';
void main(){runApp(new MaterialApp(title: 'Flutter应用',home: new Scaffold(appBar: new AppBar(title: new Text('Flutter应用'),actions: <Widget>[new IconButton(icon: new Icon(Icons.grade),onPressed: (){ print('收藏'); },),new IconButton(icon: new Icon(Icons.share),onPressed: (){ print('分享'); },),],),),),);
}

执行上面的代码,将构建以下屏幕截图的布局:

接下来再看脚手架的内容区域,这是脚手架的主要内容,显示在应用栏下方,位于浮动功能按钮(FloatingActionButton)和侧导航后面。内容区域的控件需要放在脚手架的body属性中,该属性中的控件位于应用栏和脚手架底部之间的可用空间的左上角。想要在可用空间的中心显示这个控件,可以把它放在一个居中控件(Center)中。想要扩展这个控件,可以把它放在SizedBox.expand中。

当您想展示的内容超出了屏幕时,有一部分控件可能会溢出(应用不会奔溃,但溢出的边沿会显示成红色),在这种情况下你需要使用列表视图控件(ListView)作为脚手架的body属性控件。

import 'package:flutter/material.dart';
void main(){runApp(new MaterialApp(title: 'Flutter应用',home: new Scaffold(appBar: new AppBar(title: new Text('Flutter应用'),actions: <Widget>[new IconButton(icon: new Icon(Icons.grade),onPressed: (){ print('收藏'); },),new IconButton(icon: new Icon(Icons.share),onPressed: (){ print('分享'); },),],),body: new Center(child: new SizedBox(width: 200.0,height: 300.0,child: new Card(child: new Center(child: new Text('你好,世界!'),),),),),),),);
}

执行上面的代码,将构建以下屏幕截图的布局:

在默认情况下,脚手架的resizeToAvoidBottomPadding属性值为true,该属性设置是否自动调整body属性控件的大小,以避免脚手架底部被覆盖。例如,如果在脚手架上方显示屏幕键盘,则可调整body属性控件的大小以避免被键盘覆盖。如果你不需要此功能,可以将resizeToAvoidBottomPadding属性设置为false。更多关于脚手架的细节,请访问Flutter API文档。

基本的Material Design布局结构相关推荐

  1. 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习

    Future再论: 这里在继续往下学习之前,先来看一下Dart语言关于Event-Queue和Microtask Queue需要注意的一个小点,这个在之前https://www.cnblogs.com ...

  2. Flutter 入门学习(五)— Material Design风格组件

    文章目录 1. 概述 2. App结构和导航组件 2.1 MaterialApp(应用组件) 2.1.1 设置主页 2.1.2 路由处理 2.1.3 自定义主题 2.2 Scaffold(脚手架组件) ...

  3. html卡片布局按钮,Material Design风格动态网格卡片布局UI设计

    这是一款效果非常炫酷的Material Design风格动态网格卡片布局UI设计效果.在该效果中鼠标滑过卡片时会有阴影效果,当浏览器尺寸改变时,卡片大小会随着改变,整个网格布局有动态变化效果. 使用方 ...

  4. 说说 Android 的 Material Design 设计(四)——卡片式布局

    我们使用 CardView 与 RecyclerView 来·实现一个各种猫的卡片式展示列表吧O(∩_∩)O~ 1 CardView 控件 1.1 引入依赖库 打开 app/build.gradle, ...

  5. android 布局收缩成球,Android使用Material Design实现悬浮按钮

    前言 ​ 本文是对<Android第一行代码>第十二章<最佳UI体验--Material Design实战>中关于悬浮按钮实现的学习和记录,主要内容包括-- FloatingA ...

  6. android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局

    在实现开发要求中,有需要会使用抽屉式布局,类似于QQ5.0的侧滑菜单,实现的方式有很多种,可以自定义控件,也可以使用第三方开源库. 同样的谷歌也推出了自己的侧滑组件--DrawLayout,使用方式也 ...

  7. Material Design【Android-Toolbar,滑动菜单,悬浮按钮,卡片布局,下拉刷新和可折叠式标题栏及案例】

    文章目录 Material Design--界面设计 1.Toolbar,标题栏 2.滑动菜单 3.悬浮按钮和可交互提示 4.卡片布局 5.下拉刷新 6.可折叠式标题栏 Material Design ...

  8. 开启Fluter基础之旅三-------Material Design风格组件、Cupertino风格组件、Flutter页面布局篇...

    Material Design风格组件: 继续接着上一次https://www.cnblogs.com/webor2006/p/12545701.html的Material Design进行学习. A ...

  9. Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局

    实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...

最新文章

  1. Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照
  2. Daily Report 2012.11.9 刘宇翔
  3. [vue] 你期待vue3.0有什么功能或者改进的地方?
  4. 常用系统级加压工具简介
  5. Go语言游戏服务器思维导图
  6. java三国群雄_三国群英-真三国无双
  7. java mysql orm框架_JAVA-ORM框架整理➣Mybatis操作MySQL
  8. 【Git教程】入门安装客户端与服务器
  9. matlab2016b慢,Matlab 2016a/b中调用GPU速度巨慢的解决办法
  10. java 记牌_JAVA入门之简易扑克牌游戏
  11. 趣店PHP面经_腾讯助理PHP开发工程师外包岗面经
  12. 127.0.0.1 拒绝了我们的连接请求(解析格式数据)
  13. 这家SaaS公司估值50亿美元,竟然没有一个销售人员
  14. 免ROOT卸载手机自带软件详细教程
  15. java分发器 及(注解 + 反射机制)—————— 开开开山怪
  16. CRM IFD部署更换证书 - adfs证书更换
  17. error: fatal error: no input files
  18. 照片损坏只显示一半怎么修复?
  19. AST抽象语法树的基本思想
  20. 《HTML入门笔记--HTML常用标签》

热门文章

  1. algorithm头文件下函数整合
  2. 模拟按键——在Python使用pynput库
  3. Python接通图灵机器人
  4. 【Qt教程】1.10 - Qt5模态与非模态对话框( QDialog)
  5. Python:列表list对应项求和
  6. 深度剖析Java数据结构之迭代器(Iterator)
  7. ubuntu系统部署python3.6.4
  8. python规范模块和包
  9. 【转-Andrew_qian】stm32中断嵌套全攻略
  10. [bzoj1552][Cerc2007]robotic sort[bzoj3506][Cqoi2014]排序机械臂