[flutter_tools] Use base DAP detach and ensure correct output (#119076)

diff --git a/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter.dart b/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter.dart
index e89f39d..d7c53c8 100644
--- a/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter.dart
+++ b/packages/flutter_tools/lib/src/debug_adapters/flutter_adapter.dart
@@ -354,7 +354,7 @@
   @override
   Future<void> terminateImpl() async {
     if (isAttach) {
-      await preventBreakingAndResume();
+      await handleDetach();
     }
 
     // Send a request to stop/detach to give Flutter chance to do some cleanup.
diff --git a/packages/flutter_tools/lib/src/debug_adapters/flutter_base_adapter.dart b/packages/flutter_tools/lib/src/debug_adapters/flutter_base_adapter.dart
index a70fdea..2d47118 100644
--- a/packages/flutter_tools/lib/src/debug_adapters/flutter_base_adapter.dart
+++ b/packages/flutter_tools/lib/src/debug_adapters/flutter_base_adapter.dart
@@ -122,7 +122,7 @@
   @override
   Future<void> disconnectImpl() async {
     if (isAttach) {
-      await preventBreakingAndResume();
+      await handleDetach();
     }
     terminatePids(ProcessSignal.sigkill);
   }
diff --git a/packages/flutter_tools/test/integration.shard/debug_adapter/flutter_adapter_test.dart b/packages/flutter_tools/test/integration.shard/debug_adapter/flutter_adapter_test.dart
index 9384e0e..ebcc397 100644
--- a/packages/flutter_tools/test/integration.shard/debug_adapter/flutter_adapter_test.dart
+++ b/packages/flutter_tools/test/integration.shard/debug_adapter/flutter_adapter_test.dart
@@ -561,11 +561,18 @@
         dap.client.setBreakpoint(breakpointFilePath, breakpointLine),
       ], eagerError: true);
 
-      // Detach.
-      await dap.client.terminate();
+      // Detach and expected resume and correct output.
+      await Future.wait(<Future<void>>[
+        // We should print "Detached" instead of "Exited".
+        dap.client.outputEvents.firstWhere((OutputEventBody event) => event.output.contains('\nDetached')),
+        // We should still get terminatedEvent (this signals the DAP server terminating).
+        dap.client.event('terminated'),
+        // We should get output showing the app resumed.
+        testProcess.output.firstWhere((String output) => output.contains('topLevelFunction')),
+        // Trigger the detach.
+        dap.client.terminate(),
+      ]);
 
-      // Ensure we get additional output (confirming the process resumed).
-      await testProcess.output.first;
     });
   });
 }