一个典型的AppBar,带有标题、操作和溢出的下拉菜单。
一个应用程序有六种操作选项,选项由图标和标题组成。两个最常用的选项可用作操作按钮,其余选项包含在溢出下拉菜单中。
通过flutter create命令创建一个新项目,并用下面的代码替换lib/main.dart的内容来尝试运行一下。
// Copyright 2017 The Chromium Authors. All rights reserved.// Use of this source code is governed by a BSD-style license that can be// found in the LICENSE file.import 'package:flutter/material.dart';// This app is a stateful, it tracks the user's current choice.class BasicAppBarSample extends StatefulWidget {@override_BasicAppBarSampleState createState() => new _BasicAppBarSampleState();}class _BasicAppBarSampleState extends State<BasicAppBarSample> {Choice _selectedChoice = choices[0]; // The app's "state".void _select(Choice choice) {setState(() { // Causes the app to rebuild with the new _selectedChoice._selectedChoice = choice;});}@overrideWidget build(BuildContext context) {return new MaterialApp(home: new Scaffold(appBar: new AppBar(title: const Text('Basic AppBar'),actions: <Widget>[new IconButton( // action buttonicon: new Icon(choices[0].icon),onPressed: () { _select(choices[0]); },),new IconButton( // action buttonicon: new Icon(choices[1].icon),onPressed: () { _select(choices[1]); },),new PopupMenuButton<Choice>( // overflow menuonSelected: _select,itemBuilder: (BuildContext context) {return choices.skip(2).map((Choice choice) {return new PopupMenuItem<Choice>(value: choice,child: new Text(choice.title),);}).toList();},),],),body: new Padding(padding: const EdgeInsets.all(16.0),child: new ChoiceCard(choice: _selectedChoice),),),);}}class Choice {const Choice({ this.title, this.icon });final String title;final IconData icon;}const List<Choice> choices = const <Choice>[const Choice(title: 'Car', icon: Icons.directions_car),const Choice(title: 'Bicycle', icon: Icons.directions_bike),const Choice(title: 'Boat', icon: Icons.directions_boat),const Choice(title: 'Bus', icon: Icons.directions_bus),const Choice(title: 'Train', icon: Icons.directions_railway),const Choice(title: 'Walk', icon: Icons.directions_walk),];class ChoiceCard extends StatelessWidget {const ChoiceCard({ Key key, this.choice }) : super(key: key);final Choice choice;@overrideWidget build(BuildContext context) {final TextStyle textStyle = Theme.of(context).textTheme.display1;return new Card(color: Colors.white,child: new Center(child: new Column(mainAxisSize: MainAxisSize.min,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[new Icon(choice.icon, size: 128.0, color: textStyle.color),new Text(choice.title, style: textStyle),],),),);}}void main() {runApp(new BasicAppBarSample());}
也可以看看:
- Material Design 规范中的布局结构部分:
- 本示例源代码 examples/catalog/lib/basic_app_bar.dart.
