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

Side by Side Diff: sky/sdk/example/stocks/lib/stock_settings.dart

Issue 1214113006: Add a new item to the settings page to show off the switch widget. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 5 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 | « sky/sdk/example/stocks/lib/main.dart ('k') | sky/sdk/example/stocks/lib/stock_types.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/switch.dart';
8 import 'package:sky/widgets/flat_button.dart'; 9 import 'package:sky/widgets/flat_button.dart';
9 import 'package:sky/widgets/dialog.dart'; 10 import 'package:sky/widgets/dialog.dart';
10 import 'package:sky/widgets/icon_button.dart'; 11 import 'package:sky/widgets/icon_button.dart';
11 import 'package:sky/widgets/menu_item.dart'; 12 import 'package:sky/widgets/menu_item.dart';
12 import 'package:sky/widgets/navigator.dart'; 13 import 'package:sky/widgets/navigator.dart';
13 import 'package:sky/widgets/scaffold.dart'; 14 import 'package:sky/widgets/scaffold.dart';
14 import 'package:sky/widgets/tool_bar.dart'; 15 import 'package:sky/widgets/tool_bar.dart';
15 16
16 import 'stock_types.dart'; 17 import 'stock_types.dart';
17 18
18 typedef void SettingsUpdater({StockMode mode}); 19 typedef void SettingsUpdater({
20 StockMode optimism,
21 BackupMode backup
22 });
19 23
20 class StockSettings extends Component { 24 class StockSettings extends Component {
21 25
22 StockSettings(this.navigator, this.stockMode, this.updater) : super(stateful: true); 26 StockSettings(this.navigator, this.optimism, this.backup, this.updater) : supe r(stateful: true);
23 27
24 Navigator navigator; 28 Navigator navigator;
25 StockMode stockMode; 29 StockMode optimism;
30 BackupMode backup;
26 SettingsUpdater updater; 31 SettingsUpdater updater;
32
27 bool showModeDialog = false; 33 bool showModeDialog = false;
28 34
29 void syncFields(StockSettings source) { 35 void syncFields(StockSettings source) {
30 navigator = source.navigator; 36 navigator = source.navigator;
31 stockMode = source.stockMode; 37 optimism = source.optimism;
38 backup = source.backup;
32 updater = source.updater; 39 updater = source.updater;
33 } 40 }
34 41
35 void _handleStockModeChanged(bool value) { 42 void _handleOptimismChanged(bool value) {
36 setState(() { 43 setState(() {
37 stockMode = value ? StockMode.optimistic : StockMode.pessimistic; 44 optimism = value ? StockMode.optimistic : StockMode.pessimistic;
38 }); 45 });
39 sendUpdates(); 46 sendUpdates();
40 } 47 }
41 48
42 void _confirmStockModeChange() { 49 void _handleBackupChanged(bool value) {
43 switch (stockMode) { 50 setState(() {
51 backup = value ? BackupMode.enabled : BackupMode.disabled;
52 });
53 sendUpdates();
54 }
55
56 void _confirmOptimismChange() {
57 switch (optimism) {
44 case StockMode.optimistic: 58 case StockMode.optimistic:
45 _handleStockModeChanged(false); 59 _handleOptimismChanged(false);
46 break; 60 break;
47 case StockMode.pessimistic: 61 case StockMode.pessimistic:
48 showModeDialog = true; 62 showModeDialog = true;
49 navigator.pushState("/settings/confirm", (_) { 63 navigator.pushState("/settings/confirm", (_) {
50 showModeDialog = false; 64 showModeDialog = false;
51 }); 65 });
52 break; 66 break;
53 } 67 }
54 } 68 }
55 69
56 void sendUpdates() { 70 void sendUpdates() {
57 if (updater != null) 71 if (updater != null)
58 updater( 72 updater(
59 mode: stockMode 73 optimism: optimism,
74 backup: backup
60 ); 75 );
61 } 76 }
62 77
63 Widget buildToolBar() { 78 Widget buildToolBar() {
64 return new ToolBar( 79 return new ToolBar(
65 left: new IconButton( 80 left: new IconButton(
66 icon: 'navigation/arrow_back_white', 81 icon: 'navigation/arrow_back_white',
67 onPressed: navigator.pop), 82 onPressed: navigator.pop),
68 center: new Text('Settings') 83 center: new Text('Settings')
69 ); 84 );
70 } 85 }
71 86
72 Widget buildSettingsPane() { 87 Widget buildSettingsPane() {
88 // TODO(ianh): Once we have the gesture API hooked up, fix https://github.co m/domokit/mojo/issues/281
89 // (whereby tapping the widgets below causes both the widget and the menu it em to fire their callbacks)
73 return new Container( 90 return new Container(
74 padding: const EdgeDims.symmetric(vertical: 20.0), 91 padding: const EdgeDims.symmetric(vertical: 20.0),
75 decoration: new BoxDecoration(backgroundColor: colors.Grey[50]), 92 decoration: new BoxDecoration(backgroundColor: colors.Grey[50]),
76 child: new Block([ 93 child: new Block([
77 new MenuItem( 94 new MenuItem(
78 icon: 'action/thumb_up', 95 icon: 'action/thumb_up',
79 onPressed: () => _confirmStockModeChange(), 96 onPressed: () => _confirmOptimismChange(),
80 children: [ 97 children: [
81 new Flexible(child: new Text('Everything is awesome')), 98 new Flexible(child: new Text('Everything is awesome')),
82 new Checkbox(value: stockMode == StockMode.optimistic, onChanged: _h andleStockModeChanged) 99 new Checkbox(value: optimism == StockMode.optimistic, onChanged: _ha ndleOptimismChanged)
100 ]
101 ),
102 new MenuItem(
103 icon: 'action/backup',
104 onPressed: () { _handleBackupChanged(!(backup == BackupMode.enabled)); },
105 children: [
106 new Flexible(child: new Text('Back up stock list to the cloud')),
107 new Switch(value: backup == BackupMode.enabled, onChanged: _handleBa ckupChanged)
83 ] 108 ]
84 ), 109 ),
85 ]) 110 ])
86 ); 111 );
87 } 112 }
88 113
89 Widget build() { 114 Widget build() {
90 List<Widget> layers = [new Scaffold( 115 List<Widget> layers = [
116 new Scaffold(
91 toolbar: buildToolBar(), 117 toolbar: buildToolBar(),
92 body: buildSettingsPane() 118 body: buildSettingsPane()
93 )]; 119 )
120 ];
94 if (showModeDialog) { 121 if (showModeDialog) {
95 layers.add(new Dialog( 122 layers.add(new Dialog(
96 title: new Text("Change mode?"), 123 title: new Text("Change mode?"),
97 content: new Text("Optimistic mode means everything is awesome. Are you sure you can handle that?"), 124 content: new Text("Optimistic mode means everything is awesome. Are you sure you can handle that?"),
98 onDismiss: navigator.pop, 125 onDismiss: navigator.pop,
99 actions: [ 126 actions: [
100 new FlatButton( 127 new FlatButton(
101 child: new Text('NO THANKS'), 128 child: new Text('NO THANKS'),
102 onPressed: navigator.pop 129 onPressed: navigator.pop
103 ), 130 ),
104 new FlatButton( 131 new FlatButton(
105 child: new Text('AGREE'), 132 child: new Text('AGREE'),
106 onPressed: () { 133 onPressed: () {
107 _handleStockModeChanged(true); 134 _handleOptimismChanged(true);
108 navigator.pop(); 135 navigator.pop();
109 } 136 }
110 ), 137 ),
111 ] 138 ]
112 )); 139 ));
113 } 140 }
114 return new Stack(layers); 141 return new Stack(layers);
115 } 142 }
116 } 143 }
OLDNEW
« no previous file with comments | « sky/sdk/example/stocks/lib/main.dart ('k') | sky/sdk/example/stocks/lib/stock_types.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698