Revert "Improve performance of debugCheckHasDirectionality (#81250)" (#81409)

This reverts commit 437ff210aae48bbe976b1503867d01fab153bb57.
diff --git a/packages/flutter/lib/src/material/debug.dart b/packages/flutter/lib/src/material/debug.dart
index ef61d80..af196d6 100644
--- a/packages/flutter/lib/src/material/debug.dart
+++ b/packages/flutter/lib/src/material/debug.dart
@@ -20,8 +20,6 @@
 /// assert(debugCheckHasMaterial(context));
 /// ```
 ///
-/// This method can be expensive (it walks the element tree).
-///
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasMaterial(BuildContext context) {
   assert(() {
@@ -64,11 +62,6 @@
 /// assert(debugCheckHasMaterialLocalizations(context));
 /// ```
 ///
-/// This function has the side-effect of establishing an inheritance
-/// relationship with the nearest [Localizations] widget (see
-/// [BuildContext.dependOnInheritedWidgetOfExactType]). This is ok if the caller
-/// always also calls [Localizations.of] or [Localizations.localeOf].
-///
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasMaterialLocalizations(BuildContext context) {
   assert(() {
@@ -109,8 +102,6 @@
 /// assert(debugCheckHasScaffold(context));
 /// ```
 ///
-/// This method can be expensive (it walks the element tree).
-///
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasScaffold(BuildContext context) {
   assert(() {
@@ -142,8 +133,6 @@
 /// assert(debugCheckHasScaffoldMessenger(context));
 /// ```
 ///
-/// This method can be expensive (it walks the element tree).
-///
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasScaffoldMessenger(BuildContext context) {
   assert(() {
diff --git a/packages/flutter/lib/src/material/material.dart b/packages/flutter/lib/src/material/material.dart
index d05b347..8957157 100644
--- a/packages/flutter/lib/src/material/material.dart
+++ b/packages/flutter/lib/src/material/material.dart
@@ -310,8 +310,6 @@
   /// ```dart
   /// MaterialInkController inkController = Material.of(context);
   /// ```
-  ///
-  /// This method can be expensive (it walks the element tree).
   static MaterialInkController? of(BuildContext context) {
     return context.findAncestorRenderObjectOfType<_RenderInkFeatures>();
   }
diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart
index c525881..526c398 100644
--- a/packages/flutter/lib/src/material/scaffold.dart
+++ b/packages/flutter/lib/src/material/scaffold.dart
@@ -1820,8 +1820,6 @@
   /// If no instance of this class encloses the given context, will cause an
   /// assert in debug mode, and throw an exception in release mode.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// {@tool dartpad --template=freeform}
   /// Typical usage of the [Scaffold.of] function is to call it from within the
   /// `build` method of a child of a [Scaffold].
@@ -2001,8 +1999,6 @@
   /// If no instance of this class encloses the given context, will return null.
   /// To throw an exception instead, use [of] instead of this function.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [of], a similar function to this one that throws if no instance
@@ -2070,8 +2066,6 @@
   /// [Scaffold] so that the client widget gets rebuilt whenever the [hasDrawer]
   /// value changes.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [Scaffold.of], which provides access to the [ScaffoldState] object as a
diff --git a/packages/flutter/lib/src/widgets/animated_list.dart b/packages/flutter/lib/src/widgets/animated_list.dart
index 07a4f66..4af0762 100644
--- a/packages/flutter/lib/src/widgets/animated_list.dart
+++ b/packages/flutter/lib/src/widgets/animated_list.dart
@@ -392,8 +392,6 @@
   /// If no [AnimatedList] surrounds the context given, then this function will
   /// assert in debug mode and throw an exception in release mode.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [maybeOf], a similar function that will return null if no
@@ -431,8 +429,6 @@
   /// If no [AnimatedList] surrounds the context given, then this function will
   /// return null.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [of], a similar function that will throw if no [AnimatedList] ancestor
@@ -812,8 +808,6 @@
   /// If no [SliverAnimatedList] surrounds the context given, then this function
   /// will assert in debug mode and throw an exception in release mode.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [maybeOf], a similar function that will return null if no
@@ -849,8 +843,6 @@
   /// If no [SliverAnimatedList] surrounds the context given, then this function
   /// will return null.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [of], a similar function that will throw if no [SliverAnimatedList]
diff --git a/packages/flutter/lib/src/widgets/debug.dart b/packages/flutter/lib/src/widgets/debug.dart
index 8c364c2..cbb025a 100644
--- a/packages/flutter/lib/src/widgets/debug.dart
+++ b/packages/flutter/lib/src/widgets/debug.dart
@@ -184,8 +184,6 @@
 /// assert(debugCheckHasTable(context));
 /// ```
 ///
-/// This method can be expensive (it walks the element tree).
-///
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasTable(BuildContext context) {
   assert(() {
@@ -217,7 +215,7 @@
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasMediaQuery(BuildContext context) {
   assert(() {
-    if (context.widget is! MediaQuery && context.getElementForInheritedWidgetOfExactType<MediaQuery>() == null) {
+    if (context.widget is! MediaQuery && context.findAncestorWidgetOfExactType<MediaQuery>() == null) {
       throw FlutterError.fromParts(<DiagnosticsNode>[
         ErrorSummary('No MediaQuery widget ancestor found.'),
         ErrorDescription('${context.widget.runtimeType} widgets require a MediaQuery widget ancestor.'),
@@ -269,7 +267,7 @@
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasDirectionality(BuildContext context, { String? why, String? hint, String? alternative }) {
   assert(() {
-    if (context.widget is! Directionality && context.getElementForInheritedWidgetOfExactType<Directionality>() == null) {
+    if (context.widget is! Directionality && context.findAncestorWidgetOfExactType<Directionality>() == null) {
       why = why == null ? '' : ' $why';
       throw FlutterError.fromParts(<DiagnosticsNode>[
         ErrorSummary('No Directionality widget found.'),
@@ -375,8 +373,6 @@
 /// assert(debugCheckHasOverlay(context));
 /// ```
 ///
-/// This method can be expensive (it walks the element tree).
-///
 /// Does nothing if asserts are disabled. Always returns true.
 bool debugCheckHasOverlay(BuildContext context) {
   assert(() {
diff --git a/packages/flutter/lib/src/widgets/inherited_theme.dart b/packages/flutter/lib/src/widgets/inherited_theme.dart
index c49bd9c..9cf746f 100644
--- a/packages/flutter/lib/src/widgets/inherited_theme.dart
+++ b/packages/flutter/lib/src/widgets/inherited_theme.dart
@@ -146,9 +146,6 @@
   /// this method is called again to re-capture the updated themes.
   ///
   /// To wrap a [Widget] in the captured themes, call [CapturedThemes.wrap].
-  ///
-  /// This method can be expensive if there are many widgets between `from` and
-  /// `to` (it walks the element tree between those nodes).
   static CapturedThemes capture({ required BuildContext from, required BuildContext? to }) {
     assert(from != null);
 
diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart
index 681e0c8..0426044 100644
--- a/packages/flutter/lib/src/widgets/navigator.dart
+++ b/packages/flutter/lib/src/widgets/navigator.dart
@@ -2712,8 +2712,6 @@
   ///
   /// If there is no [Navigator] in the give `context`, this function will throw
   /// a [FlutterError] in debug mode, and an exception in release mode.
-  ///
-  /// This method can be expensive (it walks the element tree).
   static NavigatorState of(
     BuildContext context, {
     bool rootNavigator = false,
@@ -2762,8 +2760,6 @@
   /// subsequent instances of [Navigator].
   ///
   /// Will return null if there is no ancestor [Navigator] in the `context`.
-  ///
-  /// This method can be expensive (it walks the element tree).
   static NavigatorState? maybeOf(
       BuildContext context, {
         bool rootNavigator = false,
diff --git a/packages/flutter/lib/src/widgets/overlay.dart b/packages/flutter/lib/src/widgets/overlay.dart
index 104f5cc..989f05e 100644
--- a/packages/flutter/lib/src/widgets/overlay.dart
+++ b/packages/flutter/lib/src/widgets/overlay.dart
@@ -284,8 +284,6 @@
   /// If `rootOverlay` is set to true, the state from the furthest instance of
   /// this class is given instead. Useful for installing overlay entries
   /// above all subsequent instances of [Overlay].
-  ///
-  /// This method can be expensive (it walks the element tree).
   static OverlayState? of(
     BuildContext context, {
     bool rootOverlay = false,
diff --git a/packages/flutter/lib/src/widgets/page_storage.dart b/packages/flutter/lib/src/widgets/page_storage.dart
index 6f203a2..b770da2 100644
--- a/packages/flutter/lib/src/widgets/page_storage.dart
+++ b/packages/flutter/lib/src/widgets/page_storage.dart
@@ -267,8 +267,6 @@
   /// ```dart
   /// PageStorageBucket bucket = PageStorage.of(context);
   /// ```
-  ///
-  /// This method can be expensive (it walks the element tree).
   static PageStorageBucket? of(BuildContext context) {
     final PageStorage? widget = context.findAncestorWidgetOfExactType<PageStorage>();
     return widget?.bucket;
diff --git a/packages/flutter/lib/src/widgets/reorderable_list.dart b/packages/flutter/lib/src/widgets/reorderable_list.dart
index d6f5ae2..2c47270 100644
--- a/packages/flutter/lib/src/widgets/reorderable_list.dart
+++ b/packages/flutter/lib/src/widgets/reorderable_list.dart
@@ -220,8 +220,6 @@
   /// If no [ReorderableList] surrounds the given context, then this function
   /// will assert in debug mode and throw an exception in release mode.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [maybeOf], a similar function that will return null if no
@@ -259,8 +257,6 @@
   /// If no [ReorderableList] surrounds the context given, then this function will
   /// return null.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [of], a similar function that will throw if no [ReorderableList] ancestor
@@ -412,8 +408,6 @@
   /// If no [SliverReorderableList] surrounds the context given, this function
   /// will assert in debug mode and throw an exception in release mode.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [maybeOf], a similar function that will return null if no
@@ -453,8 +447,6 @@
   /// If no [SliverReorderableList] surrounds the context given, this function
   /// will return null.
   ///
-  /// This method can be expensive (it walks the element tree).
-  ///
   /// See also:
   ///
   ///  * [of], a similar function that will throw if no [SliverReorderableList]