debugger: if controller has been disposed, leave showScriptLocation early (#9884)
diff --git a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart
index 5336255..befe39d 100644
--- a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart
+++ b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart
@@ -218,6 +218,9 @@
     );
 
     if (succeeded) {
+      // The controller may have been disposed while awaiting the asynchronous
+      // location display setup.
+      if (disposed) return;
       // Update the scripts history (and make sure we don't react to the
       // subsequent event).
       scriptsHistory.current.removeListener(_scriptHistoryListener);
@@ -234,6 +237,8 @@
     final isolateRef =
         serviceConnection.serviceManager.isolateManager.selectedIsolate.value!;
     final processedReport = await _getSourceReport(isolateRef, current.script);
+    // The controller may have been disposed while awaiting the source report.
+    if (disposed) return;
 
     parsedScript.value = ParsedScript(
       script: current.script,
@@ -264,6 +269,8 @@
     if (scriptRef.id != parsedScript.value?.script.id) {
       // Try to parse the script if it isn't the currently parsed script:
       final script = await _parseScript(scriptRef);
+      // The controller may have been disposed while awaiting the script parsing.
+      if (disposed) return false;
       if (script == null) {
         // Return early and indicate failure if parsing fails.
         reportError(