From 89a09822bf8d36274a1dc25675d57f91de872b69 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Mon, 5 Oct 2015 22:28:09 -0700 Subject: [PATCH] Simplify Scaffold Rather than using a custom render object, we can just use a Stack. --- examples/address_book/lib/main.dart | 2 +- examples/demo_launcher/lib/main.dart | 2 +- examples/fitness/lib/feed.dart | 2 +- examples/fitness/lib/meal.dart | 2 +- examples/fitness/lib/measurement.dart | 2 +- examples/fitness/lib/settings.dart | 2 +- examples/mine_digger/lib/main.dart | 2 +- examples/stocks/lib/stock_home.dart | 2 +- examples/stocks/lib/stock_settings.dart | 2 +- examples/stocks/lib/stock_symbol_viewer.dart | 2 +- examples/widgets/card_collection.dart | 2 +- examples/widgets/date_picker.dart | 2 +- examples/widgets/drag_and_drop.dart | 2 +- examples/widgets/ensure_visible.dart | 2 +- examples/widgets/overlay_geometry.dart | 2 +- examples/widgets/pageable_list.dart | 2 +- examples/widgets/progress_indicator.dart | 2 +- examples/widgets/scale.dart | 2 +- examples/widgets/sector.dart | 2 +- examples/widgets/styled_text.dart | 2 +- examples/widgets/tabs.dart | 2 +- .../flutter/lib/src/material/constants.dart | 1 + .../flutter/lib/src/widgets/scaffold.dart | 291 ++++-------------- .../flutter/lib/src/widgets/snack_bar.dart | 7 +- 24 files changed, 91 insertions(+), 250 deletions(-) diff --git a/examples/address_book/lib/main.dart b/examples/address_book/lib/main.dart index 26c0e4aefaf..0c66e80f3ec 100644 --- a/examples/address_book/lib/main.dart +++ b/examples/address_book/lib/main.dart @@ -81,7 +81,7 @@ class AddressBookHome extends StatelessComponent { Widget build(BuildContext context) { return new Scaffold( - toolbar: buildToolBar(context), + toolBar: buildToolBar(context), body: buildBody(context), floatingActionButton: buildFloatingActionButton(context) ); diff --git a/examples/demo_launcher/lib/main.dart b/examples/demo_launcher/lib/main.dart index 2bbef2362be..5f466f40024 100644 --- a/examples/demo_launcher/lib/main.dart +++ b/examples/demo_launcher/lib/main.dart @@ -192,7 +192,7 @@ final ThemeData _theme = new ThemeData( class DemoHome extends StatelessComponent { Widget build(BuildContext context) { return new Scaffold( - toolbar: new ToolBar(center: new Text('Sky Demos')), + toolBar: new ToolBar(center: new Text('Sky Demos')), body: new Material( type: MaterialType.canvas, child: new DemoList() diff --git a/examples/fitness/lib/feed.dart b/examples/fitness/lib/feed.dart index eb78b298126..cf075f0f8ae 100644 --- a/examples/fitness/lib/feed.dart +++ b/examples/fitness/lib/feed.dart @@ -219,7 +219,7 @@ class FeedFragmentState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: buildToolBar(), + toolBar: buildToolBar(), body: buildBody(), snackBar: new Placeholder(key: _snackBarPlaceholderKey), floatingActionButton: buildFloatingActionButton() diff --git a/examples/fitness/lib/meal.dart b/examples/fitness/lib/meal.dart index e66fb9f9001..f7e94f06abb 100644 --- a/examples/fitness/lib/meal.dart +++ b/examples/fitness/lib/meal.dart @@ -105,7 +105,7 @@ class MealFragmentState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: buildToolBar(), + toolBar: buildToolBar(), body: buildBody() ); } diff --git a/examples/fitness/lib/measurement.dart b/examples/fitness/lib/measurement.dart index 975d2766c10..5adbca1f69a 100644 --- a/examples/fitness/lib/measurement.dart +++ b/examples/fitness/lib/measurement.dart @@ -200,7 +200,7 @@ class MeasurementFragmentState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: buildToolBar(), + toolBar: buildToolBar(), body: buildBody(context), snackBar: new Placeholder(key: _snackBarPlaceholderKey) ); diff --git a/examples/fitness/lib/settings.dart b/examples/fitness/lib/settings.dart index 27cb9a0bfb1..9831818340a 100644 --- a/examples/fitness/lib/settings.dart +++ b/examples/fitness/lib/settings.dart @@ -122,7 +122,7 @@ class SettingsFragmentState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: buildToolBar(), + toolBar: buildToolBar(), body: buildSettingsPane(context) ); } diff --git a/examples/mine_digger/lib/main.dart b/examples/mine_digger/lib/main.dart index 4c78fe30c6a..112d5a3b801 100644 --- a/examples/mine_digger/lib/main.dart +++ b/examples/mine_digger/lib/main.dart @@ -182,7 +182,7 @@ class MineDiggerState extends State { return new Title( title: 'Mine Digger', child: new Scaffold( - toolbar: buildToolBar(context), + toolBar: buildToolBar(context), body: new Container( child: new Center(child: board), decoration: new BoxDecoration(backgroundColor: Colors.grey[50]) diff --git a/examples/stocks/lib/stock_home.dart b/examples/stocks/lib/stock_home.dart index f79388757aa..cda963b0f7f 100644 --- a/examples/stocks/lib/stock_home.dart +++ b/examples/stocks/lib/stock_home.dart @@ -237,7 +237,7 @@ class StockHomeState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: _isSearching ? buildSearchBar() : buildToolBar(), + toolBar: _isSearching ? buildSearchBar() : buildToolBar(), body: buildTabNavigator(), snackBar: new Placeholder(key: _snackBarPlaceholderKey), floatingActionButton: buildFloatingActionButton() diff --git a/examples/stocks/lib/stock_settings.dart b/examples/stocks/lib/stock_settings.dart index 269afe19a61..3686a737fff 100644 --- a/examples/stocks/lib/stock_settings.dart +++ b/examples/stocks/lib/stock_settings.dart @@ -119,7 +119,7 @@ class StockSettingsState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: buildToolBar(context), + toolBar: buildToolBar(context), body: buildSettingsPane(context) ); } diff --git a/examples/stocks/lib/stock_symbol_viewer.dart b/examples/stocks/lib/stock_symbol_viewer.dart index ab57b1558ed..f2407c08208 100644 --- a/examples/stocks/lib/stock_symbol_viewer.dart +++ b/examples/stocks/lib/stock_symbol_viewer.dart @@ -25,7 +25,7 @@ class StockSymbolViewerState extends State { TextStyle headings = Theme.of(context).text.body2; return new Scaffold( - toolbar: new ToolBar( + toolBar: new ToolBar( left: new IconButton( icon: 'navigation/arrow_back', onPressed: config.navigator.pop diff --git a/examples/widgets/card_collection.dart b/examples/widgets/card_collection.dart index fb0458b0ab7..359b3db2269 100644 --- a/examples/widgets/card_collection.dart +++ b/examples/widgets/card_collection.dart @@ -342,7 +342,7 @@ class CardCollectionState extends State { } return new Scaffold( - toolbar: buildToolBar(), + toolBar: buildToolBar(), body: body ); } diff --git a/examples/widgets/date_picker.dart b/examples/widgets/date_picker.dart index 5e64a4a87bb..48d8e30313d 100644 --- a/examples/widgets/date_picker.dart +++ b/examples/widgets/date_picker.dart @@ -34,7 +34,7 @@ class DatePickerDemoState extends State { ), child: new Stack([ new Scaffold( - toolbar: new ToolBar(center: new Text("Date Picker")), + toolBar: new ToolBar(center: new Text("Date Picker")), body: new Material( child: new Row( [new Text(_dateTime.toString())], diff --git a/examples/widgets/drag_and_drop.dart b/examples/widgets/drag_and_drop.dart index f35934c3af2..8a7829dc79d 100644 --- a/examples/widgets/drag_and_drop.dart +++ b/examples/widgets/drag_and_drop.dart @@ -101,7 +101,7 @@ class DragAndDropApp extends StatefulComponent { class DragAndDropAppState extends State { Widget build(BuildContext context) { return new Scaffold( - toolbar: new ToolBar( + toolBar: new ToolBar( center: new Text('Drag and Drop Flutter Demo') ), body: new Material( diff --git a/examples/widgets/ensure_visible.dart b/examples/widgets/ensure_visible.dart index 4bb5d94f8ca..ddd1891953b 100644 --- a/examples/widgets/ensure_visible.dart +++ b/examples/widgets/ensure_visible.dart @@ -89,7 +89,7 @@ class EnsureVisibleApp extends App { child: new Title( title: 'Cards', child: new Scaffold( - toolbar: new ToolBar(center: new Text('Tap a Card')), + toolBar: new ToolBar(center: new Text('Tap a Card')), body: cardCollection ) ) diff --git a/examples/widgets/overlay_geometry.dart b/examples/widgets/overlay_geometry.dart index 6aa66e91ed3..cdbc56d2536 100644 --- a/examples/widgets/overlay_geometry.dart +++ b/examples/widgets/overlay_geometry.dart @@ -138,7 +138,7 @@ class OverlayGeometryAppState extends State { Widget build(BuildContext context) { List layers = [ new Scaffold( - toolbar: new ToolBar(center: new Text('Tap a Card')), + toolBar: new ToolBar(center: new Text('Tap a Card')), body: new Container( padding: const EdgeDims.symmetric(vertical: 12.0, horizontal: 8.0), decoration: new BoxDecoration(backgroundColor: Theme.of(context).primarySwatch[50]), diff --git a/examples/widgets/pageable_list.dart b/examples/widgets/pageable_list.dart index e68ebbc87ad..4ad845dc223 100644 --- a/examples/widgets/pageable_list.dart +++ b/examples/widgets/pageable_list.dart @@ -149,7 +149,7 @@ class PageableListAppState extends State { return new IconTheme( data: const IconThemeData(color: IconThemeColor.white), child: new Scaffold( - toolbar: buildToolBar(), + toolBar: buildToolBar(), body: buildBody(context) ) ); diff --git a/examples/widgets/progress_indicator.dart b/examples/widgets/progress_indicator.dart index b4b2b410a1a..a83de62df1c 100644 --- a/examples/widgets/progress_indicator.dart +++ b/examples/widgets/progress_indicator.dart @@ -103,7 +103,7 @@ class ProgressIndicatorAppState extends State { child: new Title( title: 'Progress Indicators', child: new Scaffold( - toolbar: new ToolBar(center: new Text('Progress Indicators')), + toolBar: new ToolBar(center: new Text('Progress Indicators')), body: new DefaultTextStyle( style: Theme.of(context).text.title, child: body diff --git a/examples/widgets/scale.dart b/examples/widgets/scale.dart index 679de951e47..626547010d4 100644 --- a/examples/widgets/scale.dart +++ b/examples/widgets/scale.dart @@ -59,7 +59,7 @@ class ScaleAppState extends State { return new Theme( data: new ThemeData.dark(), child: new Scaffold( - toolbar: new ToolBar( + toolBar: new ToolBar( center: new Text('Scale Demo')), body: new Material( type: MaterialType.canvas, diff --git a/examples/widgets/sector.dart b/examples/widgets/sector.dart index c8a01dbae7c..d32d39944ad 100644 --- a/examples/widgets/sector.dart +++ b/examples/widgets/sector.dart @@ -124,7 +124,7 @@ class SectorApp extends App { child: new Title( title: 'Sector Layout', child: new Scaffold( - toolbar: new ToolBar( + toolBar: new ToolBar( center: new Text('Sector Layout in a Widget Tree') ), body: buildBody() diff --git a/examples/widgets/styled_text.dart b/examples/widgets/styled_text.dart index 94197cb6a13..a21da29b119 100644 --- a/examples/widgets/styled_text.dart +++ b/examples/widgets/styled_text.dart @@ -106,7 +106,7 @@ HAL: This mission is too important for me to allow you to jeopardize it.'''; color: Colors.grey[50], child: interactiveBody ), - toolbar: new ToolBar( + toolBar: new ToolBar( center: new Text('Hal and Dave') ) ) diff --git a/examples/widgets/tabs.dart b/examples/widgets/tabs.dart index 0b36e8ae395..540b3327f96 100644 --- a/examples/widgets/tabs.dart +++ b/examples/widgets/tabs.dart @@ -131,7 +131,7 @@ class TabbedNavigatorAppState extends State { ); return new Scaffold( - toolbar: toolbar, + toolBar: toolbar, body: tabNavigator ); } diff --git a/packages/flutter/lib/src/material/constants.dart b/packages/flutter/lib/src/material/constants.dart index b106845c052..0ec7112ce7c 100644 --- a/packages/flutter/lib/src/material/constants.dart +++ b/packages/flutter/lib/src/material/constants.dart @@ -14,6 +14,7 @@ const double kStatusBarHeight = 50.0; // Mobile Portrait: 56dp // Tablet/Desktop: 64dp const double kToolBarHeight = 56.0; +const double kSnackBarHeight = 52.0; const double kMaterialDrawerHeight = 140.0; const double kScrollbarSize = 10.0; diff --git a/packages/flutter/lib/src/widgets/scaffold.dart b/packages/flutter/lib/src/widgets/scaffold.dart index bff2d0d8f17..bd02c3c4cad 100644 --- a/packages/flutter/lib/src/widgets/scaffold.dart +++ b/packages/flutter/lib/src/widgets/scaffold.dart @@ -6,247 +6,88 @@ import 'dart:sky' as sky; import 'package:sky/material.dart'; import 'package:sky/rendering.dart'; +import 'package:sky/src/widgets/basic.dart'; import 'package:sky/src/widgets/framework.dart'; -// Slots are painted in this order and hit tested in reverse of this order -enum _ScaffoldSlots { - body, - statusBar, - toolbar, - snackBar, - floatingActionButton, - drawer -} - -class _RenderScaffold extends RenderBox { - - _RenderScaffold({ - RenderBox body, - RenderBox statusBar, - RenderBox toolbar, - RenderBox snackBar, - RenderBox floatingActionButton, - RenderBox drawer - }) { - this[_ScaffoldSlots.body] = body; - this[_ScaffoldSlots.statusBar] = statusBar; - this[_ScaffoldSlots.toolbar] = toolbar; - this[_ScaffoldSlots.snackBar] = snackBar; - this[_ScaffoldSlots.floatingActionButton] = floatingActionButton; - this[_ScaffoldSlots.drawer] = drawer; - } - - Map<_ScaffoldSlots, RenderBox> _slots = new Map<_ScaffoldSlots, RenderBox>(); - RenderBox operator[] (_ScaffoldSlots slot) => _slots[slot]; - void operator[]= (_ScaffoldSlots slot, RenderBox value) { - RenderBox old = _slots[slot]; - if (old == value) - return; - if (old != null) - dropChild(old); - if (value == null) { - _slots.remove(slot); - } else { - _slots[slot] = value; - adoptChild(value); - } - markNeedsLayout(); - } - - void attachChildren() { - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - RenderBox box = _slots[slot]; - if (box != null) - box.attach(); - } - } - - void detachChildren() { - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - RenderBox box = _slots[slot]; - if (box != null) - box.detach(); - } - } - - void visitChildren(RenderObjectVisitor visitor) { - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - RenderBox box = _slots[slot]; - if (box != null) - visitor(box); - } - } - - _ScaffoldSlots remove(RenderBox child) { - assert(child != null); - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - if (_slots[slot] == child) { - this[slot] = null; - return slot; - } - } - return null; - } - - bool get sizedByParent => true; - void performResize() { - size = constraints.biggest; - assert(!size.isInfinite); - } - - // TODO(eseidel): These change based on device size! - // http://www.google.com/design/spec/layout/metrics-keylines.html#metrics-keylines-keylines-spacing - static const kButtonX = 16.0; // left from right edge of body - static const kButtonY = 16.0; // up from bottom edge of body - - void performLayout() { - double bodyHeight = size.height; - double bodyPosition = 0.0; - double fabOffset = 0.0; - if (_slots[_ScaffoldSlots.statusBar] != null) { - RenderBox statusBar = _slots[_ScaffoldSlots.statusBar]; - statusBar.layout(new BoxConstraints.tight(new Size(size.width, kStatusBarHeight))); - assert(statusBar.parentData is BoxParentData); - statusBar.parentData.position = new Point(0.0, size.height - kStatusBarHeight); - bodyHeight -= kStatusBarHeight; - } - if (_slots[_ScaffoldSlots.toolbar] != null) { - RenderBox toolbar = _slots[_ScaffoldSlots.toolbar]; - double toolbarHeight = kToolBarHeight + sky.view.paddingTop; - toolbar.layout(new BoxConstraints.tight(new Size(size.width, toolbarHeight))); - assert(toolbar.parentData is BoxParentData); - toolbar.parentData.position = Point.origin; - bodyPosition += toolbarHeight; - bodyHeight -= toolbarHeight; - } - if (_slots[_ScaffoldSlots.body] != null) { - RenderBox body = _slots[_ScaffoldSlots.body]; - body.layout(new BoxConstraints.tight(new Size(size.width, bodyHeight))); - assert(body.parentData is BoxParentData); - body.parentData.position = new Point(0.0, bodyPosition); - } - if (_slots[_ScaffoldSlots.snackBar] != null) { - RenderBox snackBar = _slots[_ScaffoldSlots.snackBar]; - // TODO(jackson): On tablet/desktop, minWidth = 288, maxWidth = 568 - snackBar.layout( - new BoxConstraints(minWidth: size.width, maxWidth: size.width, minHeight: 0.0, maxHeight: bodyHeight), - parentUsesSize: true - ); - assert(snackBar.parentData is BoxParentData); - snackBar.parentData.position = new Point(0.0, bodyPosition + bodyHeight - snackBar.size.height); - fabOffset += snackBar.size.height; - } - if (_slots[_ScaffoldSlots.floatingActionButton] != null) { - RenderBox floatingActionButton = _slots[_ScaffoldSlots.floatingActionButton]; - Size area = new Size(size.width - kButtonX, size.height - kButtonY); - floatingActionButton.layout(new BoxConstraints.loose(area), parentUsesSize: true); - assert(floatingActionButton.parentData is BoxParentData); - floatingActionButton.parentData.position = (area - floatingActionButton.size).toPoint() + new Offset(0.0, -fabOffset); - } - if (_slots[_ScaffoldSlots.drawer] != null) { - RenderBox drawer = _slots[_ScaffoldSlots.drawer]; - drawer.layout(new BoxConstraints(minWidth: 0.0, maxWidth: size.width, minHeight: size.height, maxHeight: size.height)); - assert(drawer.parentData is BoxParentData); - drawer.parentData.position = Point.origin; - } - } - - void paint(PaintingContext context, Offset offset) { - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - RenderBox box = _slots[slot]; - if (box != null) { - assert(box.parentData is BoxParentData); - context.paintChild(box, box.parentData.position + offset); - } - } - } - - void hitTestChildren(HitTestResult result, { Point position }) { - for (_ScaffoldSlots slot in _ScaffoldSlots.values.reversed) { - RenderBox box = _slots[slot]; - if (box != null) { - assert(box.parentData is BoxParentData); - if (box.hitTest(result, position: (position - box.parentData.position).toPoint())) - return; - } - } - } - - String debugDescribeChildren(String prefix) { - return _slots.keys.map((slot) => '${prefix}${slot}: ${_slots[slot].toStringDeep(prefix)}').join(); - } -} - -class Scaffold extends RenderObjectWidget { +class Scaffold extends StatelessComponent { Scaffold({ Key key, - Widget body, - Widget statusBar, - Widget toolbar, - Widget snackBar, - Widget floatingActionButton, - Widget drawer - }) : super(key: key) { - _children[_ScaffoldSlots.body] = body; - _children[_ScaffoldSlots.statusBar] = statusBar; - _children[_ScaffoldSlots.toolbar] = toolbar; - _children[_ScaffoldSlots.snackBar] = snackBar; - _children[_ScaffoldSlots.floatingActionButton] = floatingActionButton; - _children[_ScaffoldSlots.drawer] = drawer; - } + this.body, + this.statusBar, + this.toolBar, + this.snackBar, + this.floatingActionButton + }) : super(key: key); - final Map<_ScaffoldSlots, Widget> _children = new Map<_ScaffoldSlots, Widget>(); + final Widget body; + final Widget statusBar; + final Widget toolBar; + final Widget snackBar; + final Widget floatingActionButton; - _RenderScaffold createRenderObject() => new _RenderScaffold(); + Widget build(BuildContext context) { + double toolBarHeight = 0.0; + if (toolBar != null) + toolBarHeight = kToolBarHeight + sky.view.paddingTop; - _ScaffoldElement createElement() => new _ScaffoldElement(this); -} + double statusBarHeight = 0.0; + if (statusBar != null) + statusBarHeight = kStatusBarHeight; -class _ScaffoldElement extends RenderObjectElement { - _ScaffoldElement(Scaffold widget) : super(widget); + List children = []; - Map<_ScaffoldSlots, Element> _children; - - _RenderScaffold get renderObject => super.renderObject; - - void visitChildren(ElementVisitor visitor) { - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - Element element = _children[slot]; - if (element != null) - visitor(element); + if (body != null) { + children.add(new Positioned( + top: toolBarHeight, right: 0.0, bottom: statusBarHeight, left: 0.0, + child: body + )); } - } - void mount(Element parent, dynamic newSlot) { - super.mount(parent, newSlot); - _children = new Map<_ScaffoldSlots, Element>(); - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - Element newChild = widget._children[slot]?.createElement(); - _children[slot] = newChild; - newChild?.mount(this, slot); + if (statusBar != null) { + children.add(new Positioned( + right: 0.0, bottom: 0.0, left: 0.0, + child: new SizedBox( + height: statusBarHeight, + child: statusBar + ) + )); } - } - void update(Scaffold newWidget) { - super.update(newWidget); - assert(widget == newWidget); - for (_ScaffoldSlots slot in _ScaffoldSlots.values) { - _children[slot] = updateChild(_children[slot], widget._children[slot], slot); - assert((_children[slot] == null) == (widget._children[slot] == null)); + if (toolBar != null) { + children.add(new Positioned( + top: 0.0, right: 0.0, left: 0.0, + child: new SizedBox( + height: toolBarHeight, + child: toolBar + ) + )); } - } - void insertChildRenderObject(RenderObject child, _ScaffoldSlots slot) { - renderObject[slot] = child; - } + if (snackBar != null || floatingActionButton != null) { + List floatingChildren = []; - void moveChildRenderObject(RenderObject child, dynamic slot) { - removeChildRenderObject(child); - insertChildRenderObject(child, slot); - } + if (floatingActionButton != null) { + floatingChildren.add(new Padding( + // TODO(eseidel): These change based on device size! + padding: const EdgeDims.only(right: 16.0, bottom: 16.0), + child: floatingActionButton + )); + } - void removeChildRenderObject(RenderObject child) { - assert(renderObject == child.parent); - renderObject.remove(child); + // TODO(jackson): On tablet/desktop, minWidth = 288, maxWidth = 568 + if (snackBar != null) { + floatingChildren.add(new ConstrainedBox( + constraints: const BoxConstraints(maxHeight: kSnackBarHeight), + child: snackBar + )); + } + + children.add(new Positioned( + right: 0.0, bottom: statusBarHeight, left: 0.0, + child: new Column(floatingChildren, alignItems: FlexAlignItems.end) + )); + } + + return new Stack(children); } } diff --git a/packages/flutter/lib/src/widgets/snack_bar.dart b/packages/flutter/lib/src/widgets/snack_bar.dart index cf2d55d24fb..3db720df0f2 100644 --- a/packages/flutter/lib/src/widgets/snack_bar.dart +++ b/packages/flutter/lib/src/widgets/snack_bar.dart @@ -15,7 +15,6 @@ import 'package:sky/src/widgets/placeholder.dart'; import 'package:sky/src/widgets/theme.dart'; import 'package:sky/src/widgets/transitions.dart'; -const double _kSnackHeight = 52.0; const double _kSideMargins = 24.0; const double _kVerticalPadding = 14.0; const Color _kSnackBackground = const Color(0xFF323232); @@ -72,14 +71,14 @@ class SnackBar extends StatelessComponent { performance: performance, height: new AnimatedValue( 0.0, - end: _kSnackHeight, + end: kSnackBarHeight, curve: easeIn, reverseCurve: easeOut ), child: new ClipRect( child: new OverflowBox( - minHeight: _kSnackHeight, - maxHeight: _kSnackHeight, + minHeight: kSnackBarHeight, + maxHeight: kSnackBarHeight, child: new Material( level: 2, color: _kSnackBackground,