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:vector_math/vector_math_64.dart';
|
||||
|
||||
import 'basic_types.dart';
|
||||
import 'box.dart';
|
||||
import 'debug.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 {
|
||||
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
|
||||
|
||||
|
@ -22,7 +22,6 @@ void main() {
|
||||
]
|
||||
)
|
||||
);
|
||||
tester.pump(); // for SizeObservers
|
||||
|
||||
Point middleOfContainer = tester.getCenter(tester.findText('Hello'));
|
||||
Point target = tester.getCenter(tester.findElementByKey(blockKey));
|
||||
@ -100,7 +99,6 @@ void main() {
|
||||
}
|
||||
|
||||
tester.pumpWidget(buildBlock(ViewportAnchor.end));
|
||||
tester.pump(); // for SizeObservers
|
||||
|
||||
Point target = const Point(200.0, 200.0);
|
||||
tester.tapAt(target);
|
||||
@ -108,7 +106,6 @@ void main() {
|
||||
expect(second, equals(1));
|
||||
|
||||
tester.pumpWidget(buildBlock(ViewportAnchor.start));
|
||||
tester.pump(); // for SizeObservers
|
||||
|
||||
tester.tapAt(target);
|
||||
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