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

Side by Side Diff: sky/sdk/example/stocks/lib/stock_home.dart

Issue 1216613004: Initial implementation of SnackBar (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: abarth cr feedback Created 5 years, 5 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/sdk/BUILD.gn ('k') | sky/sdk/lib/rendering/box.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/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
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
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 }
OLDNEW
« no previous file with comments | « sky/sdk/BUILD.gn ('k') | sky/sdk/lib/rendering/box.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698