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();