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 |