| 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/framework/components/action_bar.dart'; | 5 import 'package:sky/framework/components/action_bar.dart'; |
| 6 import 'package:sky/framework/components/drawer.dart'; | 6 import 'package:sky/framework/components/drawer.dart'; |
| 7 import 'package:sky/framework/components/drawer_header.dart'; | 7 import 'package:sky/framework/components/drawer_header.dart'; |
| 8 import 'package:sky/framework/components/floating_action_button.dart'; | 8 import 'package:sky/framework/components/floating_action_button.dart'; |
| 9 import 'package:sky/framework/components/icon.dart'; | 9 import 'package:sky/framework/components/icon.dart'; |
| 10 import 'package:sky/framework/components/input.dart'; | 10 import 'package:sky/framework/components/input.dart'; |
| 11 import 'package:sky/framework/components/menu_divider.dart'; | 11 import 'package:sky/framework/components/menu_divider.dart'; |
| 12 import 'package:sky/framework/components/menu_item.dart'; | 12 import 'package:sky/framework/components/menu_item.dart'; |
| 13 import 'package:sky/framework/components/popup_menu.dart'; | 13 import 'package:sky/framework/components/popup_menu.dart'; |
| 14 import 'package:sky/framework/components/scaffold.dart'; |
| 14 import 'package:sky/framework/fn.dart'; | 15 import 'package:sky/framework/fn.dart'; |
| 15 import 'package:sky/framework/theme/typography.dart' as typography; | 16 import 'package:sky/framework/theme/typography.dart' as typography; |
| 16 import 'stock_data.dart'; | 17 import 'stock_data.dart'; |
| 17 import 'stock_list.dart'; | 18 import 'stock_list.dart'; |
| 18 import 'stock_menu.dart'; | 19 import 'stock_menu.dart'; |
| 19 | 20 |
| 20 class StocksApp extends App { | 21 class StocksApp extends App { |
| 21 | 22 |
| 22 DrawerController _drawerController = new DrawerController(); | 23 DrawerController _drawerController = new DrawerController(); |
| 23 PopupMenuController _menuController; | 24 PopupMenuController _menuController; |
| 24 | 25 |
| 25 static Style _style = new Style(''' | |
| 26 display: flex; | |
| 27 flex-direction: column; | |
| 28 height: -webkit-fill-available; | |
| 29 ${typography.typeface}; | |
| 30 ${typography.black.body1};''' | |
| 31 ); | |
| 32 | |
| 33 static Style _iconStyle = new Style(''' | 26 static Style _iconStyle = new Style(''' |
| 34 padding: 8px;''' | 27 padding: 8px;''' |
| 35 ); | 28 ); |
| 36 | 29 |
| 37 static Style _titleStyle = new Style(''' | 30 static Style _titleStyle = new Style(''' |
| 38 padding-left: 24px; | 31 padding-left: 24px; |
| 39 flex: 1; | 32 flex: 1; |
| 40 ${typography.white.title};''' | 33 ${typography.white.title};''' |
| 41 ); | 34 ); |
| 42 | 35 |
| 43 static Style _stocklistHeight = new Style(''' | |
| 44 flex: 1;''' | |
| 45 ); | |
| 46 | |
| 47 List<Stock> _sortedStocks; | 36 List<Stock> _sortedStocks; |
| 48 bool _isSearching = false; | 37 bool _isSearching = false; |
| 49 bool _isShowingMenu = false; | 38 bool _isShowingMenu = false; |
| 50 String _searchQuery; | 39 String _searchQuery; |
| 51 | 40 |
| 52 StocksApp() : super() { | 41 StocksApp() : super() { |
| 53 _sortedStocks = oracle.stocks; | 42 _sortedStocks = oracle.stocks; |
| 54 _sortedStocks.sort((a, b) => a.symbol.compareTo(b.symbol)); | 43 _sortedStocks.sort((a, b) => a.symbol.compareTo(b.symbol)); |
| 55 } | 44 } |
| 56 | 45 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 ); | 96 ); |
| 108 | 97 |
| 109 Node title; | 98 Node title; |
| 110 if (_isSearching) { | 99 if (_isSearching) { |
| 111 title = new Input(focused: true, placeholder: 'Search stocks', | 100 title = new Input(focused: true, placeholder: 'Search stocks', |
| 112 onChanged: _handleSearchQueryChanged); | 101 onChanged: _handleSearchQueryChanged); |
| 113 } else { | 102 } else { |
| 114 title = new Text('Stocks'); | 103 title = new Text('Stocks'); |
| 115 } | 104 } |
| 116 | 105 |
| 117 var toolbar = new ActionBar( | 106 var actionBar = new ActionBar( |
| 118 children: [ | 107 children: [ |
| 119 new EventTarget( | 108 new EventTarget( |
| 120 new Icon(key: 'menu', style: _iconStyle, | 109 new Icon(key: 'menu', style: _iconStyle, |
| 121 size: 24, | 110 size: 24, |
| 122 type: 'navigation/menu_white'), | 111 type: 'navigation/menu_white'), |
| 123 onGestureTap: _drawerController.toggle | 112 onGestureTap: _drawerController.toggle |
| 124 ), | 113 ), |
| 125 new Container( | 114 new Container( |
| 126 style: _titleStyle, | 115 style: _titleStyle, |
| 127 children: [title] | 116 children: [title] |
| 128 ), | 117 ), |
| 129 new EventTarget( | 118 new EventTarget( |
| 130 new Icon(key: 'search', style: _iconStyle, | 119 new Icon(key: 'search', style: _iconStyle, |
| 131 size: 24, | 120 size: 24, |
| 132 type: 'action/search_white'), | 121 type: 'action/search_white'), |
| 133 onGestureTap: _handleSearchClick | 122 onGestureTap: _handleSearchClick |
| 134 ), | 123 ), |
| 135 new EventTarget( | 124 new EventTarget( |
| 136 new Icon(key: 'more_white', style: _iconStyle, | 125 new Icon(key: 'more_white', style: _iconStyle, |
| 137 size: 24, | 126 size: 24, |
| 138 type: 'navigation/more_vert_white'), | 127 type: 'navigation/more_vert_white'), |
| 139 onGestureTap: _handleMenuClick | 128 onGestureTap: _handleMenuClick |
| 140 ) | 129 ) |
| 141 ] | 130 ] |
| 142 ); | 131 ); |
| 143 | 132 |
| 144 var list = new StyleNode( | 133 List<Node> overlays = []; |
| 145 new Stocklist(stocks: _sortedStocks, query: _searchQuery), | |
| 146 _stocklistHeight); | |
| 147 | |
| 148 var fab = new FloatingActionButton(content: new Icon( | |
| 149 type: 'content/add_white', size: 24), level: 3); | |
| 150 | |
| 151 var children = [ | |
| 152 new Container( | |
| 153 key: 'Content', | |
| 154 style: _style, | |
| 155 children: [toolbar, list] | |
| 156 ), | |
| 157 fab, | |
| 158 drawer | |
| 159 ]; | |
| 160 | 134 |
| 161 if (_menuController != null) { | 135 if (_menuController != null) { |
| 162 var menu = new EventTarget( | 136 overlays.add(new EventTarget( |
| 163 new StockMenu(controller: _menuController), | 137 new StockMenu(controller: _menuController), |
| 164 onGestureTap: (_) { | 138 onGestureTap: (_) { |
| 165 // TODO(abarth): We should close the menu when you tap away from the | 139 // TODO(abarth): We should close the menu when you tap away from the |
| 166 // menu rather than when you tap on the menu. | 140 // menu rather than when you tap on the menu. |
| 167 setState(() { | 141 setState(() { |
| 168 _menuController.close(); | 142 _menuController.close(); |
| 169 _menuController = null; | 143 _menuController = null; |
| 170 }); | 144 }); |
| 171 } | 145 } |
| 172 ); | 146 )); |
| 173 children.add(menu); | |
| 174 } | 147 } |
| 175 | 148 |
| 176 return new Container(key: 'StocksApp', children: children); | 149 return new Scaffold( |
| 150 actionBar: actionBar, |
| 151 content: new Stocklist(stocks: _sortedStocks, query: _searchQuery), |
| 152 fab: new FloatingActionButton( |
| 153 content: new Icon(type: 'content/add_white', size: 24), level: 3), |
| 154 drawer: drawer, |
| 155 overlays: overlays |
| 156 ); |
| 177 } | 157 } |
| 178 } | 158 } |
| OLD | NEW |