blob: c14fca7beb9ad068bd40b98b6dc5e412f973de37 [file] [log] [blame]
// Copyright 2015 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:sky/widgets/theme.dart';
import 'package:sky/painting/text_style.dart';
import 'package:sky/rendering/flex.dart';
import 'package:sky/theme/shadows.dart';
import 'package:sky/theme/typography.dart' as typography;
import 'package:sky/theme/view_configuration.dart';
import 'package:sky/widgets/basic.dart';
import 'package:sky/widgets/default_text_style.dart';
import 'package:sky/widgets/icon.dart';
class ToolBar extends Component {
ToolBar({
Key key,
this.left,
this.center,
this.right,
this.backgroundColor
}) : super(key: key);
final Widget left;
final Widget center;
final List<Widget> right;
final Color backgroundColor;
Widget build() {
Color toolbarColor = backgroundColor;
IconThemeData iconThemeData;
TextStyle centerStyle = typography.white.title;
TextStyle sideStyle = typography.white.body1;
if (toolbarColor == null) {
ThemeData themeData = Theme.of(this);
toolbarColor = themeData.primaryColor;
if (themeData.primaryColorBrightness == ThemeBrightness.light) {
centerStyle = typography.black.title;
sideStyle = typography.black.body2;
iconThemeData = const IconThemeData(color: IconThemeColor.black);
} else {
iconThemeData = const IconThemeData(color: IconThemeColor.white);
}
}
List<Widget> children = new List<Widget>();
// left children
if (left != null)
children.add(left);
// center children (left-aligned, but takes all remaining space)
children.add(
new Flexible(
child: new Padding(
child: center != null ? new DefaultTextStyle(child: center, style: centerStyle) : null,
padding: new EdgeDims.only(left: 24.0)
)
)
);
// right children
if (right != null)
children.addAll(right);
Widget content = new Container(
child: new DefaultTextStyle(
style: sideStyle,
child: new Column([
new Container(
child: new Row(children),
height: kToolBarHeight
),
],
justifyContent: FlexJustifyContent.end
)
),
padding: new EdgeDims.symmetric(horizontal: 8.0),
decoration: new BoxDecoration(
backgroundColor: toolbarColor,
boxShadow: shadows[2]
)
);
if (iconThemeData != null)
content = new IconTheme(data: iconThemeData, child: content);
return content;
}
}