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

Side by Side Diff: sky/sdk/lib/widgets/scrollable_viewport.dart

Issue 1234863004: Remove redundant setState() calls around scroll behaviour updates. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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
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/animation/scroll_behavior.dart'; 5 import 'package:sky/animation/scroll_behavior.dart';
6 import 'package:sky/widgets/basic.dart'; 6 import 'package:sky/widgets/basic.dart';
7 import 'package:sky/widgets/scrollable.dart'; 7 import 'package:sky/widgets/scrollable.dart';
8 8
9 class ScrollableViewport extends Scrollable { 9 class ScrollableViewport extends Scrollable {
10 10
11 ScrollableViewport({ String key, this.child }) : super(key: key); 11 ScrollableViewport({ String key, this.child }) : super(key: key);
12 12
13 Widget child; 13 Widget child;
14 14
15 void syncFields(ScrollableViewport source) { 15 void syncFields(ScrollableViewport source) {
16 child = source.child; 16 child = source.child;
17 super.syncFields(source); 17 super.syncFields(source);
18 } 18 }
19 19
20 ScrollBehavior createScrollBehavior() => new FlingBehavior(); 20 ScrollBehavior createScrollBehavior() => new FlingBehavior();
21 FlingBehavior get scrollBehavior => super.scrollBehavior; 21 FlingBehavior get scrollBehavior => super.scrollBehavior;
22 22
23 double _viewportHeight = 0.0; 23 double _viewportHeight = 0.0;
24 double _childHeight = 0.0; 24 double _childHeight = 0.0;
25 void _handleViewportSizeChanged(Size newSize) { 25 void _handleViewportSizeChanged(Size newSize) {
26 setState(() { 26 _viewportHeight = newSize.height;
27 _viewportHeight = newSize.height; 27 _updateScrollBehaviour();
28 _updateScrollBehaviour();
29 });
30 } 28 }
31 void _handleChildSizeChanged(Size newSize) { 29 void _handleChildSizeChanged(Size newSize) {
32 setState(() { 30 _childHeight = newSize.height;
33 _childHeight = newSize.height; 31 _updateScrollBehaviour();
34 _updateScrollBehaviour();
35 });
36 } 32 }
37 void _updateScrollBehaviour() { 33 void _updateScrollBehaviour() {
38 scrollBehavior.contentsSize = _childHeight; 34 scrollBehavior.contentsSize = _childHeight;
39 scrollBehavior.containerSize = _viewportHeight; 35 scrollBehavior.containerSize = _viewportHeight;
40 if (scrollOffset > scrollBehavior.maxScrollOffset) 36 if (scrollOffset > scrollBehavior.maxScrollOffset)
41 settleScrollOffset(); 37 settleScrollOffset();
42 } 38 }
43 39
44 Widget buildContent() { 40 Widget buildContent() {
45 return new SizeObserver( 41 return new SizeObserver(
(...skipping 16 matching lines...) Expand all
62 58
63 final List<Widget> children; 59 final List<Widget> children;
64 60
65 Widget build() { 61 Widget build() {
66 return new ScrollableViewport( 62 return new ScrollableViewport(
67 child: new Block(children) 63 child: new Block(children)
68 ); 64 );
69 } 65 }
70 66
71 } 67 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698