baseDirectoryPath static method

Future<String> baseDirectoryPath(
  1. BaseDirectory baseDirectory
)

Returns the path to the directory represented by baseDirectory

Implementation

static Future<String> baseDirectoryPath(BaseDirectory baseDirectory) async {
  Directory? externalStorageDirectory;
  Directory? externalCacheDirectory;
  if (Task.useExternalStorage) {
    externalStorageDirectory = await getExternalStorageDirectory();
    externalCacheDirectory = (await getExternalCacheDirectories())?.first;
    if (externalStorageDirectory == null || externalCacheDirectory == null) {
      throw const FileSystemException(
          'Android external storage is not available');
    }
  }
  final baseDir = switch ((baseDirectory, Task.useExternalStorage)) {
    (BaseDirectory.applicationDocuments, false) =>
      await getApplicationDocumentsDirectory(),
    (BaseDirectory.temporary, false) => await getTemporaryDirectory(),
    (BaseDirectory.applicationSupport, false) =>
      await getApplicationSupportDirectory(),
    (BaseDirectory.applicationLibrary, false)
        when Platform.isMacOS || Platform.isIOS =>
      await getLibraryDirectory(),
    (BaseDirectory.applicationLibrary, false) => Directory(
        p.join((await getApplicationSupportDirectory()).path, 'Library')),
    (BaseDirectory.root, _) => Directory('/'),
    // Android only: external storage variants
    (BaseDirectory.applicationDocuments, true) => externalStorageDirectory!,
    (BaseDirectory.temporary, true) => externalCacheDirectory!,
    (BaseDirectory.applicationSupport, true) =>
      Directory(p.join(externalStorageDirectory!.path, 'Support')),
    (BaseDirectory.applicationLibrary, true) =>
      Directory(p.join(externalStorageDirectory!.path, 'Library'))
  };
  return baseDir.absolute.path;
}