// Copyright 2016 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'; import 'flexible_space_demo.dart'; class _BarGraphic extends StatelessWidget { _BarGraphic({ Key key, this.height, this.color, this.leftText, this.rightText: '' }) : super(key: key) { assert(height != null); assert(color != null); assert(leftText != null); } final double height; final Color color; final String leftText; final String rightText; @override Widget build(BuildContext context) { return new Container( height: height, width: 200.0, padding: const EdgeInsets.symmetric(horizontal: 16.0), decoration: new BoxDecoration(backgroundColor: color), child: new DefaultTextStyle( style: Theme.of(context).textTheme.body1.copyWith(color: Colors.white), child: new Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ new Text(leftText), new Text(rightText) ] ) ) ); } } class _StatusBarGraphic extends _BarGraphic { _StatusBarGraphic() : super( height: 24.0, color: Colors.green[400], leftText: 'Status Bar', rightText: '24dp' ); } class _AppBarGraphic extends _BarGraphic { _AppBarGraphic() : super( height: 48.0, color: Colors.blue[400], leftText: 'Tool Bar', rightText: '48dp' ); } class _TabBarGraphic extends _BarGraphic { _TabBarGraphic() : super( height: 48.0, color: Colors.purple[400], leftText: 'Tab Bar', rightText: '56dp' ); } class _FlexibleSpaceGraphic extends _BarGraphic { _FlexibleSpaceGraphic() : super( height: 128.0, color: Colors.pink[400], leftText: 'Flexible Space' ); } class _TechniqueItem extends StatelessWidget { _TechniqueItem({ this.titleText, this.barGraphics, this.builder }); final String titleText; final List<Widget> barGraphics; final WidgetBuilder builder; void showDemo(BuildContext context) { Navigator.push(context, new MaterialPageRoute<Null>(builder: builder)); } @override Widget build(BuildContext context) { return new Card( child: new InkWell( onTap: () { showDemo(context); }, child: new Padding( padding: const EdgeInsets.all(16.0), child: new Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children :<Widget>[ new Text(titleText), new Column(children: barGraphics) ] ) ) ) ); } } const String _introText = "An AppBar is a combination of a ToolBar and a TabBar or a flexible space " "Widget that is managed by the Scaffold. The Scaffold pads the ToolBar so that " "it appears behind the device's status bar. When a flexible space Widget is " "specified it is stacked on top of the ToolBar."; class ScrollingTechniquesDemo extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar(title: new Text('Scrolling techniques')), body: new Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0), child: new Block( children: <Widget>[ new Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 32.0), child: new Text(_introText, style: Theme.of(context).textTheme.caption) ), new _TechniqueItem( builder: (BuildContext context) => new FlexibleSpaceDemo(), titleText: 'Standard', barGraphics: <Widget>[ new _StatusBarGraphic(), new _AppBarGraphic() ] ), new _TechniqueItem( titleText: 'Tabs', builder: (BuildContext context) => new FlexibleSpaceDemo(), barGraphics: <Widget>[ new _StatusBarGraphic(), new _AppBarGraphic(), new _TabBarGraphic() ] ), new _TechniqueItem( titleText: 'Flexible', builder: (BuildContext context) => new FlexibleSpaceDemo(), barGraphics: <Widget>[ new _StatusBarGraphic(), new _AppBarGraphic(), new _FlexibleSpaceGraphic() ] ) ] ) ) ); } }