Commit 932626aa authored by Adam Barth's avatar Adam Barth

Merge pull request #1504 from abarth/tab_shadow

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