diff --git a/packages/path_provider/CHANGELOG.md b/packages/path_provider/CHANGELOG.md index ea956fcc766f..2e7f5ad33464 100644 --- a/packages/path_provider/CHANGELOG.md +++ b/packages/path_provider/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.2.0 + +* On Android, `getApplicationSupportDirectory` is now supported using `getFilesDir`. +* `getExternalStorageDirectory` now returns `null` instead of throwing an + exception if no external files directory is available. + ## 1.1.2 * `getExternalStorageDirectory` now uses `getExternalFilesDir` on Android. diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index ae432639f75a..f8448cbc15d6 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java @@ -10,6 +10,7 @@ import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; import io.flutter.util.PathUtils; +import java.io.File; public class PathProviderPlugin implements MethodCallHandler { private final Registrar mRegistrar; @@ -37,6 +38,8 @@ public void onMethodCall(MethodCall call, Result result) { case "getStorageDirectory": result.success(getPathProviderStorageDirectory()); break; + case "getApplicationSupportDirectory": + result.success(getApplicationSupportDirectory()); default: result.notImplemented(); } @@ -46,11 +49,19 @@ private String getPathProviderTemporaryDirectory() { return mRegistrar.context().getCacheDir().getPath(); } + private String getApplicationSupportDirectory() { + return PathUtils.getFilesDir(mRegistrar.context()); + } + private String getPathProviderApplicationDocumentsDirectory() { return PathUtils.getDataDirectory(mRegistrar.context()); } private String getPathProviderStorageDirectory() { - return mRegistrar.context().getExternalFilesDir(null).getAbsolutePath(); + final File dir = mRegistrar.context().getExternalFilesDir(null); + if (dir == null) { + return null; + } + return dir.getAbsolutePath(); } } diff --git a/packages/path_provider/lib/path_provider.dart b/packages/path_provider/lib/path_provider.dart index 10755873c321..f834566cd71e 100644 --- a/packages/path_provider/lib/path_provider.dart +++ b/packages/path_provider/lib/path_provider.dart @@ -39,15 +39,14 @@ Future getTemporaryDirectory() async { /// On iOS, this uses the `NSApplicationSupportDirectory` API. /// If this directory does not exist, it is created automatically. /// -/// On Android, this function throws an [UnsupportedError]. +/// On Android, this function uses the `getFilesDir` API on the context. Future getApplicationSupportDirectory() async { - if (!Platform.isIOS) - throw UnsupportedError("getApplicationSupportDirectory requires iOS"); final String path = await _channel.invokeMethod('getApplicationSupportDirectory'); if (path == null) { return null; } + return Directory(path); } @@ -58,7 +57,7 @@ Future getApplicationSupportDirectory() async { /// [getApplicationSupportDirectory] instead if the data is not user-generated. /// /// On Android, this uses the `getDataDirectory` API on the context. Consider -/// using getExternalStorageDirectory instead if data is intended to be visible +/// using [getExternalStorageDirectory] instead if data is intended to be visible /// to the user. Future getApplicationDocumentsDirectory() async { final String path = diff --git a/packages/path_provider/pubspec.yaml b/packages/path_provider/pubspec.yaml index 96f248625b8a..2eed0ae7bd9d 100644 --- a/packages/path_provider/pubspec.yaml +++ b/packages/path_provider/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for getting commonly used locations on the Android & iOS file systems, such as the temp and app data directories. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider -version: 1.1.2 +version: 1.2.0 flutter: plugin: