Fix hang running as a macos desktop app. (#2085)

Fix hang on macos if the terminal doesn't have permission to access the downloads directory.
diff --git a/packages/devtools_app/lib/src/config_specific/file/_file_desktop.dart b/packages/devtools_app/lib/src/config_specific/file/_file_desktop.dart
index 38246d6..1391816 100644
--- a/packages/devtools_app/lib/src/config_specific/file/_file_desktop.dart
+++ b/packages/devtools_app/lib/src/config_specific/file/_file_desktop.dart
@@ -6,6 +6,8 @@
 import 'package:file/local.dart';
 import 'package:path/path.dart' as _path;
 
+import '../logger/logger.dart';
+
 import 'file.dart';
 
 FileSystemDesktop createFileSystem() {
@@ -57,25 +59,35 @@
   List<String> list({String prefix}) {
     final List<String> logs = [];
 
-    final previousCurrentDirectory = _fs.currentDirectory;
+    try {
+      final previousCurrentDirectory = _fs.currentDirectory;
 
-    // TODO(terry): Use path_provider when available?
-    _fs.currentDirectory = exportDirectory();
+      // TODO(terry): Use path_provider when available?
+      _fs.currentDirectory = exportDirectory();
 
-    final allFiles = _fs.currentDirectory.listSync();
-
-    for (FileSystemEntity entry in allFiles) {
-      final basename = _path.basename(entry.path);
-      if (_fs.isFileSync(entry.path) && basename.startsWith(prefix)) {
-        logs.add(basename);
+      if (!_fs.currentDirectory.existsSync()) {
+        return logs;
       }
+      final allFiles = _fs.currentDirectory.listSync(followLinks: false);
+      for (FileSystemEntity entry in allFiles) {
+        final basename = _path.basename(entry.path);
+        if (_fs.isFileSync(entry.path) && basename.startsWith(prefix)) {
+          logs.add(basename);
+        }
+      }
+      // Sort by newest file top-most (DateTime is in the filename).
+      logs.sort((a, b) => b.compareTo(a));
+
+      _fs.currentDirectory = previousCurrentDirectory;
+    } on FileSystemException catch (e) {
+      // TODO(jacobr): prompt the user to grant permission to access the
+      // directory if Flutter ever provides that option or consider using an
+      // alternate directory. This error should generally only occur on MacOS
+      // desktop Catalina and later  where access to the Downloads folder
+      // is not granted by default.
+      log(e.toString());
     }
 
-    // Sort by newest file top-most (DateTime is in the filename).
-    logs.sort((a, b) => b.compareTo(a));
-
-    _fs.currentDirectory = previousCurrentDirectory;
-
     return logs;
   }