Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:sky/theme/colors.dart' as colors; | 5 import 'package:sky/theme/colors.dart' as colors; |
| 6 import 'package:sky/widgets/basic.dart'; | 6 import 'package:sky/widgets/basic.dart'; |
| 7 import 'package:sky/widgets/checkbox.dart'; | 7 import 'package:sky/widgets/checkbox.dart'; |
| 8 import 'package:sky/widgets/flat_button.dart'; | |
| 9 import 'package:sky/widgets/dialog.dart'; | |
| 8 import 'package:sky/widgets/icon_button.dart'; | 10 import 'package:sky/widgets/icon_button.dart'; |
| 9 import 'package:sky/widgets/menu_item.dart'; | 11 import 'package:sky/widgets/menu_item.dart'; |
| 10 import 'package:sky/widgets/navigator.dart'; | 12 import 'package:sky/widgets/navigator.dart'; |
| 11 import 'package:sky/widgets/scaffold.dart'; | 13 import 'package:sky/widgets/scaffold.dart'; |
| 12 import 'package:sky/widgets/theme.dart'; | 14 import 'package:sky/widgets/theme.dart'; |
| 13 import 'package:sky/widgets/tool_bar.dart'; | 15 import 'package:sky/widgets/tool_bar.dart'; |
| 14 | 16 |
| 15 import 'stock_types.dart'; | 17 import 'stock_types.dart'; |
| 16 | 18 |
| 17 typedef void SettingsUpdater({StockMode mode}); | 19 typedef void SettingsUpdater({StockMode mode}); |
| 18 | 20 |
| 19 class StockSettings extends Component { | 21 class StockSettings extends Component { |
| 20 | 22 |
| 21 StockSettings(this.navigator, this.stockMode, this.updater) : super(stateful: true); | 23 StockSettings(this.navigator, this.stockMode, this.updater) : super(stateful: true); |
| 22 | 24 |
| 23 Navigator navigator; | 25 Navigator navigator; |
| 24 StockMode stockMode; | 26 StockMode stockMode; |
| 25 SettingsUpdater updater; | 27 SettingsUpdater updater; |
| 28 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.
| |
| 26 | 29 |
| 27 void syncFields(StockSettings source) { | 30 void syncFields(StockSettings source) { |
| 28 navigator = source.navigator; | 31 navigator = source.navigator; |
| 29 stockMode = source.stockMode; | 32 stockMode = source.stockMode; |
| 30 updater = source.updater; | 33 updater = source.updater; |
| 31 } | 34 } |
| 32 | 35 |
| 33 void _handleStockModeChanged(bool value) { | 36 void _handleStockModeChanged(bool value) { |
| 34 setState(() { | 37 setState(() { |
| 35 stockMode = value ? StockMode.optimistic : StockMode.pessimistic; | 38 stockMode = value ? StockMode.optimistic : StockMode.pessimistic; |
| 36 }); | 39 }); |
| 37 sendUpdates(); | 40 sendUpdates(); |
| 38 } | 41 } |
| 39 | 42 |
| 43 void _confirmStockModeChange() { | |
| 44 switch (stockMode) { | |
| 45 case StockMode.optimistic: | |
| 46 _handleStockModeChanged(false); | |
| 47 break; | |
| 48 case StockMode.pessimistic: | |
| 49 showDialog = true; | |
| 50 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
| |
| 51 showDialog = false; | |
| 52 }); | |
| 53 break; | |
| 54 } | |
| 55 } | |
| 56 | |
| 40 void sendUpdates() { | 57 void sendUpdates() { |
| 41 if (updater != null) | 58 if (updater != null) |
| 42 updater( | 59 updater( |
| 43 mode: stockMode | 60 mode: stockMode |
| 44 ); | 61 ); |
| 45 } | 62 } |
| 46 | 63 |
| 47 Widget buildToolBar() { | 64 Widget buildToolBar() { |
| 48 return new ToolBar( | 65 return new ToolBar( |
| 49 left: new IconButton( | 66 left: new IconButton( |
| 50 icon: 'navigation/arrow_back_white', | 67 icon: 'navigation/arrow_back_white', |
| 51 onPressed: navigator.pop), | 68 onPressed: navigator.pop), |
| 52 center: new Text('Settings', style: Theme.of(this).text.title) | 69 center: new Text('Settings') |
| 53 ); | 70 ); |
| 54 } | 71 } |
| 55 | 72 |
| 56 Widget buildSettingsPane() { | 73 Widget buildSettingsPane() { |
| 57 return new Container( | 74 return new Container( |
| 58 padding: const EdgeDims.symmetric(vertical: 20.0), | 75 padding: const EdgeDims.symmetric(vertical: 20.0), |
| 59 decoration: new BoxDecoration(backgroundColor: colors.Grey[50]), | 76 decoration: new BoxDecoration(backgroundColor: colors.Grey[50]), |
| 60 child: new Block([ | 77 child: new Block([ |
| 61 new MenuItem( | 78 new MenuItem( |
| 62 icon: 'action/thumb_up', | 79 icon: 'action/thumb_up', |
| 63 onPressed: () => _handleStockModeChanged(stockMode == StockMode.optimi stic ? false : true), | 80 onPressed: () => _confirmStockModeChange(), |
| 64 children: [ | 81 children: [ |
| 65 new Flexible(child: new Text('Everything is awesome')), | 82 new Flexible(child: new Text('Everything is awesome')), |
| 66 new Checkbox(value: stockMode == StockMode.optimistic, onChanged: _h andleStockModeChanged) | 83 new Checkbox(value: stockMode == StockMode.optimistic, onChanged: _h andleStockModeChanged) |
| 67 ] | 84 ] |
| 68 ), | 85 ), |
| 69 ]) | 86 ]) |
| 70 ); | 87 ); |
| 71 } | 88 } |
| 72 | 89 |
| 73 Widget build() { | 90 Widget build() { |
| 74 return new Scaffold( | 91 List<Widget> layers = [new Scaffold( |
| 75 toolbar: buildToolBar(), | 92 toolbar: buildToolBar(), |
| 76 body: buildSettingsPane() | 93 body: buildSettingsPane() |
| 94 )]; | |
| 95 if (showDialog) | |
| 96 layers.add(new _ConfirmDialog(navigator, updater)); | |
| 97 return new Stack(layers); | |
| 98 } | |
| 99 } | |
| 100 | |
| 101 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.
| |
| 102 | |
| 103 _ConfirmDialog(this.navigator, this.updater); | |
| 104 | |
| 105 final Navigator navigator; | |
| 106 SettingsUpdater updater; | |
| 107 | |
| 108 void onAgree() { | |
| 109 updater(mode: StockMode.optimistic); | |
| 110 navigator.pop(); | |
| 111 } | |
| 112 | |
| 113 void onDismiss() { | |
| 114 navigator.pop(); | |
| 115 } | |
| 116 | |
| 117 Widget build() { | |
| 118 return new Dialog( | |
| 119 onDismiss: onDismiss, | |
| 120 title: new Text("Change mode?"), | |
| 121 content: new Text("Optimistic mode means everything is awesome. Are you su re you can handle that?"), | |
| 122 actions: new Flex([ | |
| 123 new FlatButton( | |
| 124 child: new ShrinkWrapWidth( | |
| 125 child: new Text('NO THANKS') | |
| 126 ), | |
| 127 onPressed: onDismiss | |
| 128 ), | |
| 129 new FlatButton( | |
| 130 child: new ShrinkWrapWidth( | |
| 131 child: new Text('AGREE') | |
| 132 ), | |
| 133 onPressed: onAgree | |
| 134 ), | |
| 135 ], justifyContent: FlexJustifyContent.flexEnd) | |
| 77 ); | 136 ); |
| 78 } | 137 } |
| 79 } | 138 } |
| OLD | NEW |