diff --git a/packages/path_provider/path_provider/CHANGELOG.md b/packages/path_provider/path_provider/CHANGELOG.md index b3843f200e3f..a2df04613965 100644 --- a/packages/path_provider/path_provider/CHANGELOG.md +++ b/packages/path_provider/path_provider/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.6.10 +* Linux implementation endorsement + ## 1.6.9 * Post-v2 Android embedding cleanups. diff --git a/packages/path_provider/path_provider/lib/path_provider.dart b/packages/path_provider/path_provider/lib/path_provider.dart index a7643264d52a..ae959b133094 100644 --- a/packages/path_provider/path_provider/lib/path_provider.dart +++ b/packages/path_provider/path_provider/lib/path_provider.dart @@ -3,14 +3,47 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:io' show Directory; +import 'dart:io' show Directory, Platform; +import 'package:flutter/foundation.dart' show kIsWeb, visibleForTesting; +import 'package:path_provider_linux/path_provider_linux.dart'; import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; export 'package:path_provider_platform_interface/path_provider_platform_interface.dart' show StorageDirectory; -PathProviderPlatform get _platform => PathProviderPlatform.instance; +/// Disables platform override in order to use a manually registered [PathProviderPlatform], only for testing right now +/// +/// Make sure to disable the override before using any of the `path_provider` methods +/// To use your own [PathProviderPlatform], make sure to include the following lines +/// ``` +/// PathProviderPlatform.instance = YourPathProviderPlatform(); +/// disablePathProviderPlatformOverride = true; +/// // Use the `path_provider` methods: +/// final dir = await getTemporaryDirectory(); +/// ``` +/// See this issue https://github.com/flutter/flutter/issues/52267 for why this is required +@visibleForTesting +set disablePathProviderPlatformOverride(bool override) { + _disablePlatformOverride = override; +} + +bool _disablePlatformOverride = false; +PathProviderPlatform __platform; + +// This is to manually endorse the linux path provider until automatic registration of dart plugins is implemented. +// See this issue https://github.com/flutter/flutter/issues/52267 for details +PathProviderPlatform get _platform { + if (__platform != null) { + return __platform; + } + if (!kIsWeb && Platform.isLinux && !_disablePlatformOverride) { + __platform = PathProviderLinux(); + } else { + __platform = PathProviderPlatform.instance; + } + return __platform; +} /// Path to the temporary directory on the device that is not backed up and is /// suitable for storing caches of downloaded files. diff --git a/packages/path_provider/path_provider/pubspec.yaml b/packages/path_provider/path_provider/pubspec.yaml index 823b75520a47..98059e148140 100644 --- a/packages/path_provider/path_provider/pubspec.yaml +++ b/packages/path_provider/path_provider/pubspec.yaml @@ -2,7 +2,7 @@ name: path_provider description: Flutter plugin for getting commonly used locations on the Android & iOS file systems, such as the temp and app data directories. homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider/path_provider -version: 1.6.9 +version: 1.6.10 flutter: plugin: @@ -14,13 +14,15 @@ flutter: pluginClass: FLTPathProviderPlugin macos: default_package: path_provider_macos - + linux: + default_package: path_provider_linux dependencies: flutter: sdk: flutter path_provider_platform_interface: ^1.0.1 path_provider_macos: ^0.0.4 + path_provider_linux: ^0.0.1 dev_dependencies: e2e: ^0.2.1 diff --git a/packages/path_provider/path_provider/test/path_provider_test.dart b/packages/path_provider/path_provider/test/path_provider_test.dart index eb17178b9975..90a996fd68c8 100644 --- a/packages/path_provider/path_provider/test/path_provider_test.dart +++ b/packages/path_provider/path_provider/test/path_provider_test.dart @@ -25,6 +25,10 @@ void main() { setUp(() async { PathProviderPlatform.instance = MockPathProviderPlatform(); + // This is required because we manually register the Linux path provider when on the Linux platform. + // Will be removed when automatic registration of dart plugins is implemented. + // See this issue https://github.com/flutter/flutter/issues/52267 for details + disablePathProviderPlatformOverride = true; }); test('getTemporaryDirectory', () async { diff --git a/packages/path_provider/path_provider_linux/CHANGELOG.md b/packages/path_provider/path_provider_linux/CHANGELOG.md index 5592340216dc..8c9cf2f97f8f 100644 --- a/packages/path_provider/path_provider_linux/CHANGELOG.md +++ b/packages/path_provider/path_provider_linux/CHANGELOG.md @@ -1,3 +1,6 @@ +## 0.0.1+1 +* This updates the readme and pubspec and example to reflect the endorsement of this implementation of `path_provider` + ## 0.0.1 * The initial implementation of path_provider for Linux diff --git a/packages/path_provider/path_provider_linux/README.md b/packages/path_provider/path_provider_linux/README.md index 70097d730559..373925d2d96d 100644 --- a/packages/path_provider/path_provider_linux/README.md +++ b/packages/path_provider/path_provider_linux/README.md @@ -2,36 +2,14 @@ The linux implementation of [`path_provider`]. -**Please set your constraint to `path_provider_linux: '>=0.0.y+x <2.0.0'`** +**Please set your constraint to `path_provider: '>=0.0.y+x <2.0.0'`** ## Backward compatible 1.0.0 version is coming The `path_provider` plugin has reached a stable API, we guarantee that version `1.0.0` will be backward compatible with `0.0.y+z`. -Please use `path_provider_linux: '>=0.0.y+x <2.0.0'` as your dependency constraint to allow a smoother ecosystem migration. +Please use `path_provider: '>=0.0.y+x <2.0.0'` as your dependency constraint to allow a smoother ecosystem migration. For more details see: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 ## Usage -### Import the package - -To use this plugin in your Flutter linux app, simply add it as a dependency in -your `pubspec.yaml` alongside the base `path_provider` plugin. - -_(This is only temporary: in the future we hope to make this package an -"endorsed" implementation of `path_provider`, so that it is automatically -included in your Flutter linux app when you depend on `package:path_provider`.)_ - -This is what the above means to your `pubspec.yaml`: - -```yaml -... -dependencies: - ... - path_provider: ^1.5.1 - path_provider_linux: ^0.0.1 - ... -``` - -### Use the plugin - -Once you have the `path_provider_linux` dependency in your pubspec, you should -be able to use `package:path_provider` as normal. +This package is already included as part of the `path_provider` package dependency, and will +be included when using `path_provider` as normal. You will need to use version 1.6.10 or newer. diff --git a/packages/path_provider/path_provider_linux/example/lib/main.dart b/packages/path_provider/path_provider_linux/example/lib/main.dart index b01afb7c86e3..edba63482ad5 100644 --- a/packages/path_provider/path_provider_linux/example/lib/main.dart +++ b/packages/path_provider/path_provider_linux/example/lib/main.dart @@ -1,20 +1,10 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/services.dart'; import 'package:path_provider/path_provider.dart'; -// TODO: Remove the following two lines once path provider endorses the linux plugin -import 'package:path_provider_linux/path_provider_linux.dart'; -import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; void main() async { - // TODO: Remove the following four lines once path provider endorses the linux plugin - if (Platform.isLinux) { - await WidgetsFlutterBinding.ensureInitialized(); - PathProviderPlatform.instance = PathProviderLinux(); - } runApp(MyApp()); } diff --git a/packages/path_provider/path_provider_linux/example/pubspec.yaml b/packages/path_provider/path_provider_linux/example/pubspec.yaml index 2cfe89caefbc..0b9b74792f1f 100644 --- a/packages/path_provider/path_provider_linux/example/pubspec.yaml +++ b/packages/path_provider/path_provider_linux/example/pubspec.yaml @@ -9,11 +9,8 @@ dependencies: flutter: sdk: flutter - path_provider: any - - # TODO: Remove this once path provider endorses the linux implementation - path_provider_linux: - path: ../ + path_provider: + path: ../../path_provider # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. diff --git a/packages/path_provider/path_provider_linux/example/test/widget_test.dart b/packages/path_provider/path_provider_linux/example/test/widget_test.dart index 99be40a7427a..8ebda3b77176 100644 --- a/packages/path_provider/path_provider_linux/example/test/widget_test.dart +++ b/packages/path_provider/path_provider_linux/example/test/widget_test.dart @@ -9,23 +9,20 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:path_provider_linux/path_provider_linux.dart'; import 'package:pathproviderexample/main.dart'; -import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; void main() { group('Test linux path provider example', () { setUpAll(() async { await WidgetsFlutterBinding.ensureInitialized(); - PathProviderPlatform.instance = PathProviderLinux(); }); testWidgets('Finds tmp directory', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.runAsync(() async { await tester.pumpWidget(MyApp()); - await Future.delayed(Duration(milliseconds: 10)); + await Future.delayed(Duration(milliseconds: 20)); await tester.pump(); // Verify that temporary directory is retrieved. @@ -43,7 +40,7 @@ void main() { // Build our app and trigger a frame. await tester.runAsync(() async { await tester.pumpWidget(MyApp()); - await Future.delayed(Duration(milliseconds: 10)); + await Future.delayed(Duration(milliseconds: 20)); await tester.pump(); // Verify that documents directory is retrieved. @@ -61,7 +58,7 @@ void main() { // Build our app and trigger a frame. await tester.runAsync(() async { await tester.pumpWidget(MyApp()); - await Future.delayed(Duration(milliseconds: 10)); + await Future.delayed(Duration(milliseconds: 20)); await tester.pump(); // Verify that downloads directory is retrieved. @@ -80,7 +77,7 @@ void main() { // Build our app and trigger a frame. await tester.runAsync(() async { await tester.pumpWidget(MyApp()); - await Future.delayed(Duration(milliseconds: 10)); + await Future.delayed(Duration(milliseconds: 20)); await tester.pump(); // Verify that Application Support Directory is retrieved. diff --git a/packages/path_provider/path_provider_linux/example/test_driver/path_provider_e2e.dart b/packages/path_provider/path_provider_linux/example/test_driver/path_provider_e2e.dart index 5dd6c0dc51a1..c90c4d96dde5 100644 --- a/packages/path_provider/path_provider_linux/example/test_driver/path_provider_e2e.dart +++ b/packages/path_provider/path_provider_linux/example/test_driver/path_provider_e2e.dart @@ -5,15 +5,11 @@ import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; -import 'package:path_provider_linux/path_provider_linux.dart'; import 'package:e2e/e2e.dart'; void main() { E2EWidgetsFlutterBinding.ensureInitialized(); - if (Platform.isLinux) { - PathProviderPlatform.instance = PathProviderLinux(); - } + testWidgets('getTemporaryDirectory', (WidgetTester tester) async { final Directory result = await getTemporaryDirectory(); _verifySampleFile(result, 'temporaryDirectory'); diff --git a/packages/path_provider/path_provider_linux/pubspec.yaml b/packages/path_provider/path_provider_linux/pubspec.yaml index 77bfba260d82..a3277904bb6e 100644 --- a/packages/path_provider/path_provider_linux/pubspec.yaml +++ b/packages/path_provider/path_provider_linux/pubspec.yaml @@ -1,6 +1,6 @@ name: path_provider_linux description: linux implementation of the path_provider plugin -version: 0.0.1 +version: 0.0.1+1 homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider/path_provider_linux flutter: diff --git a/script/build_all_plugins_app.sh b/script/build_all_plugins_app.sh index 0d670af88814..2c0a90693851 100755 --- a/script/build_all_plugins_app.sh +++ b/script/build_all_plugins_app.sh @@ -21,6 +21,7 @@ readonly EXCLUDED_PLUGINS_LIST=( "google_sign_in_web" "image_picker_platform_interface" "instrumentation_adapter" + "path_provider_linux" "path_provider_macos" "path_provider_platform_interface" "path_provider_web"