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

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

Issue 1191153002: Make back button control drawer in stocks app (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: abarth feedback 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 | « sky/examples/stocks2/lib/stock_app.dart ('k') | sky/examples/widgets/navigation.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/editing/input.dart'; 5 import 'package:sky/editing/input.dart';
6 import 'package:sky/theme/colors.dart' as colors; 6 import 'package:sky/theme/colors.dart' as colors;
7 import 'package:sky/theme/typography.dart' as typography; 7 import 'package:sky/theme/typography.dart' as typography;
8 import 'package:sky/widgets/basic.dart'; 8 import 'package:sky/widgets/basic.dart';
9 import 'package:sky/widgets/drawer.dart'; 9 import 'package:sky/widgets/drawer.dart';
10 import 'package:sky/widgets/drawer_header.dart'; 10 import 'package:sky/widgets/drawer_header.dart';
(...skipping 11 matching lines...) Expand all
22 import 'package:sky/widgets/widget.dart'; 22 import 'package:sky/widgets/widget.dart';
23 23
24 import 'stock_data.dart'; 24 import 'stock_data.dart';
25 import 'stock_list.dart'; 25 import 'stock_list.dart';
26 import 'stock_menu.dart'; 26 import 'stock_menu.dart';
27 27
28 enum StockMode { optimistic, pessimistic } 28 enum StockMode { optimistic, pessimistic }
29 29
30 class StockHome extends Component { 30 class StockHome extends Component {
31 31
32 StockHome(this._navigator) { 32 StockHome(this.navigator, RouteBase route, this.stocks) : super(stateful: true ) {
33 // if (debug) 33 // if (debug)
34 // new Timer(new Duration(seconds: 1), dumpState); 34 // new Timer(new Duration(seconds: 1), dumpState);
35 new StockDataFetcher((StockData data) {
36 setState(() {
37 data.appendTo(_stocks);
38 });
39 });
40 _drawerController = new DrawerController(_handleDrawerStatusChanged); 35 _drawerController = new DrawerController(_handleDrawerStatusChanged);
41 } 36 }
42 37
43 List<Stock> _stocks = []; 38 void syncFields(StockHome source) {
44 Navigator _navigator; 39 navigator = source.navigator;
40 stocks = source.stocks;
41 }
42
43 Navigator navigator;
44 List<Stock> stocks;
45 45
46 bool _isSearching = false; 46 bool _isSearching = false;
47 String _searchQuery; 47 String _searchQuery;
48 48
49 void _handleSearchBegin() { 49 void _handleSearchBegin() {
50 setState(() { 50 setState(() {
51 _isSearching = true; 51 _isSearching = true;
52 }); 52 });
53 } 53 }
54 54
55 void _handleSearchEnd() { 55 void _handleSearchEnd() {
56 setState(() { 56 setState(() {
57 _isSearching = false; 57 _isSearching = false;
58 _searchQuery = null; 58 _searchQuery = null;
59 }); 59 });
60 } 60 }
61 61
62 void _handleSearchQueryChanged(String query) { 62 void _handleSearchQueryChanged(String query) {
63 setState(() { 63 setState(() {
64 _searchQuery = query; 64 _searchQuery = query;
65 }); 65 });
66 } 66 }
67 67
68 DrawerController _drawerController; 68 DrawerController _drawerController;
69 bool _drawerShowing = false; 69 bool _drawerShowing = false;
70 70
71 void _handleDrawerStatusChanged(bool showing) { 71 void _handleDrawerStatusChanged(bool showing) {
72 if (!showing && navigator.currentRoute.name == "/drawer") {
73 navigator.pop();
74 }
72 setState(() { 75 setState(() {
73 _drawerShowing = showing; 76 _drawerShowing = showing;
74 }); 77 });
75 } 78 }
76 79
77 PopupMenuController _menuController; 80 PopupMenuController _menuController;
78 81
79 void _handleMenuShow() { 82 void _handleMenuShow() {
80 setState(() { 83 setState(() {
81 _menuController = new PopupMenuController(); 84 _menuController = new PopupMenuController();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 new MenuItem( 133 new MenuItem(
131 icon: 'action/thumb_down', 134 icon: 'action/thumb_down',
132 onPressed: () => _handleStockModeChange(StockMode.pessimistic), 135 onPressed: () => _handleStockModeChange(StockMode.pessimistic),
133 children: [ 136 children: [
134 new Flexible(child: new Text('Pessimistic')), 137 new Flexible(child: new Text('Pessimistic')),
135 new Radio(value: StockMode.pessimistic, groupValue: _stockMode, onCh anged: _handleStockModeChange) 138 new Radio(value: StockMode.pessimistic, groupValue: _stockMode, onCh anged: _handleStockModeChange)
136 ]), 139 ]),
137 new MenuDivider(), 140 new MenuDivider(),
138 new MenuItem( 141 new MenuItem(
139 icon: 'action/settings', 142 icon: 'action/settings',
140 onPressed: () => _navigator.pushNamed('/settings'), 143 onPressed: () => navigator.pushNamed('/settings'),
141 children: [new Text('Settings')]), 144 children: [new Text('Settings')]),
142 new MenuItem( 145 new MenuItem(
143 icon: 'action/help', 146 icon: 'action/help',
144 children: [new Text('Help & Feedback')]) 147 children: [new Text('Help & Feedback')])
145 ] 148 ]
146 ); 149 );
147 } 150 }
148 151
152 void _handleOpenDrawer() {
153 _drawerController.open();
154 navigator.pushState("/drawer", (_) {
155 _drawerController.close();
156 });
157 }
158
149 Widget buildToolBar() { 159 Widget buildToolBar() {
150 return new ToolBar( 160 return new ToolBar(
151 left: new IconButton( 161 left: new IconButton(
152 icon: 'navigation/menu_white', 162 icon: 'navigation/menu_white',
153 onPressed: _drawerController.toggle), 163 onPressed: _handleOpenDrawer),
154 center: new Text('Stocks', style: typography.white.title), 164 center: new Text('Stocks', style: typography.white.title),
155 right: [ 165 right: [
156 new IconButton( 166 new IconButton(
157 icon: 'action/search_white', 167 icon: 'action/search_white',
158 onPressed: _handleSearchBegin), 168 onPressed: _handleSearchBegin),
159 new IconButton( 169 new IconButton(
160 icon: 'navigation/more_vert_white', 170 icon: 'navigation/more_vert_white',
161 onPressed: _handleMenuShow) 171 onPressed: _handleMenuShow)
162 ], 172 ],
163 backgroundColor: colors.Purple[500] 173 backgroundColor: colors.Purple[500]
(...skipping 23 matching lines...) Expand all
187 autorefresh: _autorefresh, 197 autorefresh: _autorefresh,
188 onAutorefreshChanged: _handleAutorefreshChanged 198 onAutorefreshChanged: _handleAutorefreshChanged
189 )], 199 )],
190 onDismiss: _handleMenuHide)); 200 onDismiss: _handleMenuHide));
191 } 201 }
192 202
193 Widget build() { 203 Widget build() {
194 List<Widget> overlays = [ 204 List<Widget> overlays = [
195 new Scaffold( 205 new Scaffold(
196 toolbar: _isSearching ? buildSearchBar() : buildToolBar(), 206 toolbar: _isSearching ? buildSearchBar() : buildToolBar(),
197 body: new Stocklist(stocks: _stocks, query: _searchQuery), 207 body: new Stocklist(stocks: stocks, query: _searchQuery),
198 floatingActionButton: new FloatingActionButton( 208 floatingActionButton: new FloatingActionButton(
199 child: new Icon(type: 'content/add_white', size: 24) 209 child: new Icon(type: 'content/add_white', size: 24)
200 ), 210 ),
201 drawer: _drawerShowing ? buildDrawer() : null 211 drawer: _drawerShowing ? buildDrawer() : null
202 ), 212 ),
203 ]; 213 ];
204 addMenuToOverlays(overlays); 214 addMenuToOverlays(overlays);
205 return new Stack(overlays); 215 return new Stack(overlays);
206 } 216 }
207 } 217 }
OLDNEW
« no previous file with comments | « sky/examples/stocks2/lib/stock_app.dart ('k') | sky/examples/widgets/navigation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698