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

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: rebase 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';
13 import 'package:sky/widgets/tool_bar.dart'; 14 import 'package:sky/widgets/tool_bar.dart';
14 15
15 import 'stock_types.dart'; 16 import 'stock_types.dart';
16 17
17 typedef void SettingsUpdater({StockMode mode}); 18 typedef void SettingsUpdater({StockMode mode});
18 19
19 class StockSettings extends Component { 20 class StockSettings extends Component {
20 21
21 StockSettings(this.navigator, this.stockMode, this.updater) : super(stateful: true); 22 StockSettings(this.navigator, this.stockMode, this.updater) : super(stateful: true);
22 23
23 Navigator navigator; 24 Navigator navigator;
24 StockMode stockMode; 25 StockMode stockMode;
25 SettingsUpdater updater; 26 SettingsUpdater updater;
27 bool showModeDialog = false;
26 28
27 void syncFields(StockSettings source) { 29 void syncFields(StockSettings source) {
28 navigator = source.navigator; 30 navigator = source.navigator;
29 stockMode = source.stockMode; 31 stockMode = source.stockMode;
30 updater = source.updater; 32 updater = source.updater;
31 } 33 }
32 34
33 void _handleStockModeChanged(bool value) { 35 void _handleStockModeChanged(bool value) {
34 setState(() { 36 setState(() {
35 stockMode = value ? StockMode.optimistic : StockMode.pessimistic; 37 stockMode = value ? StockMode.optimistic : StockMode.pessimistic;
36 }); 38 });
37 sendUpdates(); 39 sendUpdates();
38 } 40 }
39 41
42 void _confirmStockModeChange() {
43 switch (stockMode) {
44 case StockMode.optimistic:
45 _handleStockModeChanged(false);
46 break;
47 case StockMode.pessimistic:
48 showModeDialog = true;
49 navigator.pushState("/settings/confirm", (_) {
50 showModeDialog = false;
51 });
52 break;
53 }
54 }
55
40 void sendUpdates() { 56 void sendUpdates() {
41 if (updater != null) 57 if (updater != null)
42 updater( 58 updater(
43 mode: stockMode 59 mode: stockMode
44 ); 60 );
45 } 61 }
46 62
47 Widget buildToolBar() { 63 Widget buildToolBar() {
48 return new ToolBar( 64 return new ToolBar(
49 left: new IconButton( 65 left: new IconButton(
50 icon: 'navigation/arrow_back_white', 66 icon: 'navigation/arrow_back_white',
51 onPressed: navigator.pop), 67 onPressed: navigator.pop),
52 center: new Text('Settings', style: Theme.of(this).text.title) 68 center: new Text('Settings')
53 ); 69 );
54 } 70 }
55 71
56 Widget buildSettingsPane() { 72 Widget buildSettingsPane() {
57 return new Container( 73 return new Container(
58 padding: const EdgeDims.symmetric(vertical: 20.0), 74 padding: const EdgeDims.symmetric(vertical: 20.0),
59 decoration: new BoxDecoration(backgroundColor: colors.Grey[50]), 75 decoration: new BoxDecoration(backgroundColor: colors.Grey[50]),
60 child: new Block([ 76 child: new Block([
61 new MenuItem( 77 new MenuItem(
62 icon: 'action/thumb_up', 78 icon: 'action/thumb_up',
63 onPressed: () => _handleStockModeChanged(stockMode == StockMode.optimi stic ? false : true), 79 onPressed: () => _confirmStockModeChange(),
64 children: [ 80 children: [
65 new Flexible(child: new Text('Everything is awesome')), 81 new Flexible(child: new Text('Everything is awesome')),
66 new Checkbox(value: stockMode == StockMode.optimistic, onChanged: _h andleStockModeChanged) 82 new Checkbox(value: stockMode == StockMode.optimistic, onChanged: _h andleStockModeChanged)
67 ] 83 ]
68 ), 84 ),
69 ]) 85 ])
70 ); 86 );
71 } 87 }
72 88
73 Widget build() { 89 Widget build() {
74 return new Scaffold( 90 List<Widget> layers = [new Scaffold(
75 toolbar: buildToolBar(), 91 toolbar: buildToolBar(),
76 body: buildSettingsPane() 92 body: buildSettingsPane()
77 ); 93 )];
94 if (showModeDialog) {
95 layers.add(new Dialog(
96 title: new Text("Change mode?"),
97 content: new Text("Optimistic mode means everything is awesome. Are you sure you can handle that?"),
98 onDismiss: navigator.pop,
99 actions: [
100 new FlatButton(
101 child: new Text('NO THANKS'),
102 onPressed: navigator.pop
103 ),
104 new FlatButton(
105 child: new Text('AGREE'),
106 onPressed: () {
107 _handleStockModeChanged(true);
108 navigator.pop();
109 }
110 ),
111 ]
112 ));
113 }
114 return new Stack(layers);
78 } 115 }
79 } 116 }
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