Chromium Code Reviews| Index: sky/examples/stocks2/lib/stock_settings.dart |
| diff --git a/sky/examples/stocks2/lib/stock_settings.dart b/sky/examples/stocks2/lib/stock_settings.dart |
| index 4d3977aa4daa793befe10fed62959f380899c9d0..206a94020db93f1f97038640bb6ebe8cb7c24264 100644 |
| --- a/sky/examples/stocks2/lib/stock_settings.dart |
| +++ b/sky/examples/stocks2/lib/stock_settings.dart |
| @@ -5,6 +5,8 @@ |
| import 'package:sky/theme/colors.dart' as colors; |
| import 'package:sky/widgets/basic.dart'; |
| import 'package:sky/widgets/checkbox.dart'; |
| +import 'package:sky/widgets/flat_button.dart'; |
| +import 'package:sky/widgets/dialog.dart'; |
| import 'package:sky/widgets/icon_button.dart'; |
| import 'package:sky/widgets/menu_item.dart'; |
| import 'package:sky/widgets/navigator.dart'; |
| @@ -23,6 +25,7 @@ class StockSettings extends Component { |
| Navigator navigator; |
| StockMode stockMode; |
| SettingsUpdater updater; |
| + bool showDialog = false; |
|
Hixie
2015/06/23 19:40:27
Have a more specific name for this. We could end u
jackson
2015/06/23 20:20:44
Done.
|
| void syncFields(StockSettings source) { |
| navigator = source.navigator; |
| @@ -37,6 +40,20 @@ class StockSettings extends Component { |
| sendUpdates(); |
| } |
| + void _confirmStockModeChange() { |
| + switch (stockMode) { |
| + case StockMode.optimistic: |
| + _handleStockModeChanged(false); |
| + break; |
| + case StockMode.pessimistic: |
| + showDialog = true; |
| + navigator.pushState("/settings/confirm", (_) { |
|
eseidel
2015/06/23 19:37:24
I didn't realize dialogs were a navigation state.
jackson
2015/06/23 20:20:44
This is a route that the navigator knows how to ba
|
| + showDialog = false; |
| + }); |
| + break; |
| + } |
| + } |
| + |
| void sendUpdates() { |
| if (updater != null) |
| updater( |
| @@ -49,7 +66,7 @@ class StockSettings extends Component { |
| left: new IconButton( |
| icon: 'navigation/arrow_back_white', |
| onPressed: navigator.pop), |
| - center: new Text('Settings', style: Theme.of(this).text.title) |
| + center: new Text('Settings') |
| ); |
| } |
| @@ -60,7 +77,7 @@ class StockSettings extends Component { |
| child: new Block([ |
| new MenuItem( |
| icon: 'action/thumb_up', |
| - onPressed: () => _handleStockModeChanged(stockMode == StockMode.optimistic ? false : true), |
| + onPressed: () => _confirmStockModeChange(), |
| children: [ |
| new Flexible(child: new Text('Everything is awesome')), |
| new Checkbox(value: stockMode == StockMode.optimistic, onChanged: _handleStockModeChanged) |
| @@ -71,9 +88,51 @@ class StockSettings extends Component { |
| } |
| Widget build() { |
| - return new Scaffold( |
| - toolbar: buildToolBar(), |
| - body: buildSettingsPane() |
| + List<Widget> layers = [new Scaffold( |
| + toolbar: buildToolBar(), |
| + body: buildSettingsPane() |
| + )]; |
| + if (showDialog) |
| + layers.add(new _ConfirmDialog(navigator, updater)); |
| + return new Stack(layers); |
| + } |
| +} |
| + |
| +class _ConfirmDialog extends Component { |
|
Hixie
2015/06/23 19:40:27
Why doesn't this extend Dialog? It seems weird tha
jackson
2015/06/23 20:20:44
Done.
|
| + |
| + _ConfirmDialog(this.navigator, this.updater); |
| + |
| + final Navigator navigator; |
| + SettingsUpdater updater; |
| + |
| + void onAgree() { |
| + updater(mode: StockMode.optimistic); |
| + navigator.pop(); |
| + } |
| + |
| + void onDismiss() { |
| + navigator.pop(); |
| + } |
| + |
| + Widget build() { |
| + return new Dialog( |
| + onDismiss: onDismiss, |
| + title: new Text("Change mode?"), |
| + content: new Text("Optimistic mode means everything is awesome. Are you sure you can handle that?"), |
| + actions: new Flex([ |
| + new FlatButton( |
| + child: new ShrinkWrapWidth( |
| + child: new Text('NO THANKS') |
| + ), |
| + onPressed: onDismiss |
| + ), |
| + new FlatButton( |
| + child: new ShrinkWrapWidth( |
| + child: new Text('AGREE') |
| + ), |
| + onPressed: onAgree |
| + ), |
| + ], justifyContent: FlexJustifyContent.flexEnd) |
| ); |
| } |
| } |