diff --git a/examples/stocks/lib/stock_home.dart b/examples/stocks/lib/stock_home.dart index f79388757aa..9c914b71c04 100644 --- a/examples/stocks/lib/stock_home.dart +++ b/examples/stocks/lib/stock_home.dart @@ -126,22 +126,23 @@ class StockHomeState extends State { Widget buildToolBar() { return new ToolBar( - left: new IconButton( - icon: "navigation/menu", - onPressed: _showDrawer + level: 0, + left: new IconButton( + icon: "navigation/menu", + onPressed: _showDrawer + ), + center: new Text('Stocks'), + right: [ + new IconButton( + icon: "action/search", + onPressed: _handleSearchBegin ), - center: new Text('Stocks'), - right: [ - new IconButton( - icon: "action/search", - onPressed: _handleSearchBegin - ), - new IconButton( - icon: "navigation/more_vert", - onPressed: _handleMenuShow - ) - ] - ); + new IconButton( + icon: "navigation/more_vert", + onPressed: _handleMenuShow + ) + ] + ); } int selectedTabIndex = 0; diff --git a/sky/packages/sky/lib/src/material/constants.dart b/sky/packages/sky/lib/src/material/constants.dart index b106845c052..f33eb1a3cae 100644 --- a/sky/packages/sky/lib/src/material/constants.dart +++ b/sky/packages/sky/lib/src/material/constants.dart @@ -17,7 +17,8 @@ const double kToolBarHeight = 56.0; const double kMaterialDrawerHeight = 140.0; const double kScrollbarSize = 10.0; -const double kScrollbarFadeDuration = 250.0; -const double kScrollbarFadeDelay = 300.0; +const Duration kScrollbarFadeDuration = const Duration(milliseconds: 250); +const Duration kScrollbarFadeDelay = const Duration(milliseconds: 300); const double kFadingEdgeLength = 12.0; -const double kPressedStateDuration = 64.0; +const double kPressedStateDuration = 64.0; // units? +const Duration kThemeChangeDuration = const Duration(milliseconds: 200); diff --git a/sky/packages/sky/lib/src/widgets/material.dart b/sky/packages/sky/lib/src/widgets/material.dart index c14b29fa6fa..138994cfd75 100644 --- a/sky/packages/sky/lib/src/widgets/material.dart +++ b/sky/packages/sky/lib/src/widgets/material.dart @@ -67,7 +67,7 @@ class Material extends StatelessComponent { style: Theme.of(context).text.body1, child: new AnimatedContainer( curve: ease, - duration: const Duration(milliseconds: 200), + duration: kThemeChangeDuration, decoration: new BoxDecoration( backgroundColor: _getBackgroundColor(context), borderRadius: _kEdges[type], diff --git a/sky/packages/sky/lib/src/widgets/tabs.dart b/sky/packages/sky/lib/src/widgets/tabs.dart index e5dc0f7dce5..89367d9977d 100644 --- a/sky/packages/sky/lib/src/widgets/tabs.dart +++ b/sky/packages/sky/lib/src/widgets/tabs.dart @@ -11,6 +11,7 @@ import 'package:sky/gestures.dart'; import 'package:sky/material.dart'; import 'package:sky/painting.dart'; import 'package:sky/rendering.dart'; +import 'package:sky/src/widgets/animated_container.dart'; import 'package:sky/src/widgets/basic.dart'; import 'package:sky/src/widgets/framework.dart'; import 'package:sky/src/widgets/icon.dart'; @@ -51,15 +52,6 @@ class _RenderTabBar extends RenderBox with } } - Color _backgroundColor; - Color get backgroundColor => _backgroundColor; - void set backgroundColor(Color value) { - if (_backgroundColor != value) { - _backgroundColor = value; - markNeedsPaint(); - } - } - Color _indicatorColor; Color get indicatorColor => _indicatorColor; void set indicatorColor(Color value) { @@ -240,13 +232,6 @@ class _RenderTabBar extends RenderBox with } void paint(PaintingContext context, Offset offset) { - if (backgroundColor != null) { - double width = layoutWidths != null - ? layoutWidths.reduce((sum, width) => sum + width) - : size.width; - Rect rect = offset & new Size(width, size.height); - context.canvas.drawRect(rect, new Paint()..color = backgroundColor); - } int index = 0; RenderBox child = firstChild; while (child != null) { @@ -264,7 +249,6 @@ class _TabBarWrapper extends MultiChildRenderObjectWidget { Key key, List children, this.selectedIndex, - this.backgroundColor, this.indicatorColor, this.indicatorRect, this.textAndIcons, @@ -273,7 +257,6 @@ class _TabBarWrapper extends MultiChildRenderObjectWidget { }) : super(key: key, children: children); final int selectedIndex; - final Color backgroundColor; final Color indicatorColor; final Rect indicatorRect; final bool textAndIcons; @@ -288,7 +271,6 @@ class _TabBarWrapper extends MultiChildRenderObjectWidget { void updateRenderObject(_RenderTabBar renderObject, _TabBarWrapper oldWidget) { renderObject.selectedIndex = selectedIndex; - renderObject.backgroundColor = backgroundColor; renderObject.indicatorColor = indicatorColor; renderObject.indicatorRect = indicatorRect; renderObject.textAndIcons = textAndIcons; @@ -537,7 +519,7 @@ class _TabBarState extends ScrollableState { textAndIcons = true; } - Widget tabBar = new IconTheme( + Widget content = new IconTheme( data: new IconThemeData(color: iconThemeColor), child: new DefaultTextStyle( style: textStyle, @@ -548,7 +530,6 @@ class _TabBarState extends ScrollableState { return new _TabBarWrapper( children: tabs, selectedIndex: config.selectedIndex, - backgroundColor: backgroundColor, indicatorColor: indicatorColor, indicatorRect: _indicatorRect.value, textAndIcons: textAndIcons, @@ -560,16 +541,23 @@ class _TabBarState extends ScrollableState { ) ); - if (!config.isScrollable) - return tabBar; + if (config.isScrollable) { + content = new SizeObserver( + callback: _handleViewportSizeChanged, + child: new Viewport( + scrollDirection: ScrollDirection.horizontal, + scrollOffset: new Offset(scrollOffset, 0.0), + child: content + ) + ); + } - return new SizeObserver( - callback: _handleViewportSizeChanged, - child: new Viewport( - scrollDirection: ScrollDirection.horizontal, - scrollOffset: new Offset(scrollOffset, 0.0), - child: tabBar - ) + return new AnimatedContainer( + decoration: new BoxDecoration( + backgroundColor: backgroundColor + ), + duration: kThemeChangeDuration, + child: content ); } } @@ -601,18 +589,13 @@ class TabNavigator extends StatelessComponent { final TabSelectedIndexChanged onChanged; final bool isScrollable; - void _handleSelectedIndexChanged(int tabIndex) { - if (onChanged != null) - onChanged(tabIndex); - } - Widget build(BuildContext context) { assert(views != null && views.isNotEmpty); assert(selectedIndex >= 0 && selectedIndex < views.length); return new Column([ new TabBar( labels: views.map((view) => view.label), - onChanged: _handleSelectedIndexChanged, + onChanged: onChanged, selectedIndex: selectedIndex, isScrollable: isScrollable ), diff --git a/sky/packages/sky/lib/src/widgets/tool_bar.dart b/sky/packages/sky/lib/src/widgets/tool_bar.dart index 543531ae63b..b92c938efef 100644 --- a/sky/packages/sky/lib/src/widgets/tool_bar.dart +++ b/sky/packages/sky/lib/src/widgets/tool_bar.dart @@ -4,35 +4,36 @@ import 'package:sky/material.dart'; import 'package:sky/painting.dart'; +import 'package:sky/src/widgets/animated_container.dart'; import 'package:sky/src/widgets/basic.dart'; import 'package:sky/src/widgets/framework.dart'; import 'package:sky/src/widgets/icon.dart'; import 'package:sky/src/widgets/theme.dart'; -import 'package:sky/src/rendering/flex.dart'; class ToolBar extends StatelessComponent { - ToolBar({ Key key, this.left, this.center, this.right, + this.level: 2, this.backgroundColor }) : super(key: key); final Widget left; final Widget center; final List right; + final int level; final Color backgroundColor; Widget build(BuildContext context) { - Color toolbarColor = backgroundColor; + Color color = backgroundColor; IconThemeData iconThemeData; TextStyle centerStyle = Typography.white.title; TextStyle sideStyle = Typography.white.body1; - if (toolbarColor == null) { + if (color == null) { ThemeData themeData = Theme.of(context); - toolbarColor = themeData.primaryColor; + color = themeData.primaryColor; if (themeData.primaryColorBrightness == ThemeBrightness.light) { centerStyle = Typography.black.title; sideStyle = Typography.black.body2; @@ -44,11 +45,9 @@ class ToolBar extends StatelessComponent { List children = new List(); - // left children if (left != null) children.add(left); - // center children (left-aligned, but takes all remaining space) children.add( new Flexible( child: new Padding( @@ -58,11 +57,16 @@ class ToolBar extends StatelessComponent { ) ); - // right children if (right != null) children.addAll(right); - Widget content = new Container( + Widget content = new AnimatedContainer( + duration: kThemeChangeDuration, + padding: new EdgeDims.symmetric(horizontal: 8.0), + decoration: new BoxDecoration( + backgroundColor: color, + boxShadow: level == 0 ? null : shadows[2] + ), child: new DefaultTextStyle( style: sideStyle, child: new Column([ @@ -73,11 +77,6 @@ class ToolBar extends StatelessComponent { ], justifyContent: FlexJustifyContent.end ) - ), - padding: new EdgeDims.symmetric(horizontal: 8.0), - decoration: new BoxDecoration( - backgroundColor: toolbarColor, - boxShadow: shadows[2] ) );