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

Unified Diff: sky/sdk/lib/widgets/variable_height_scrollable.dart

Issue 1227823012: Move VariableHeightScrollable to sdk/lib/widgets (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 side-by-side diff with in-line comments
Download patch
Index: sky/sdk/lib/widgets/variable_height_scrollable.dart
diff --git a/sky/sdk/lib/widgets/variable_height_scrollable.dart b/sky/sdk/lib/widgets/variable_height_scrollable.dart
new file mode 100644
index 0000000000000000000000000000000000000000..3e94683000f4c9d53f644a1318e99199f61a9ba5
--- /dev/null
+++ b/sky/sdk/lib/widgets/variable_height_scrollable.dart
@@ -0,0 +1,69 @@
+// 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 'dart:collection';
+
+import '../animation/scroll_behavior.dart';
+import 'basic.dart';
+import 'block_viewport.dart';
+import 'scrollable.dart';
+import 'widget.dart';
+
+class VariableHeightScrollable extends Scrollable {
+ VariableHeightScrollable({
+ String key,
+ this.builder,
+ this.token
+ }) : super(key: key);
+
+ IndexedBuilder builder;
+ Object token;
+
+ void syncFields(VariableHeightScrollable source) {
+ builder = source.builder;
+ token = source.token;
+ super.syncFields(source);
+ }
+
+ ScrollBehavior createScrollBehavior() => new OverscrollBehavior();
+ OverscrollBehavior get scrollBehavior => super.scrollBehavior;
+
+ void _handleSizeChanged(Size newSize) {
+ setState(() {
+ scrollBehavior.containerHeight = newSize.height;
+ });
+ }
+
+ void _handleLayoutChanged(
+ int firstVisibleWidgetIndex,
+ int visibleWidgetCount,
+ UnmodifiableListView<double> widgetOffsets,
+ bool lastWidgetReached) {
+ assert(widgetOffsets.length > 0);
+
+ scrollBehavior.contentsHeight = lastWidgetReached ? widgetOffsets.last : null;
+
+ // We don't know the height of all items yet. Grow the ScrollBehavior's
Hixie 2015/07/10 22:51:38 delete comment-out code
hansmuller 2015/07/10 23:42:06 Done.
+ // contentsHeight a little, to accomodate scrolling further.
+ /*
+ if (!lastWidgetReached)
+ scrollBehavior.contentsHeight += scrollBehavior.containerHeight;
+ */
+
+ if (lastWidgetReached && scrollOffset > scrollBehavior.maxScrollOffset)
+ settleScrollOffset();
+ }
+
+ Widget buildContent() {
+ return new SizeObserver(
+ callback: _handleSizeChanged,
+ child: new BlockViewport(
+ builder: builder,
+ onLayoutChanged: _handleLayoutChanged,
+ startOffset: scrollOffset,
+ token: token
+ )
+ );
+ }
+}
« sky/sdk/lib/widgets/block_viewport.dart ('K') | « sky/sdk/lib/widgets/block_viewport.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698