Inspector works for widget previews (#8808)

diff --git a/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart b/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart
index 7f94e0e..cc6f9ed 100644
--- a/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart
+++ b/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart
@@ -47,6 +47,21 @@
       'inspector.defaultDetailsViewType';
   static const _customPubRootDirectoriesStoragePrefix =
       'inspector.customPubRootDirectories';
+
+  static const _dartToolDir = '.dart_tool';
+  static const _libDir = 'lib';
+  static const _webDir = 'web';
+  static const _packagesDir = 'packages';
+
+  /// The following are directories that DevTools can use to determine the
+  /// correct pub root directory.
+  static const _knownDirectories = {
+    _dartToolDir,
+    _libDir,
+    _webDir,
+    _packagesDir,
+  };
+
   String? _mainScriptDir;
   bool _checkedFlutterPubRoot = false;
 
@@ -300,21 +315,8 @@
     // /third_party/dart):
     if (isGoogle3Path(parts)) {
       pubRootDirectory = _pubRootDirectoryForGoogle3(parts);
-    } else {
-      final parts = fileUriString.split('/');
-
-      for (int i = parts.length - 1; i >= 0; i--) {
-        final part = parts[i];
-        if (part == 'lib' || part == 'web') {
-          pubRootDirectory = parts.sublist(0, i).join('/');
-          break;
-        }
-
-        if (part == 'packages') {
-          pubRootDirectory = parts.sublist(0, i + 1).join('/');
-          break;
-        }
-      }
+    } else if (_pathContainsKnownDirectories(parts)) {
+      pubRootDirectory = _determinePubRootFromKnownDirectories(parts);
     }
     pubRootDirectory ??= (parts..removeLast()).join('/');
     // Make sure the root directory ends with /, otherwise we will patch with
@@ -326,6 +328,34 @@
     return pubRootDirectory;
   }
 
+  bool _pathContainsKnownDirectories(List<String> pathParts) =>
+      _knownDirectories.any((dir) => pathParts.contains(dir));
+
+  String? _determinePubRootFromKnownDirectories(List<String> pathParts) {
+    pathParts = _maybeRemoveDartToolDirectory(pathParts);
+    for (int i = pathParts.length - 1; i >= 0; i--) {
+      final part = pathParts[i];
+
+      if (part == _libDir || part == _webDir) {
+        pathParts = pathParts.sublist(0, i);
+        break;
+      }
+
+      if (part == _packagesDir) {
+        pathParts = pathParts.sublist(0, i + 1);
+        break;
+      }
+    }
+    return pathParts.join('/');
+  }
+
+  List<String> _maybeRemoveDartToolDirectory(List<String> pathParts) {
+    if (pathParts.contains(_dartToolDir)) {
+      return pathParts.sublist(0, pathParts.indexOf(_dartToolDir));
+    }
+    return pathParts;
+  }
+
   String? _pubRootDirectoryForGoogle3(List<String> pathParts) {
     final strippedParts = stripGoogle3(pathParts);
     if (strippedParts.isEmpty) return null;
diff --git a/packages/devtools_app/test/shared/preferences/preferences_controller_test.dart b/packages/devtools_app/test/shared/preferences/preferences_controller_test.dart
index e5d133a..de10783 100644
--- a/packages/devtools_app/test/shared/preferences/preferences_controller_test.dart
+++ b/packages/devtools_app/test/shared/preferences/preferences_controller_test.dart
@@ -162,6 +162,10 @@
           'my_user/google3/dart_apps/test_app/lib/main.dart': '/dart_apps/',
           'my_user/google3/third_party/dart/dart_apps/test_app/lib/main.dart':
               '/third_party/dart/',
+          'my_user/fake_app/.dart_tool/widget_preview_scaffold':
+              'my_user/fake_app/',
+          'my_user/fake_app/lib/.dart_tool/widget_preview_scaffold':
+              'my_user/fake_app/',
         };
 
         for (final MapEntry(key: rootLib, value: expectedPubRoot)