Index: sky/examples/stocks2/lib/stock_app.dart |
diff --git a/sky/examples/stocks2/lib/stock_app.dart b/sky/examples/stocks2/lib/stock_app.dart |
index 6888a4dec2138eebe9be2beb451e7cca0680dc47..b88d5f806405bab02bdb689d2c3fc8b9f00f2828 100644 |
--- a/sky/examples/stocks2/lib/stock_app.dart |
+++ b/sky/examples/stocks2/lib/stock_app.dart |
@@ -2,212 +2,27 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-import 'package:sky/editing2/input.dart'; |
-import 'package:sky/rendering/box.dart'; |
-import 'package:sky/rendering/paragraph.dart'; |
-import 'package:sky/theme2/colors.dart' as colors; |
-import 'package:sky/theme2/typography.dart' as typography; |
import 'package:sky/widgets/basic.dart'; |
-import 'package:sky/widgets/drawer.dart'; |
-import 'package:sky/widgets/drawer_header.dart'; |
-import 'package:sky/widgets/floating_action_button.dart'; |
-import 'package:sky/widgets/icon.dart'; |
-import 'package:sky/widgets/icon_button.dart'; |
-import 'package:sky/widgets/menu_divider.dart'; |
-import 'package:sky/widgets/menu_item.dart'; |
-import 'package:sky/widgets/modal_overlay.dart'; |
-import 'package:sky/widgets/popup_menu.dart'; |
-import 'package:sky/widgets/radio.dart'; |
-import 'package:sky/widgets/scaffold.dart'; |
-import 'package:sky/widgets/tool_bar.dart'; |
+import 'package:sky/widgets/navigator.dart'; |
import 'package:sky/widgets/widget.dart'; |
-import 'stock_data.dart'; |
-import 'stock_list.dart'; |
-import 'stock_menu.dart'; |
- |
-enum StockMode { optimistic, pessimistic } |
+import 'stock_home.dart'; |
+import 'stock_settings.dart'; |
class StocksApp extends App { |
- |
- List<Stock> _stocks = []; |
- |
- StocksApp({ RenderView renderViewOverride }) : super(renderViewOverride: renderViewOverride) { |
- // if (debug) |
- // new Timer(new Duration(seconds: 1), dumpState); |
- new StockDataFetcher((StockData data) { |
- setState(() { |
- data.appendTo(_stocks); |
- }); |
- }); |
- _drawerController = new DrawerController(_handleDrawerStatusChanged); |
- } |
- |
- bool _isSearching = false; |
- String _searchQuery; |
- |
- void _handleSearchBegin(_) { |
- setState(() { |
- _isSearching = true; |
- }); |
- } |
- |
- void _handleSearchEnd(_) { |
- setState(() { |
- _isSearching = false; |
- _searchQuery = null; |
- }); |
- } |
- |
- void _handleSearchQueryChanged(String query) { |
- setState(() { |
- _searchQuery = query; |
- }); |
- } |
- |
- DrawerController _drawerController; |
- bool _drawerShowing = false; |
- |
- void _handleDrawerStatusChanged(bool showing) { |
- setState(() { |
- _drawerShowing = showing; |
- }); |
- } |
- |
- PopupMenuController _menuController; |
- |
- void _handleMenuShow(_) { |
- setState(() { |
- _menuController = new PopupMenuController(); |
- _menuController.open(); |
- }); |
- } |
- |
- void _handleMenuHide(_) { |
- setState(() { |
- _menuController.close().then((_) { |
- setState(() { |
- _menuController = null; |
- }); |
- }); |
- }); |
- } |
- |
- bool _autorefresh = false; |
- void _handleAutorefreshChanged(bool value) { |
- setState(() { |
- _autorefresh = value; |
- }); |
- } |
- |
- StockMode _stockMode = StockMode.optimistic; |
- void _handleStockModeChange(StockMode value) { |
- setState(() { |
- _stockMode = value; |
- }); |
- } |
- |
- Drawer buildDrawer() { |
- return new Drawer( |
- controller: _drawerController, |
- level: 3, |
- children: [ |
- new DrawerHeader(children: [new Text('Stocks')]), |
- new MenuItem( |
- key: 'Stock list', |
- icon: 'action/assessment', |
- children: [new Text('Stock List')]), |
- new MenuItem( |
- key: 'Account Balance', |
- icon: 'action/account_balance', |
- children: [new Text('Account Balance')]), |
- new MenuDivider(key: 'div1'), |
- new MenuItem( |
- key: 'Optimistic Menu Item', |
- icon: 'action/thumb_up', |
- onGestureTap: (event) => _handleStockModeChange(StockMode.optimistic), |
- children: [ |
- new Flexible(child: new Text('Optimistic')), |
- new Radio(key: 'optimistic-radio', value: StockMode.optimistic, groupValue: _stockMode, onChanged: _handleStockModeChange) |
- ]), |
- new MenuItem( |
- key: 'Pessimistic Menu Item', |
- icon: 'action/thumb_down', |
- onGestureTap: (event) => _handleStockModeChange(StockMode.pessimistic), |
- children: [ |
- new Flexible(child: new Text('Pessimistic')), |
- new Radio(key: 'pessimistic-radio', value: StockMode.pessimistic, groupValue: _stockMode, onChanged: _handleStockModeChange) |
- ]), |
- new MenuDivider(key: 'div2'), |
- new MenuItem( |
- key: 'Settings', |
- icon: 'action/settings', |
- children: [new Text('Settings')]), |
- new MenuItem( |
- key: 'Help & Feedback', |
- icon: 'action/help', |
- children: [new Text('Help & Feedback')]) |
- ] |
- ); |
- } |
- |
- Widget buildToolBar() { |
- return new ToolBar( |
- left: new IconButton( |
- icon: 'navigation/menu_white', |
- onGestureTap: (_) => _drawerController.toggle()), |
- center: new Text('Stocks', style: typography.white.title), |
- right: [ |
- new IconButton( |
- icon: 'action/search_white', |
- onGestureTap: _handleSearchBegin), |
- new IconButton( |
- icon: 'navigation/more_vert_white', |
- onGestureTap: _handleMenuShow) |
- ], |
- backgroundColor: colors.Purple[500] |
- ); |
- } |
- |
- // TODO(abarth): Should we factor this into a SearchBar in the framework? |
- Widget buildSearchBar() { |
- return new ToolBar( |
- left: new IconButton( |
- icon: 'navigation/arrow_back_grey600', |
- onGestureTap: _handleSearchEnd), |
- center: new Input( |
- focused: true, |
- placeholder: 'Search stocks', |
- onChanged: _handleSearchQueryChanged), |
- backgroundColor: colors.Grey[50] |
- ); |
- } |
- |
- void addMenuToOverlays(List<Widget> overlays) { |
- if (_menuController == null) |
- return; |
- overlays.add(new ModalOverlay( |
- children: [new StockMenu( |
- controller: _menuController, |
- autorefresh: _autorefresh, |
- onAutorefreshChanged: _handleAutorefreshChanged |
- )], |
- onDismiss: _handleMenuHide)); |
- } |
- |
Widget build() { |
- List<Widget> overlays = [ |
- new Scaffold( |
- toolbar: _isSearching ? buildSearchBar() : buildToolBar(), |
- body: new Stocklist(stocks: _stocks, query: _searchQuery), |
- floatingActionButton: new FloatingActionButton( |
- child: new Icon(type: 'content/add_white', size: 24) |
+ return new Navigator( |
+ routes: [ |
+ new Route( |
+ name: '/', |
+ builder: (navigator) => new StockHome(navigator) |
), |
- drawer: _drawerShowing ? buildDrawer() : null |
- ), |
- ]; |
- addMenuToOverlays(overlays); |
- return new Stack(overlays); |
+ new Route( |
+ name: '/settings', |
+ builder: (navigator) => new StockSettings(navigator) |
+ ), |
+ ] |
+ ); |
} |
} |