From da34ddfff460a4800bdd29bfd58986b7971e66a1 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 14 Feb 2022 14:00:50 -0500 Subject: [PATCH 1/4] pubspec fixes and version bump --- .../image_picker_platform_interface/CHANGELOG.md | 4 ++++ .../image_picker_platform_interface/analysis_options.yaml | 1 - .../image_picker_platform_interface/pubspec.yaml | 5 ++--- script/configs/custom_analysis.yaml | 1 - 4 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 packages/image_picker/image_picker_platform_interface/analysis_options.yaml diff --git a/packages/image_picker/image_picker_platform_interface/CHANGELOG.md b/packages/image_picker/image_picker_platform_interface/CHANGELOG.md index 8f80610f307a..9f6d1749c671 100644 --- a/packages/image_picker/image_picker_platform_interface/CHANGELOG.md +++ b/packages/image_picker/image_picker_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.4.4 + +* Internal code cleanup for stricter analysis options. + ## 2.4.3 * Removes dependency on `meta`. diff --git a/packages/image_picker/image_picker_platform_interface/analysis_options.yaml b/packages/image_picker/image_picker_platform_interface/analysis_options.yaml deleted file mode 100644 index 5aeb4e7c5e21..000000000000 --- a/packages/image_picker/image_picker_platform_interface/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: ../../../analysis_options_legacy.yaml diff --git a/packages/image_picker/image_picker_platform_interface/pubspec.yaml b/packages/image_picker/image_picker_platform_interface/pubspec.yaml index 0dfe2c009d59..54fd17e47260 100644 --- a/packages/image_picker/image_picker_platform_interface/pubspec.yaml +++ b/packages/image_picker/image_picker_platform_interface/pubspec.yaml @@ -4,20 +4,19 @@ repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/i issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.4.3 +version: 2.4.4 environment: sdk: ">=2.12.0 <3.0.0" flutter: ">=2.0.0" dependencies: + cross_file: ^0.3.1+1 flutter: sdk: flutter http: ^0.13.0 plugin_platform_interface: ^2.1.0 - cross_file: ^0.3.1+1 dev_dependencies: flutter_test: sdk: flutter - pedantic: ^1.10.0 diff --git a/script/configs/custom_analysis.yaml b/script/configs/custom_analysis.yaml index 493b6e69a54c..f4ea58ec691e 100644 --- a/script/configs/custom_analysis.yaml +++ b/script/configs/custom_analysis.yaml @@ -21,7 +21,6 @@ - google_sign_in/google_sign_in_web - image_picker/image_picker - image_picker/image_picker_for_web -- image_picker/image_picker_platform_interface - in_app_purchase/in_app_purchase - in_app_purchase/in_app_purchase_android - in_app_purchase/in_app_purchase_storekit From e65cbeb53387fce122384e25fc3caf449c6683d6 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 14 Feb 2022 14:04:24 -0500 Subject: [PATCH 2/4] dart fix --- .../lib/image_picker_platform_interface.dart | 2 +- .../method_channel/method_channel_image_picker.dart | 10 +++++----- .../src/platform_interface/image_picker_platform.dart | 2 +- .../lib/src/types/picked_file/base.dart | 2 +- .../lib/src/types/picked_file/html.dart | 5 +++-- .../lib/src/types/picked_file/io.dart | 2 +- .../lib/src/types/types.dart | 4 ++-- .../test/new_method_channel_image_picker_test.dart | 2 +- .../test/picked_file_html_test.dart | 4 ++-- .../test/picked_file_io_test.dart | 6 +++--- 10 files changed, 20 insertions(+), 19 deletions(-) diff --git a/packages/image_picker/image_picker_platform_interface/lib/image_picker_platform_interface.dart b/packages/image_picker/image_picker_platform_interface/lib/image_picker_platform_interface.dart index 133c05ecfebf..bdc168617567 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/image_picker_platform_interface.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/image_picker_platform_interface.dart @@ -2,6 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +export 'package:cross_file/cross_file.dart'; export 'package:image_picker_platform_interface/src/platform_interface/image_picker_platform.dart'; export 'package:image_picker_platform_interface/src/types/types.dart'; -export 'package:cross_file/cross_file.dart'; diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart b/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart index 3731c5626ea2..a032fe97cc95 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart @@ -9,7 +9,7 @@ import 'package:flutter/services.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; -final MethodChannel _channel = MethodChannel('plugins.flutter.io/image_picker'); +const MethodChannel _channel = MethodChannel('plugins.flutter.io/image_picker'); /// An implementation of [ImagePickerPlatform] that uses method channels. class MethodChannelImagePicker extends ImagePickerPlatform { @@ -25,7 +25,7 @@ class MethodChannelImagePicker extends ImagePickerPlatform { int? imageQuality, CameraDevice preferredCameraDevice = CameraDevice.rear, }) async { - String? path = await _getImagePath( + final String? path = await _getImagePath( source: source, maxWidth: maxWidth, maxHeight: maxHeight, @@ -184,7 +184,7 @@ class MethodChannelImagePicker extends ImagePickerPlatform { int? imageQuality, CameraDevice preferredCameraDevice = CameraDevice.rear, }) async { - String? path = await _getImagePath( + final String? path = await _getImagePath( source: source, maxWidth: maxWidth, maxHeight: maxHeight, @@ -228,7 +228,7 @@ class MethodChannelImagePicker extends ImagePickerPlatform { Future getLostData() async { List? pickedFileList; - Map? result = + final Map? result = await _channel.invokeMapMethod('retrieve'); if (result == null) { @@ -258,7 +258,7 @@ class MethodChannelImagePicker extends ImagePickerPlatform { final pathList = result['pathList']; if (pathList != null) { pickedFileList = []; - for (String path in pathList) { + for (final String path in pathList) { pickedFileList.add(XFile(path)); } } diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart b/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart index dbc8d89f8ac0..8f02e1683267 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/platform_interface/image_picker_platform.dart @@ -5,9 +5,9 @@ import 'dart:async'; import 'package:cross_file/cross_file.dart'; -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import 'package:image_picker_platform_interface/src/method_channel/method_channel_image_picker.dart'; import 'package:image_picker_platform_interface/src/types/types.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; /// The interface that implementations of image_picker must implement. /// diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart index d63bc6aad993..1efa37afec6b 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart @@ -18,7 +18,7 @@ import 'package:flutter/foundation.dart' show immutable; @immutable abstract class PickedFileBase { /// Construct a PickedFile - PickedFileBase(String path); + const PickedFileBase(); /// Get the path of the picked file. /// diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart index 24e1931008b6..a411cf6a5729 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart @@ -13,6 +13,7 @@ import './base.dart'; /// /// It wraps the bytes of a selected file. class PickedFile extends PickedFileBase { + @override final String path; final Uint8List? _initBytes; @@ -20,7 +21,7 @@ class PickedFile extends PickedFileBase { /// /// Optionally, this can be initialized with `bytes` /// so no http requests are performed to retrieve files later. - PickedFile(this.path, {Uint8List? bytes}) + const PickedFile(this.path, {Uint8List? bytes}) : _initBytes = bytes, super(path); @@ -43,7 +44,7 @@ class PickedFile extends PickedFileBase { @override Stream openRead([int? start, int? end]) async* { - final bytes = await _bytes; + final Uint8List bytes = await _bytes; yield bytes.sublist(start ?? 0, end ?? bytes.length); } } diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart index 7037b6b7121a..5c89561ffbd1 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart @@ -36,6 +36,6 @@ class PickedFile extends PickedFileBase { Stream openRead([int? start, int? end]) { return _file .openRead(start ?? 0, end) - .map((chunk) => Uint8List.fromList(chunk)); + .map((List chunk) => Uint8List.fromList(chunk)); } } diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/types.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/types.dart index ad7cd3fbcaab..7f2844230287 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/types.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/types.dart @@ -4,9 +4,9 @@ export 'camera_device.dart'; export 'image_source.dart'; -export 'retrieve_type.dart'; -export 'picked_file/picked_file.dart'; export 'lost_data_response.dart'; +export 'picked_file/picked_file.dart'; +export 'retrieve_type.dart'; /// Denotes that an image is being picked. const String kTypeImage = 'image'; diff --git a/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart b/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart index 17caa8456621..85bf2e53cbf2 100644 --- a/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart +++ b/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart @@ -12,7 +12,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('$MethodChannelImagePicker', () { - MethodChannelImagePicker picker = MethodChannelImagePicker(); + final MethodChannelImagePicker picker = MethodChannelImagePicker(); final List log = []; dynamic returnValue = ''; diff --git a/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart b/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart index 7721f66148e0..5a9b31c60968 100644 --- a/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart +++ b/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart @@ -10,14 +10,14 @@ import 'dart:html' as html; import 'package:flutter_test/flutter_test.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; -final String expectedStringContents = 'Hello, world!'; +const String expectedStringContents = 'Hello, world!'; final List bytes = utf8.encode(expectedStringContents); final html.File textFile = html.File([bytes], 'hello.txt'); final String textFileUrl = html.Url.createObjectUrl(textFile); void main() { group('Create with an objectUrl', () { - final pickedFile = PickedFile(textFileUrl); + final PickedFile pickedFile = PickedFile(textFileUrl); test('Can be read as a string', () async { expect(await pickedFile.readAsString(), equals(expectedStringContents)); diff --git a/packages/image_picker/image_picker_platform_interface/test/picked_file_io_test.dart b/packages/image_picker/image_picker_platform_interface/test/picked_file_io_test.dart index d366204c36bf..3201d3adea41 100644 --- a/packages/image_picker/image_picker_platform_interface/test/picked_file_io_test.dart +++ b/packages/image_picker/image_picker_platform_interface/test/picked_file_io_test.dart @@ -11,10 +11,10 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; -final pathPrefix = +final String pathPrefix = Directory.current.path.endsWith('test') ? './assets/' : './test/assets/'; -final path = pathPrefix + 'hello.txt'; -final String expectedStringContents = 'Hello, world!'; +final String path = pathPrefix + 'hello.txt'; +const String expectedStringContents = 'Hello, world!'; final Uint8List bytes = Uint8List.fromList(utf8.encode(expectedStringContents)); final File textFile = File(path); final String textFilePath = textFile.path; From d90af343897d45f73e17c9fdf392a4f60eb3da5a Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 14 Feb 2022 14:04:42 -0500 Subject: [PATCH 3/4] Undo automated change to exported base class --- .../lib/src/types/picked_file/base.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart index 1efa37afec6b..77bf87ca045d 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/base.dart @@ -18,7 +18,8 @@ import 'package:flutter/foundation.dart' show immutable; @immutable abstract class PickedFileBase { /// Construct a PickedFile - const PickedFileBase(); + // ignore: avoid_unused_constructor_parameters + const PickedFileBase(String path); /// Get the path of the picked file. /// From 950d6c1b943b7a507c4ba68a49b207c28f78153f Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 14 Feb 2022 14:10:23 -0500 Subject: [PATCH 4/4] manual fixes --- .../method_channel_image_picker.dart | 31 ++++++++++++------- .../lib/src/types/picked_file/html.dart | 12 +++---- .../lib/src/types/picked_file/io.dart | 4 +-- .../new_method_channel_image_picker_test.dart | 18 +++++------ .../test/picked_file_html_test.dart | 2 +- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart b/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart index a032fe97cc95..e1e6082c8047 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/method_channel/method_channel_image_picker.dart @@ -46,9 +46,11 @@ class MethodChannelImagePicker extends ImagePickerPlatform { maxHeight: maxHeight, imageQuality: imageQuality, ); - if (paths == null) return null; + if (paths == null) { + return null; + } - return paths.map((path) => PickedFile(path)).toList(); + return paths.map((dynamic path) => PickedFile(path as String)).toList(); } Future?> _getMultiImagePath({ @@ -151,7 +153,7 @@ class MethodChannelImagePicker extends ImagePickerPlatform { assert(result.containsKey('path') != result.containsKey('errorCode')); - final String? type = result['type']; + final String? type = result['type'] as String?; assert(type == kTypeImage || type == kTypeVideo); RetrieveType? retrieveType; @@ -164,10 +166,11 @@ class MethodChannelImagePicker extends ImagePickerPlatform { PlatformException? exception; if (result.containsKey('errorCode')) { exception = PlatformException( - code: result['errorCode'], message: result['errorMessage']); + code: result['errorCode']! as String, + message: result['errorMessage'] as String?); } - final String? path = result['path']; + final String? path = result['path'] as String?; return LostData( file: path != null ? PickedFile(path) : null, @@ -205,9 +208,11 @@ class MethodChannelImagePicker extends ImagePickerPlatform { maxHeight: maxHeight, imageQuality: imageQuality, ); - if (paths == null) return null; + if (paths == null) { + return null; + } - return paths.map((path) => XFile(path)).toList(); + return paths.map((dynamic path) => XFile(path as String)).toList(); } @override @@ -237,7 +242,7 @@ class MethodChannelImagePicker extends ImagePickerPlatform { assert(result.containsKey('path') != result.containsKey('errorCode')); - final String? type = result['type']; + final String? type = result['type'] as String?; assert(type == kTypeImage || type == kTypeVideo); RetrieveType? retrieveType; @@ -250,14 +255,16 @@ class MethodChannelImagePicker extends ImagePickerPlatform { PlatformException? exception; if (result.containsKey('errorCode')) { exception = PlatformException( - code: result['errorCode'], message: result['errorMessage']); + code: result['errorCode']! as String, + message: result['errorMessage'] as String?); } - final String? path = result['path']; + final String? path = result['path'] as String?; - final pathList = result['pathList']; + final List? pathList = + (result['pathList'] as List?)?.cast(); if (pathList != null) { - pickedFileList = []; + pickedFileList = []; for (final String path in pathList) { pickedFileList.add(XFile(path)); } diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart index a411cf6a5729..7d9761a57602 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/html.dart @@ -13,10 +13,6 @@ import './base.dart'; /// /// It wraps the bytes of a selected file. class PickedFile extends PickedFileBase { - @override - final String path; - final Uint8List? _initBytes; - /// Construct a PickedFile object from its ObjectUrl. /// /// Optionally, this can be initialized with `bytes` @@ -25,9 +21,13 @@ class PickedFile extends PickedFileBase { : _initBytes = bytes, super(path); + @override + final String path; + final Uint8List? _initBytes; + Future get _bytes async { if (_initBytes != null) { - return Future.value(UnmodifiableUint8ListView(_initBytes!)); + return Future.value(UnmodifiableUint8ListView(_initBytes!)); } return http.readBytes(Uri.parse(path)); } @@ -39,7 +39,7 @@ class PickedFile extends PickedFileBase { @override Future readAsBytes() async { - return Future.value(await _bytes); + return Future.value(await _bytes); } @override diff --git a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart index 5c89561ffbd1..500cc65a0870 100644 --- a/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart +++ b/packages/image_picker/image_picker_platform_interface/lib/src/types/picked_file/io.dart @@ -10,13 +10,13 @@ import './base.dart'; /// A PickedFile backed by a dart:io File. class PickedFile extends PickedFileBase { - final File _file; - /// Construct a PickedFile object backed by a dart:io File. PickedFile(String path) : _file = File(path), super(path); + final File _file; + @override String get path { return _file.path; diff --git a/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart b/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart index 85bf2e53cbf2..79d971f217f0 100644 --- a/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart +++ b/packages/image_picker/image_picker_platform_interface/test/new_method_channel_image_picker_test.dart @@ -223,7 +223,7 @@ void main() { group('#pickMultiImage', () { test('calls the method correctly', () async { - returnValue = ['0', '1']; + returnValue = ['0', '1']; await picker.pickMultiImage(); expect( @@ -239,7 +239,7 @@ void main() { }); test('passes the width and height arguments correctly', () async { - returnValue = ['0', '1']; + returnValue = ['0', '1']; await picker.pickMultiImage(); await picker.pickMultiImage( maxWidth: 10.0, @@ -308,7 +308,7 @@ void main() { }); test('does not accept a negative width or height argument', () { - returnValue = ['0', '1']; + returnValue = ['0', '1']; expect( () => picker.pickMultiImage(maxWidth: -1.0), throwsArgumentError, @@ -321,7 +321,7 @@ void main() { }); test('does not accept a invalid imageQuality argument', () { - returnValue = ['0', '1']; + returnValue = ['0', '1']; expect( () => picker.pickMultiImage(imageQuality: -1), throwsArgumentError, @@ -691,7 +691,7 @@ void main() { group('#getMultiImage', () { test('calls the method correctly', () async { - returnValue = ['0', '1']; + returnValue = ['0', '1']; await picker.getMultiImage(); expect( @@ -707,7 +707,7 @@ void main() { }); test('passes the width and height arguments correctly', () async { - returnValue = ['0', '1']; + returnValue = ['0', '1']; await picker.getMultiImage(); await picker.getMultiImage( maxWidth: 10.0, @@ -776,7 +776,7 @@ void main() { }); test('does not accept a negative width or height argument', () { - returnValue = ['0', '1']; + returnValue = ['0', '1']; expect( () => picker.getMultiImage(maxWidth: -1.0), throwsArgumentError, @@ -789,7 +789,7 @@ void main() { }); test('does not accept a invalid imageQuality argument', () { - returnValue = ['0', '1']; + returnValue = ['0', '1']; expect( () => picker.getMultiImage(imageQuality: -1), throwsArgumentError, @@ -934,7 +934,7 @@ void main() { return { 'type': 'image', 'path': '/example/path1', - 'pathList': ['/example/path0', '/example/path1'], + 'pathList': ['/example/path0', '/example/path1'], }; }); final LostDataResponse response = await picker.getLostData(); diff --git a/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart b/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart index 5a9b31c60968..17233376114a 100644 --- a/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart +++ b/packages/image_picker/image_picker_platform_interface/test/picked_file_html_test.dart @@ -12,7 +12,7 @@ import 'package:image_picker_platform_interface/image_picker_platform_interface. const String expectedStringContents = 'Hello, world!'; final List bytes = utf8.encode(expectedStringContents); -final html.File textFile = html.File([bytes], 'hello.txt'); +final html.File textFile = html.File(>[bytes], 'hello.txt'); final String textFileUrl = html.Url.createObjectUrl(textFile); void main() {