fix: keep network search field enabled after clearing calls (#9855)

* fix: keep network search field enabled after clearing calls

The Network screen search field was gated on whether any requests were present, so clearing all calls left the field disabled and the query could no longer be edited. Drop the hasRequests gate so the field stays enabled at all times, matching the default search field behavior used elsewhere in DevTools.

Fixes #9853

* Add release note entry for network search field fix (#9855)

* refactor: drop redundant filteredData listener in network controls

The network search field is now always enabled and no longer reads
controller.filteredData in build, so this listener only forced needless
rebuilds of the controls row on every filter change.

* fix: reload network test fixtures each test to prevent shared-ref drain

Clear button mutations on httpProfile/socketProfile in FakeVmServiceWrapper
clear the underlying lists in place. Since setUpAll shared the same fixture
refs across all tests, a test that taps Clear would leave empty profiles for
the next test. Move fixture load to setUp so each test gets fresh instances.

Fixes CI failures on test_ddc and test_dart2js.

* fix: restore IdeTheme global in network profiler test setUpAll

* test: restore httpProfile load in setUpAll

Keep loading both fixtures in setUpAll like before; the per-test reload in the group setUp is what guarantees a clean copy for the clear-calls test.
diff --git a/packages/devtools_app/lib/src/screens/network/network_screen.dart b/packages/devtools_app/lib/src/screens/network/network_screen.dart
index 66843cf..81202fb 100644
--- a/packages/devtools_app/lib/src/screens/network/network_screen.dart
+++ b/packages/devtools_app/lib/src/screens/network/network_screen.dart
@@ -194,8 +194,6 @@
         _recording = controller.recordingNotifier.value;
       });
     });
-
-    addAutoDisposeListener(controller.filteredData);
   }
 
   @override
@@ -205,7 +203,6 @@
     }
 
     final screenWidth = ScreenSize(context).width;
-    final hasRequests = controller.filteredData.value.isNotEmpty;
     return Column(
       children: [
         Row(
@@ -233,7 +230,6 @@
             Expanded(
               child: SearchField<NetworkController>(
                 searchController: controller,
-                searchFieldEnabled: hasRequests,
                 searchFieldWidth: screenWidth <= MediaSize.xs
                     ? defaultSearchFieldWidth
                     : wideSearchFieldWidth,
diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
index d4584ca..504c0bb 100644
--- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
+++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
@@ -43,7 +43,9 @@
 
 ## Network profiler updates
 
-TODO: Remove this section if there are not any updates.
+* Fixed the Network tab search field becoming disabled after clearing all
+  requests, so the search query can now be edited at any time. -
+  [#9855](https://github.com/flutter/devtools/pull/9855)
 
 ## Logging updates
 
diff --git a/packages/devtools_app/test/screens/network/network_profiler_test.dart b/packages/devtools_app/test/screens/network/network_profiler_test.dart
index ff46955..053e745 100644
--- a/packages/devtools_app/test/screens/network/network_profiler_test.dart
+++ b/packages/devtools_app/test/screens/network/network_profiler_test.dart
@@ -65,6 +65,12 @@
 
   group('Network Profiler', () {
     setUp(() {
+      // Reload the fixtures for every test. Clearing requests mutates these
+      // shared profiles in place (FakeVmServiceWrapper clears the same lists
+      // aliased by _startingRequests/_startingSockets), so a test that taps
+      // Clear would otherwise leave them empty for the next test.
+      socketProfile = loadSocketProfile();
+      httpProfile = loadHttpProfile();
       fakeServiceConnection = FakeServiceConnectionManager(
         service: FakeServiceManager.createFakeService(
           socketProfile: socketProfile,
@@ -338,6 +344,48 @@
       // Wait to ensure all the timers have been cancelled.
       await tester.pumpAndSettle(const Duration(seconds: 2));
     });
+
+    testWidgetsWithWindowSize(
+      'search field stays enabled after clearing',
+      windowSize,
+      (WidgetTester tester) async {
+        // Load the network profiler screen.
+        controller = NetworkController();
+        await pumpNetworkScreen(tester);
+
+        // Populate the screen with requests.
+        await loadRequestsAndCheck(tester);
+
+        Finder searchFieldTextField() => find.descendant(
+          of: find.byType(SearchField<NetworkController>),
+          matching: find.byType(TextField),
+        );
+
+        // The search field is enabled while requests are present.
+        expect(
+          tester.widget<TextField>(searchFieldTextField()).enabled,
+          isTrue,
+        );
+
+        // Pause the profiler so polling does not repopulate the requests after
+        // they are cleared below.
+        await tester.tap(find.byType(StartStopRecordingButton));
+        await tester.pumpAndSettle();
+
+        // Clear the results.
+        await tester.tap(find.byType(ClearButton));
+        await tester.pumpAndSettle(const Duration(seconds: 2));
+        expect(controller.requests.value, isEmpty);
+
+        // The search field must stay enabled even with no requests present, so
+        // the query can still be edited before the next batch of requests
+        // arrives.
+        expect(
+          tester.widget<TextField>(searchFieldTextField()).enabled,
+          isTrue,
+        );
+      },
+    );
   });
 
   group('NetworkRequestOverviewView', () {