diff --git a/packages/path-provider/CHANGELOG.md b/packages/path-provider/CHANGELOG.md index e4e450272dc6..5a0ac2add41e 100644 --- a/packages/path-provider/CHANGELOG.md +++ b/packages/path-provider/CHANGELOG.md @@ -1,3 +1,7 @@ +## [0.2.1] - 2017-05-16 + +* Add function to determine external storage directory. + ## [0.2.0] - 2017-05-10 * Upgrade to new plugin registration. (https://groups.google.com/forum/#!topic/flutter-dev/zba1Ynf2OKM) diff --git a/packages/path-provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java b/packages/path-provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java index 3fedb2868c39..2b507d21ce3d 100644 --- a/packages/path-provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java +++ b/packages/path-provider/android/src/main/java/io/flutter/plugins/path_provider/PathProviderPlugin.java @@ -5,6 +5,7 @@ package io.flutter.plugins.path_provider; import android.app.Activity; +import android.os.Environment; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -35,6 +36,9 @@ public void onMethodCall(MethodCall call, Result result) { case "getApplicationDocumentsDirectory": result.success(getPathProviderApplicationDocumentsDirectory()); break; + case "getStorageDirectory": + result.success(getPathProviderStorageDirectory()); + break; default: result.notImplemented(); } @@ -47,4 +51,8 @@ private String getPathProviderTemporaryDirectory() { private String getPathProviderApplicationDocumentsDirectory() { return PathUtils.getDataDirectory(activity); } + + private String getPathProviderStorageDirectory() { + return Environment.getExternalStorageDirectory().getAbsolutePath(); + } } diff --git a/packages/path-provider/example/lib/main.dart b/packages/path-provider/example/lib/main.dart index e2fdbc61d90f..591cbf94455a 100644 --- a/packages/path-provider/example/lib/main.dart +++ b/packages/path-provider/example/lib/main.dart @@ -36,6 +36,7 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { Future _tempDirectory; Future _appDocumentsDirectory; + Future _externalDocumentsDirectory; void _requestTempDirectory() { setState(() { @@ -65,6 +66,12 @@ class _MyHomePageState extends State { }); } + void _requestExternalStorageDirectory() { + setState(() { + _externalDocumentsDirectory = getExternalStorageDirectory(); + }); + } + @override Widget build(BuildContext context) { return new Scaffold( @@ -105,6 +112,25 @@ class _MyHomePageState extends State { child: new FutureBuilder( future: _appDocumentsDirectory, builder: _buildDirectory), ), + new Column( + children : [ + new Padding( + padding: const EdgeInsets.all(16.0), + child: new RaisedButton( + child: new Text('${Platform.isIOS ? + "External directories are unavailable " + + "on iOS": + "Get External Storage Directory" }'), + onPressed: Platform.isIOS ? null : + _requestExternalStorageDirectory, + ), + ), + ] + ), + new Expanded( + child: new FutureBuilder( + future: _externalDocumentsDirectory, builder: _buildDirectory), + ), ], ), ), diff --git a/packages/path-provider/lib/path_provider.dart b/packages/path-provider/lib/path_provider.dart index 0ef42f762e46..21a8cb5aa655 100644 --- a/packages/path-provider/lib/path_provider.dart +++ b/packages/path-provider/lib/path_provider.dart @@ -40,3 +40,20 @@ const _channel = const MethodChannel('plugins.flutter.io/path_provider'); return null; return new Directory(path); } + + /// Path to a directory where the application may access top level storage. + /// The current operating system should be determined before issuing this + /// function call, as this functionality is only available on Android. + /// + /// On iOS, this function throws an UnsupportedError as it is not possible + /// to access outside the app's sandbox. + /// + /// On Android this returns getExternalStorageDirectory. + Future getExternalStorageDirectory() async { + if (Platform.isIOS) + throw new UnsupportedError("Functionality not available on iOS"); + final String path = await _channel.invokeMethod('getStorageDirectory'); + if (path == null) + return null; + return new Directory(path); + } diff --git a/packages/path-provider/pubspec.yaml b/packages/path-provider/pubspec.yaml index fd3fb2216009..a48c2a7e0d70 100644 --- a/packages/path-provider/pubspec.yaml +++ b/packages/path-provider/pubspec.yaml @@ -1,6 +1,6 @@ name: path_provider -version: 0.2.0 +version: 0.2.1 description: A Flutter plugin for getting commonly used locations on the filesystem. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider