Commit e17c3ecc authored by Adam Barth's avatar Adam Barth

Automatically fill in the menu button when there's a drawer

Also, fill in a back arrow when we can go back.

Fixes #699
parent 5ad32f29
...@@ -36,9 +36,8 @@ class Field extends StatelessComponent { ...@@ -36,9 +36,8 @@ class Field extends StatelessComponent {
class AddressBookHome extends StatelessComponent { class AddressBookHome extends StatelessComponent {
Widget buildToolBar(BuildContext context) { Widget buildToolBar(BuildContext context) {
return new ToolBar( return new ToolBar(
left: new IconButton(icon: "navigation/arrow_back"), right: <Widget>[new IconButton(icon: "navigation/check")]
right: <Widget>[new IconButton(icon: "navigation/check")] );
);
} }
Widget buildFloatingActionButton(BuildContext context) { Widget buildFloatingActionButton(BuildContext context) {
......
...@@ -55,7 +55,6 @@ class FeedFragment extends StatefulComponent { ...@@ -55,7 +55,6 @@ class FeedFragment extends StatefulComponent {
class FeedFragmentState extends State<FeedFragment> { class FeedFragmentState extends State<FeedFragment> {
FitnessMode _fitnessMode = FitnessMode.feed; FitnessMode _fitnessMode = FitnessMode.feed;
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
void _handleFitnessModeChange(FitnessMode value) { void _handleFitnessModeChange(FitnessMode value) {
setState(() { setState(() {
...@@ -104,9 +103,6 @@ class FeedFragmentState extends State<FeedFragment> { ...@@ -104,9 +103,6 @@ class FeedFragmentState extends State<FeedFragment> {
Widget buildToolBar() { Widget buildToolBar() {
return new ToolBar( return new ToolBar(
left: new IconButton(
icon: "navigation/menu",
onPressed: () => _scaffoldKey.currentState?.openDrawer()),
center: new Text(fitnessModeTitle) center: new Text(fitnessModeTitle)
); );
} }
...@@ -207,7 +203,6 @@ class FeedFragmentState extends State<FeedFragment> { ...@@ -207,7 +203,6 @@ class FeedFragmentState extends State<FeedFragment> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new Scaffold( return new Scaffold(
key: _scaffoldKey,
toolBar: buildToolBar(), toolBar: buildToolBar(),
body: buildBody(), body: buildBody(),
floatingActionButton: buildFloatingActionButton(), floatingActionButton: buildFloatingActionButton(),
......
...@@ -26,10 +26,6 @@ class SettingsFragmentState extends State<SettingsFragment> { ...@@ -26,10 +26,6 @@ class SettingsFragmentState extends State<SettingsFragment> {
Widget buildToolBar() { Widget buildToolBar() {
return new ToolBar( return new ToolBar(
left: new IconButton(
icon: "navigation/arrow_back",
onPressed: () => Navigator.pop(context)
),
center: new Text('Settings') center: new Text('Settings')
); );
} }
......
...@@ -17,8 +17,6 @@ class GalleryPage extends StatefulComponent { ...@@ -17,8 +17,6 @@ class GalleryPage extends StatefulComponent {
} }
class _GalleryPageState extends State<GalleryPage> { class _GalleryPageState extends State<GalleryPage> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
Widget _buildDrawer() { Widget _buildDrawer() {
List<Widget> items = <Widget>[ List<Widget> items = <Widget>[
new DrawerHeader(child: new Text('Material demos')), new DrawerHeader(child: new Text('Material demos')),
...@@ -53,12 +51,7 @@ class _GalleryPageState extends State<GalleryPage> { ...@@ -53,12 +51,7 @@ class _GalleryPageState extends State<GalleryPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new Scaffold( return new Scaffold(
key: _scaffoldKey,
toolBar: new ToolBar( toolBar: new ToolBar(
left: new IconButton(
icon: 'navigation/menu',
onPressed: () { _scaffoldKey.currentState?.openDrawer(); }
),
center: new Text(config.active?.title ?? 'Material gallery'), center: new Text(config.active?.title ?? 'Material gallery'),
tabBar: _buildTabBar() tabBar: _buildTabBar()
), ),
......
...@@ -147,10 +147,6 @@ class StockHomeState extends State<StockHome> { ...@@ -147,10 +147,6 @@ class StockHomeState extends State<StockHome> {
Widget buildToolBar() { Widget buildToolBar() {
return new ToolBar( return new ToolBar(
elevation: 0, elevation: 0,
left: new IconButton(
icon: "navigation/menu",
onPressed: () => _scaffoldKey.currentState?.openDrawer()
),
center: new Text('Stocks'), center: new Text('Stocks'),
right: <Widget>[ right: <Widget>[
new IconButton( new IconButton(
...@@ -230,7 +226,7 @@ class StockHomeState extends State<StockHome> { ...@@ -230,7 +226,7 @@ class StockHomeState extends State<StockHome> {
Widget buildSearchBar() { Widget buildSearchBar() {
return new ToolBar( return new ToolBar(
left: new IconButton( left: new IconButton(
icon: "navigation/arrow_back", icon: 'navigation/arrow_back',
colorFilter: new ColorFilter.mode(Theme.of(context).accentColor, ui.TransferMode.srcATop), colorFilter: new ColorFilter.mode(Theme.of(context).accentColor, ui.TransferMode.srcATop),
onPressed: _handleSearchEnd onPressed: _handleSearchEnd
), ),
......
...@@ -70,10 +70,6 @@ class StockSettingsState extends State<StockSettings> { ...@@ -70,10 +70,6 @@ class StockSettingsState extends State<StockSettings> {
Widget buildToolBar(BuildContext context) { Widget buildToolBar(BuildContext context) {
return new ToolBar( return new ToolBar(
left: new IconButton(
icon: 'navigation/arrow_back',
onPressed: () => Navigator.pop(context)
),
center: new Text('Settings') center: new Text('Settings')
); );
} }
......
...@@ -55,12 +55,6 @@ class StockSymbolPage extends StatelessComponent { ...@@ -55,12 +55,6 @@ class StockSymbolPage extends StatelessComponent {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return new Scaffold( return new Scaffold(
toolBar: new ToolBar( toolBar: new ToolBar(
left: new IconButton(
icon: 'navigation/arrow_back',
onPressed: () {
Navigator.pop(context);
}
),
center: new Text(stock.name) center: new Text(stock.name)
), ),
body: new Block(<Widget>[ body: new Block(<Widget>[
......
...@@ -46,8 +46,6 @@ class CardCollectionState extends State<CardCollection> { ...@@ -46,8 +46,6 @@ class CardCollectionState extends State<CardCollection> {
InvalidatorCallback _invalidator; InvalidatorCallback _invalidator;
Size _cardCollectionSize = new Size(200.0, 200.0); Size _cardCollectionSize = new Size(200.0, 200.0);
GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
void _initVariableSizedCardModels() { void _initVariableSizedCardModels() {
List<double> cardHeights = <double>[ List<double> cardHeights = <double>[
48.0, 63.0, 82.0, 146.0, 60.0, 55.0, 84.0, 96.0, 50.0, 48.0, 63.0, 82.0, 146.0, 60.0, 55.0, 84.0, 96.0, 50.0,
...@@ -268,7 +266,6 @@ class CardCollectionState extends State<CardCollection> { ...@@ -268,7 +266,6 @@ class CardCollectionState extends State<CardCollection> {
Widget _buildToolBar() { Widget _buildToolBar() {
return new ToolBar( return new ToolBar(
left: new IconButton(icon: "navigation/menu", onPressed: () => _scaffoldKey.currentState?.openDrawer()),
right: <Widget>[ right: <Widget>[
new Text(_dismissDirectionText(_dismissDirection)) new Text(_dismissDirectionText(_dismissDirection))
], ],
......
...@@ -41,8 +41,6 @@ class PageableListAppState extends State<PageableListApp> { ...@@ -41,8 +41,6 @@ class PageableListAppState extends State<PageableListApp> {
ScrollDirection scrollDirection = ScrollDirection.horizontal; ScrollDirection scrollDirection = ScrollDirection.horizontal;
bool itemsWrap = false; bool itemsWrap = false;
GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
void updatePageSize(Size newSize) { void updatePageSize(Size newSize) {
setState(() { setState(() {
pageSize = newSize; pageSize = newSize;
...@@ -114,7 +112,6 @@ class PageableListAppState extends State<PageableListApp> { ...@@ -114,7 +112,6 @@ class PageableListAppState extends State<PageableListApp> {
Widget _buildToolBar() { Widget _buildToolBar() {
return new ToolBar( return new ToolBar(
left: new IconButton(icon: "navigation/menu", onPressed: () => _scaffoldKey.currentState?.openDrawer()),
center: new Text('PageableList'), center: new Text('PageableList'),
right: <Widget>[ right: <Widget>[
new Text(scrollDirection == ScrollDirection.horizontal ? "horizontal" : "vertical") new Text(scrollDirection == ScrollDirection.horizontal ? "horizontal" : "vertical")
......
...@@ -16,6 +16,7 @@ import 'material.dart'; ...@@ -16,6 +16,7 @@ import 'material.dart';
import 'snack_bar.dart'; import 'snack_bar.dart';
import 'tool_bar.dart'; import 'tool_bar.dart';
import 'drawer.dart'; import 'drawer.dart';
import 'icon_button.dart';
const double _kFloatingActionButtonMargin = 16.0; // TODO(hmuller): should be device dependent const double _kFloatingActionButtonMargin = 16.0; // TODO(hmuller): should be device dependent
...@@ -257,8 +258,37 @@ class ScaffoldState extends State<Scaffold> { ...@@ -257,8 +258,37 @@ class ScaffoldState extends State<Scaffold> {
children.add(new LayoutId(child: child, id: childId)); children.add(new LayoutId(child: child, id: childId));
} }
bool _shouldShowBackArrow;
Widget get _modifiedToolBar {
ToolBar toolBar = config.toolBar;
if (toolBar == null)
return null;
EdgeDims padding = new EdgeDims.only(top: ui.window.padding.top);
Widget left = toolBar.left;
if (left == null) {
if (config.drawer != null) {
left = new IconButton(
icon: 'navigation/menu',
onPressed: openDrawer
);
} else {
_shouldShowBackArrow ??= Navigator.canPop(context);
if (_shouldShowBackArrow) {
left = new IconButton(
icon: 'navigation/arrow_back',
onPressed: () => Navigator.pop(context)
);
}
}
}
return toolBar.copyWith(
padding: padding,
left: left
);
}
Widget build(BuildContext context) { Widget build(BuildContext context) {
final Widget paddedToolBar = config.toolBar?.withPadding(new EdgeDims.only(top: ui.window.padding.top));
final Widget materialBody = config.body != null ? new Material(child: config.body) : null; final Widget materialBody = config.body != null ? new Material(child: config.body) : null;
if (_snackBars.length > 0) { if (_snackBars.length > 0) {
...@@ -274,7 +304,7 @@ class ScaffoldState extends State<Scaffold> { ...@@ -274,7 +304,7 @@ class ScaffoldState extends State<Scaffold> {
final List<LayoutId>children = new List<LayoutId>(); final List<LayoutId>children = new List<LayoutId>();
_addIfNonNull(children, materialBody, _Child.body); _addIfNonNull(children, materialBody, _Child.body);
_addIfNonNull(children, paddedToolBar, _Child.toolBar); _addIfNonNull(children, _modifiedToolBar, _Child.toolBar);
if (_currentBottomSheet != null || if (_currentBottomSheet != null ||
(_dismissedBottomSheets != null && _dismissedBottomSheets.isNotEmpty)) { (_dismissedBottomSheets != null && _dismissedBottomSheets.isNotEmpty)) {
......
...@@ -36,18 +36,28 @@ class ToolBar extends StatelessComponent { ...@@ -36,18 +36,28 @@ class ToolBar extends StatelessComponent {
final TextTheme textTheme; final TextTheme textTheme;
final EdgeDims padding; final EdgeDims padding;
ToolBar withPadding(EdgeDims newPadding, { Key fallbackKey }) { ToolBar copyWith({
Key key,
Widget left,
Widget center,
List<Widget> right,
Widget bottom,
int elevation,
Color backgroundColor,
TextTheme textTheme,
EdgeDims padding
}) {
return new ToolBar( return new ToolBar(
key: key ?? fallbackKey, key: key ?? this.key,
left: left, left: left ?? this.left,
center: center, center: center ?? this.center,
right: right, right: right ?? this.right,
bottom: bottom, bottom: bottom ?? this.bottom,
tabBar: tabBar, tabBar: tabBar ?? this.tabBar,
elevation: elevation, elevation: elevation ?? this.elevation,
backgroundColor: backgroundColor, backgroundColor: backgroundColor ?? this.backgroundColor,
textTheme: textTheme, textTheme: textTheme ?? this.textTheme,
padding: newPadding padding: padding ?? this.padding
); );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment