简介
Scaffold 实现了基本的Material Design布局结构
在Material设计中定义的单个界面上的各种布局元素,在 Scaffold 中都有支持,比如 左边栏(Drawers)、snack bars、以及 bottom sheets。
基本用法
Scaffold 有下面几个主要属性:
appBar:显示在界面顶部的一个 AppBar
body:当前界面所显示的主要内容 Widget
floatingActionButton:Material设计中所定义的 FAB,界面的主要功能按钮
persistentFooterButtons:固定在下方显示的按钮,比如对话框下方的确定、取消按钮
drawer:侧边栏控件
backgroundColor: 内容的背景颜色,默认使用的是 ThemeData.scaffoldBackgroundColor 的值
bottomNavigationBar: 显示在页面底部的导航栏
resizeToAvoidBottomPadding:控制界面内容 body 是否重新布局来避免底部被覆盖了,比如当键盘显示的时候,重新布局避免被键盘盖住内容。默认值为 true。
实例演示
import 'package:flutter/material.dart';
class ScaffoldDemo extends StatefulWidget {
const ScaffoldDemo() : super();
@override
State<StatefulWidget> createState() => _ScaffoldDemo();
}
/*
* AppBar 默认的实例,有状态
* */
class _ScaffoldDemo extends State with SingleTickerProviderStateMixin {
int count = 0;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// 如果省略了 leading ,但 AppBar 在带有 Drawer 的 Scaffold 中,则会插入一个 button 以打开 Drawer。
// 否则,如果最近的 Navigator 具有任何先前的 router ,则会插入BackButton。
// 这种行为可以通过设置来关闭automaticallyImplyLeading 为false。在这种情况下,空的 leading widget 将导致 middle/title widget 拉伸开始。
return SizedBox(
height: 500,
child: Scaffold(
appBar: AppBar(
title: Text('Sample Code'),
),
body: Center(
child: Text('You have pressed the button times. $count'),
),
floatingActionButtonLocation:
FloatingActionButtonLocation.centerDocked,
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() {
count += 1;
}),
tooltip: 'Increment Counter',
child: Icon(Icons.add),
),
));
}
}