Merge pull request #2249 from Hixie/size-obs-11
SizeObserver crusade: Remove SizeObserver
This commit is contained in:
commit
8a2865ced3
@ -5,7 +5,6 @@
|
|||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:vector_math/vector_math_64.dart';
|
import 'package:vector_math/vector_math_64.dart';
|
||||||
|
|
||||||
import 'basic_types.dart';
|
|
||||||
import 'box.dart';
|
import 'box.dart';
|
||||||
import 'debug.dart';
|
import 'debug.dart';
|
||||||
import 'object.dart';
|
import 'object.dart';
|
||||||
@ -1167,33 +1166,6 @@ class RenderFractionalTranslation extends RenderProxyBox {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Calls [onSizeChanged] whenever the child's layout size changes
|
|
||||||
///
|
|
||||||
/// Because size observer calls its callback during layout, you cannot modify
|
|
||||||
/// layout information during the callback.
|
|
||||||
class RenderSizeObserver extends RenderProxyBox {
|
|
||||||
RenderSizeObserver({
|
|
||||||
this.onSizeChanged,
|
|
||||||
RenderBox child
|
|
||||||
}) : super(child) {
|
|
||||||
assert(onSizeChanged != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The callback to call whenever the child's layout size changes
|
|
||||||
ValueChanged<Size> onSizeChanged;
|
|
||||||
|
|
||||||
void performLayout() {
|
|
||||||
Size oldSize = hasSize ? size : null;
|
|
||||||
super.performLayout();
|
|
||||||
if (oldSize != size) {
|
|
||||||
// We make a copy of the Size object here because if we leak a _DebugSize
|
|
||||||
// object out of the render tree, we can get confused later if it comes
|
|
||||||
// back and gets set as the size property of a RenderBox.
|
|
||||||
onSizeChanged(new Size(size.width, size.height));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class CustomPainter {
|
abstract class CustomPainter {
|
||||||
const CustomPainter();
|
const CustomPainter();
|
||||||
|
|
||||||
|
@ -838,30 +838,6 @@ class Viewport extends OneChildRenderObjectWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Calls [onSizeChanged] whenever the child's layout size changes
|
|
||||||
///
|
|
||||||
/// Because size observer calls its callback during layout, you cannot modify
|
|
||||||
/// layout information during the callback.
|
|
||||||
class SizeObserver extends OneChildRenderObjectWidget {
|
|
||||||
SizeObserver({ Key key, this.onSizeChanged, Widget child })
|
|
||||||
: super(key: key, child: child) {
|
|
||||||
assert(onSizeChanged != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The callback to call whenever the child's layout size changes
|
|
||||||
final ValueChanged<Size> onSizeChanged;
|
|
||||||
|
|
||||||
RenderSizeObserver createRenderObject() => new RenderSizeObserver(onSizeChanged: onSizeChanged);
|
|
||||||
|
|
||||||
void updateRenderObject(RenderSizeObserver renderObject, SizeObserver oldWidget) {
|
|
||||||
renderObject.onSizeChanged = onSizeChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
void didUnmountRenderObject(RenderSizeObserver renderObject) {
|
|
||||||
renderObject.onSizeChanged = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// CONTAINER
|
// CONTAINER
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@ void main() {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
tester.pump(); // for SizeObservers
|
|
||||||
|
|
||||||
Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
|
Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
|
||||||
Point target = tester.getCenter(tester.findElementByKey(blockKey));
|
Point target = tester.getCenter(tester.findElementByKey(blockKey));
|
||||||
@ -100,7 +99,6 @@ void main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tester.pumpWidget(buildBlock(ViewportAnchor.end));
|
tester.pumpWidget(buildBlock(ViewportAnchor.end));
|
||||||
tester.pump(); // for SizeObservers
|
|
||||||
|
|
||||||
Point target = const Point(200.0, 200.0);
|
Point target = const Point(200.0, 200.0);
|
||||||
tester.tapAt(target);
|
tester.tapAt(target);
|
||||||
@ -108,7 +106,6 @@ void main() {
|
|||||||
expect(second, equals(1));
|
expect(second, equals(1));
|
||||||
|
|
||||||
tester.pumpWidget(buildBlock(ViewportAnchor.start));
|
tester.pumpWidget(buildBlock(ViewportAnchor.start));
|
||||||
tester.pump(); // for SizeObservers
|
|
||||||
|
|
||||||
tester.tapAt(target);
|
tester.tapAt(target);
|
||||||
expect(first, equals(1));
|
expect(first, equals(1));
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
// 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:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:flutter/rendering.dart';
|
|
||||||
import 'package:flutter/widgets.dart';
|
|
||||||
import 'package:test/test.dart';
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
test('SizeObserver notices zero size', () {
|
|
||||||
testWidgets((WidgetTester tester) {
|
|
||||||
List<Size> results = <Size>[];
|
|
||||||
tester.pumpWidget(new Center(
|
|
||||||
child: new SizeObserver(
|
|
||||||
onSizeChanged: (Size size) { results.add(size); },
|
|
||||||
child: new Container(width:0.0, height:0.0)
|
|
||||||
)
|
|
||||||
));
|
|
||||||
expect(results, equals([Size.zero]));
|
|
||||||
tester.pump();
|
|
||||||
expect(results, equals([Size.zero]));
|
|
||||||
tester.pumpWidget(new Center(
|
|
||||||
child: new SizeObserver(
|
|
||||||
onSizeChanged: (Size size) { results.add(size); },
|
|
||||||
child: new Container(width:100.0, height:0.0)
|
|
||||||
)
|
|
||||||
));
|
|
||||||
expect(results, equals([Size.zero, const Size(100.0, 0.0)]));
|
|
||||||
tester.pump();
|
|
||||||
expect(results, equals([Size.zero, const Size(100.0, 0.0)]));
|
|
||||||
tester.pumpWidget(new Center(
|
|
||||||
child: new SizeObserver(
|
|
||||||
onSizeChanged: (Size size) { results.add(size); },
|
|
||||||
child: new Container(width:0.0, height:0.0)
|
|
||||||
)
|
|
||||||
));
|
|
||||||
expect(results, equals([Size.zero, const Size(100.0, 0.0), Size.zero]));
|
|
||||||
tester.pump();
|
|
||||||
expect(results, equals([Size.zero, const Size(100.0, 0.0), Size.zero]));
|
|
||||||
tester.pumpWidget(new Center(
|
|
||||||
child: new SizeObserver(
|
|
||||||
onSizeChanged: (Size size) { results.add(size); },
|
|
||||||
child: new Container(width:0.0, height:0.0)
|
|
||||||
)
|
|
||||||
));
|
|
||||||
expect(results, equals([Size.zero, const Size(100.0, 0.0), Size.zero]));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user