Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(154)

Side by Side Diff: sky/examples/stocks2/lib/stock_settings.dart

Issue 1201273002: Add a confirmation dialog to stock app Settings page and style it by default (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | sky/sdk/lib/widgets/dialog.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 }
OLDNEW
« no previous file with comments | « no previous file | sky/sdk/lib/widgets/dialog.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698