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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9678b82e4563174711a74435561ea11129fb1458 |
--- /dev/null |
+++ b/sky/examples/stocks2/lib/stock_app.dart |
@@ -0,0 +1,227 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// import 'package:sky/framework/components/tool_bar.dart'; |
+// import 'package:sky/framework/components/drawer.dart'; |
+// import 'package:sky/framework/components/drawer_header.dart'; |
+// import 'package:sky/framework/components/floating_action_button.dart'; |
+// import 'package:sky/framework/components/icon.dart'; |
+// import 'package:sky/framework/components/icon_button.dart'; |
+// import 'package:sky/framework/components/input.dart'; |
+// import 'package:sky/framework/components/menu_divider.dart'; |
+// import 'package:sky/framework/components/menu_item.dart'; |
+// import 'package:sky/framework/components/modal_overlay.dart'; |
+// import 'package:sky/framework/components/popup_menu.dart'; |
+// import 'package:sky/framework/components/radio.dart'; |
+// import 'package:sky/framework/components/scaffold.dart'; |
+import 'package:sky/framework/fn2.dart'; |
+import 'package:sky/framework/theme/typography.dart' as typography; |
+import 'package:sky/framework/theme/colors.dart'; |
+import 'stock_data.dart'; |
+// import 'stock_list.dart'; |
+// import 'stock_menu.dart'; |
+ |
+import 'dart:async'; |
+import 'package:sky/framework/layout2.dart'; |
+ |
+enum StockMode { Optimistic, Pessimistic } |
+ |
+class StocksApp extends App { |
+ |
+ // static final Style _toolBarStyle = new Style(''' |
+ // background-color: ${Purple[500]};'''); |
+ |
+ // static final Style _searchBarStyle = new Style(''' |
+ // background-color: ${Grey[50]};'''); |
+ |
+ // static final Style _titleStyle = new Style(''' |
+ // ${typography.white.title};'''); |
+ |
+ List<Stock> _stocks = []; |
+ |
+ StocksApp() : super() { |
+ // 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; |
+ }); |
+ } |
+ |
+ // static FlexBoxParentData _flex1 = new FlexBoxParentData()..flex = 1; |
+ |
+ // 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 ParentDataNode(new Text('Optimistic'), _flex1), |
+ // 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 ParentDataNode(new Text('Pessimistic'), _flex1), |
+ // 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')]) |
+ // ] |
+ // ); |
+ // } |
+ |
+ // UINode buildToolBar() { |
+ // return new StyleNode( |
+ // new ToolBar( |
+ // left: new IconButton( |
+ // icon: 'navigation/menu_white', |
+ // onGestureTap: _drawerController.toggle), |
+ // center: new Container( |
+ // style: _titleStyle, |
+ // children: [new Text('Stocks')]), |
+ // right: [ |
+ // new IconButton( |
+ // icon: 'action/search_white', |
+ // onGestureTap: _handleSearchBegin), |
+ // new IconButton( |
+ // icon: 'navigation/more_vert_white', |
+ // onGestureTap: _handleMenuShow) |
+ // ]), |
+ // _toolBarStyle); |
+ // } |
+ |
+ // // TODO(abarth): Should we factor this into a SearchBar in the framework? |
+ // UINode buildSearchBar() { |
+ // return new StyleNode( |
+ // new ToolBar( |
+ // left: new IconButton( |
+ // icon: 'navigation/arrow_back_grey600', |
+ // onGestureTap: _handleSearchEnd), |
+ // center: new Input( |
+ // focused: true, |
+ // placeholder: 'Search stocks', |
+ // onChanged: _handleSearchQueryChanged)), |
+ // _searchBarStyle); |
+ // } |
+ |
+ // void addMenuToOverlays(List<UINode> overlays) { |
+ // if (_menuController == null) |
+ // return; |
+ // overlays.add(new ModalOverlay( |
+ // children: [new StockMenu( |
+ // controller: _menuController, |
+ // autorefresh: _autorefresh, |
+ // onAutorefreshChanged: _handleAutorefreshChanged |
+ // )], |
+ // onDismiss: _handleMenuHide)); |
+ // } |
+ |
+ UINode build() { |
+ // List<UINode> overlays = []; |
+ // addMenuToOverlays(overlays); |
+ |
+ // return new Scaffold( |
+ // header: _isSearching ? buildSearchBar() : buildToolBar(), |
+ // content: new Stocklist(stocks: _stocks, query: _searchQuery), |
+ // fab: new FloatingActionButton( |
+ // content: new Icon(type: 'content/add_white', size: 24), level: 3), |
+ // drawer: _drawerShowing ? buildDrawer() : null, |
+ // overlays: overlays |
+ // ); |
+ } |
+} |
+ |
+void main() { |
+ new StocksApp(); |
+} |