| 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/editing/input.dart'; | 5 import 'package:sky/editing/input.dart'; |
| 6 import 'package:sky/widgets/basic.dart'; | 6 import 'package:sky/widgets/basic.dart'; |
| 7 import 'package:sky/widgets/drawer.dart'; | 7 import 'package:sky/widgets/drawer.dart'; |
| 8 import 'package:sky/widgets/drawer_header.dart'; | 8 import 'package:sky/widgets/drawer_header.dart'; |
| 9 import 'package:sky/widgets/floating_action_button.dart'; | 9 import 'package:sky/widgets/floating_action_button.dart'; |
| 10 import 'package:sky/widgets/icon.dart'; | 10 import 'package:sky/widgets/icon.dart'; |
| 11 import 'package:sky/widgets/icon_button.dart'; | 11 import 'package:sky/widgets/icon_button.dart'; |
| 12 import 'package:sky/widgets/menu_divider.dart'; | 12 import 'package:sky/widgets/menu_divider.dart'; |
| 13 import 'package:sky/widgets/menu_item.dart'; | 13 import 'package:sky/widgets/menu_item.dart'; |
| 14 import 'package:sky/widgets/modal_overlay.dart'; | 14 import 'package:sky/widgets/modal_overlay.dart'; |
| 15 import 'package:sky/widgets/navigator.dart'; | 15 import 'package:sky/widgets/navigator.dart'; |
| 16 import 'package:sky/widgets/popup_menu.dart'; | 16 import 'package:sky/widgets/popup_menu.dart'; |
| 17 import 'package:sky/widgets/radio.dart'; | 17 import 'package:sky/widgets/radio.dart'; |
| 18 import 'package:sky/widgets/snack_bar.dart'; |
| 18 import 'package:sky/widgets/scaffold.dart'; | 19 import 'package:sky/widgets/scaffold.dart'; |
| 19 import 'package:sky/widgets/tabs.dart'; | 20 import 'package:sky/widgets/tabs.dart'; |
| 20 import 'package:sky/widgets/theme.dart'; | 21 import 'package:sky/widgets/theme.dart'; |
| 21 import 'package:sky/widgets/tool_bar.dart'; | 22 import 'package:sky/widgets/tool_bar.dart'; |
| 22 import 'package:sky/widgets/widget.dart'; | 23 import 'package:sky/widgets/widget.dart'; |
| 23 | 24 |
| 24 import 'stock_data.dart'; | 25 import 'stock_data.dart'; |
| 25 import 'stock_list.dart'; | 26 import 'stock_list.dart'; |
| 26 import 'stock_menu.dart'; | 27 import 'stock_menu.dart'; |
| 27 import 'stock_types.dart'; | 28 import 'stock_types.dart'; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 44 void syncFields(StockHome source) { | 45 void syncFields(StockHome source) { |
| 45 navigator = source.navigator; | 46 navigator = source.navigator; |
| 46 stocks = source.stocks; | 47 stocks = source.stocks; |
| 47 stockMode = source.stockMode; | 48 stockMode = source.stockMode; |
| 48 modeUpdater = source.modeUpdater; | 49 modeUpdater = source.modeUpdater; |
| 49 } | 50 } |
| 50 | 51 |
| 51 bool _isSearching = false; | 52 bool _isSearching = false; |
| 52 String _searchQuery; | 53 String _searchQuery; |
| 53 | 54 |
| 55 bool _isShowingSnackBar = false; |
| 56 |
| 54 void _handleSearchBegin() { | 57 void _handleSearchBegin() { |
| 55 setState(() { | 58 setState(() { |
| 56 _isSearching = true; | 59 _isSearching = true; |
| 57 }); | 60 }); |
| 58 } | 61 } |
| 59 | 62 |
| 60 void _handleSearchEnd() { | 63 void _handleSearchEnd() { |
| 61 setState(() { | 64 setState(() { |
| 62 _isSearching = false; | 65 _isSearching = false; |
| 63 _searchQuery = null; | 66 _searchQuery = null; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 icon: 'navigation/arrow_back_grey600', | 219 icon: 'navigation/arrow_back_grey600', |
| 217 onPressed: _handleSearchEnd), | 220 onPressed: _handleSearchEnd), |
| 218 center: new Input( | 221 center: new Input( |
| 219 focused: true, | 222 focused: true, |
| 220 placeholder: 'Search stocks', | 223 placeholder: 'Search stocks', |
| 221 onChanged: _handleSearchQueryChanged), | 224 onChanged: _handleSearchQueryChanged), |
| 222 backgroundColor: Theme.of(this).canvasColor | 225 backgroundColor: Theme.of(this).canvasColor |
| 223 ); | 226 ); |
| 224 } | 227 } |
| 225 | 228 |
| 229 void _handleUndo() { |
| 230 setState(() { |
| 231 _isShowingSnackBar = false; |
| 232 }); |
| 233 } |
| 234 |
| 235 Widget buildSnackBar() { |
| 236 if (!_isShowingSnackBar) |
| 237 return null; |
| 238 return new SnackBar( |
| 239 content: new Text("Stock purchased!"), |
| 240 actions: [new SnackBarAction(label: "UNDO", onPressed: _handleUndo)] |
| 241 ); |
| 242 } |
| 243 |
| 244 void _handleStockPurchased() { |
| 245 setState(() { |
| 246 _isShowingSnackBar = true; |
| 247 }); |
| 248 } |
| 249 |
| 250 Widget buildFloatingActionButton() { |
| 251 return new FloatingActionButton( |
| 252 child: new Icon(type: 'content/add_white', size: 24), |
| 253 onPressed: _handleStockPurchased |
| 254 ); |
| 255 } |
| 256 |
| 226 void addMenuToOverlays(List<Widget> overlays) { | 257 void addMenuToOverlays(List<Widget> overlays) { |
| 227 if (_menuController == null) | 258 if (_menuController == null) |
| 228 return; | 259 return; |
| 229 overlays.add(new ModalOverlay( | 260 overlays.add(new ModalOverlay( |
| 230 children: [new StockMenu( | 261 children: [new StockMenu( |
| 231 controller: _menuController, | 262 controller: _menuController, |
| 232 autorefresh: _autorefresh, | 263 autorefresh: _autorefresh, |
| 233 onAutorefreshChanged: _handleAutorefreshChanged | 264 onAutorefreshChanged: _handleAutorefreshChanged |
| 234 )], | 265 )], |
| 235 onDismiss: _handleMenuHide)); | 266 onDismiss: _handleMenuHide)); |
| 236 } | 267 } |
| 237 | 268 |
| 238 Widget build() { | 269 Widget build() { |
| 239 List<Widget> overlays = [ | 270 List<Widget> overlays = [ |
| 240 new Scaffold( | 271 new Scaffold( |
| 241 toolbar: _isSearching ? buildSearchBar() : buildToolBar(), | 272 toolbar: _isSearching ? buildSearchBar() : buildToolBar(), |
| 242 body: buildTabNavigator(), | 273 body: buildTabNavigator(), |
| 243 floatingActionButton: new FloatingActionButton( | 274 snackBar: buildSnackBar(), |
| 244 child: new Icon(type: 'content/add_white', size: 24) | 275 floatingActionButton: buildFloatingActionButton(), |
| 245 ), | |
| 246 drawer: _drawerShowing ? buildDrawer() : null | 276 drawer: _drawerShowing ? buildDrawer() : null |
| 247 ), | 277 ), |
| 248 ]; | 278 ]; |
| 249 addMenuToOverlays(overlays); | 279 addMenuToOverlays(overlays); |
| 250 return new Stack(overlays); | 280 return new Stack(overlays); |
| 251 } | 281 } |
| 252 } | 282 } |
| OLD | NEW |