Make the inspector handle widgets with non-invertible transforms gracefully. (#15761)
diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart
index ce415f2..f2fbb33 100644
--- a/packages/flutter/lib/src/widgets/widget_inspector.dart
+++ b/packages/flutter/lib/src/widgets/widget_inspector.dart
@@ -564,7 +564,14 @@
Matrix4 transform,
) {
bool hit = false;
- final Matrix4 inverse = new Matrix4.inverted(transform);
+ Matrix4 inverse;
+ try {
+ inverse = new Matrix4.inverted(transform);
+ } on ArgumentError {
+ // We cannot invert the transform. That means the object doesn't appear on
+ // screen and cannot be hit.
+ return false;
+ }
final Offset localPosition = MatrixUtils.transformPoint(inverse, position);
final List<DiagnosticsNode> children = object.debugDescribeChildren();
diff --git a/packages/flutter/test/widgets/widget_inspector_test.dart b/packages/flutter/test/widgets/widget_inspector_test.dart
index ee0c118..0b380ce 100644
--- a/packages/flutter/test/widgets/widget_inspector_test.dart
+++ b/packages/flutter/test/widgets/widget_inspector_test.dart
@@ -117,6 +117,31 @@
expect(paragraphText(getInspectorState().selection.current), equals('BOTTOM'));
});
+ testWidgets('WidgetInspector non-invertible transform regression test', (WidgetTester tester) async {
+ await tester.pumpWidget(
+ new Directionality(
+ textDirection: TextDirection.ltr,
+ child: new WidgetInspector(
+ selectButtonBuilder: null,
+ child: new Transform(
+ transform: new Matrix4.identity()..scale(0.0),
+ child: new Stack(
+ children: const <Widget>[
+ const Text('a', textDirection: TextDirection.ltr),
+ const Text('b', textDirection: TextDirection.ltr),
+ const Text('c', textDirection: TextDirection.ltr),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+
+ await tester.tap(find.byType(Transform));
+
+ expect(true, isTrue); // Expect that we reach here without crashing.
+ });
+
testWidgets('WidgetInspector scroll test', (WidgetTester tester) async {
final Key childKey = new UniqueKey();
final GlobalKey selectButtonKey = new GlobalKey();