[image_picker] Update platform interface analysis options (#4837)

diff --git a/packages/image_picker/image_picker_platform_interface/CHANGELOG.md b/packages/image_picker/image_picker_platform_interface/CHANGELOG.md
index 8f80610..9f6d174 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 5aeb4e7..0000000
--- 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/lib/image_picker_platform_interface.dart b/packages/image_picker/image_picker_platform_interface/lib/image_picker_platform_interface.dart
index 133c05e..bdc1686 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 3731c56..e1e6082 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: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 @@
     int? imageQuality,
     CameraDevice preferredCameraDevice = CameraDevice.rear,
   }) async {
-    String? path = await _getImagePath(
+    final String? path = await _getImagePath(
       source: source,
       maxWidth: maxWidth,
       maxHeight: maxHeight,
@@ -46,9 +46,11 @@
       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<List<dynamic>?> _getMultiImagePath({
@@ -151,7 +153,7 @@
 
     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 @@
     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,
@@ -184,7 +187,7 @@
     int? imageQuality,
     CameraDevice preferredCameraDevice = CameraDevice.rear,
   }) async {
-    String? path = await _getImagePath(
+    final String? path = await _getImagePath(
       source: source,
       maxWidth: maxWidth,
       maxHeight: maxHeight,
@@ -205,9 +208,11 @@
       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
@@ -228,7 +233,7 @@
   Future<LostDataResponse> getLostData() async {
     List<XFile>? pickedFileList;
 
-    Map<String, dynamic>? result =
+    final Map<String, dynamic>? result =
         await _channel.invokeMapMethod<String, dynamic>('retrieve');
 
     if (result == null) {
@@ -237,7 +242,7 @@
 
     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,15 +255,17 @@
     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<String>? pathList =
+        (result['pathList'] as List<dynamic>?)?.cast<String>();
     if (pathList != null) {
-      pickedFileList = [];
-      for (String path in pathList) {
+      pickedFileList = <XFile>[];
+      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 dbc8d89..8f02e16 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 d63bc6a..77bf87c 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 @@
 @immutable
 abstract class PickedFileBase {
   /// Construct a PickedFile
-  PickedFileBase(String path);
+  // ignore: avoid_unused_constructor_parameters
+  const PickedFileBase(String path);
 
   /// 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 24e1931..7d9761a 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,20 +13,21 @@
 ///
 /// It wraps the bytes of a selected file.
 class PickedFile extends PickedFileBase {
-  final String path;
-  final Uint8List? _initBytes;
-
   /// Construct a PickedFile object from its ObjectUrl.
   ///
   /// 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);
 
+  @override
+  final String path;
+  final Uint8List? _initBytes;
+
   Future<Uint8List> get _bytes async {
     if (_initBytes != null) {
-      return Future.value(UnmodifiableUint8ListView(_initBytes!));
+      return Future<Uint8List>.value(UnmodifiableUint8ListView(_initBytes!));
     }
     return http.readBytes(Uri.parse(path));
   }
@@ -38,12 +39,12 @@
 
   @override
   Future<Uint8List> readAsBytes() async {
-    return Future.value(await _bytes);
+    return Future<Uint8List>.value(await _bytes);
   }
 
   @override
   Stream<Uint8List> 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 7037b6b..500cc65 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 @@
 
 /// 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;
@@ -36,6 +36,6 @@
   Stream<Uint8List> openRead([int? start, int? end]) {
     return _file
         .openRead(start ?? 0, end)
-        .map((chunk) => Uint8List.fromList(chunk));
+        .map((List<int> 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 ad7cd3f..7f28442 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/pubspec.yaml b/packages/image_picker/image_picker_platform_interface/pubspec.yaml
index 0dfe2c0..54fd17e 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 @@
 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/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 17caa84..79d971f 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 @@
   TestWidgetsFlutterBinding.ensureInitialized();
 
   group('$MethodChannelImagePicker', () {
-    MethodChannelImagePicker picker = MethodChannelImagePicker();
+    final MethodChannelImagePicker picker = MethodChannelImagePicker();
 
     final List<MethodCall> log = <MethodCall>[];
     dynamic returnValue = '';
@@ -223,7 +223,7 @@
 
     group('#pickMultiImage', () {
       test('calls the method correctly', () async {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         await picker.pickMultiImage();
 
         expect(
@@ -239,7 +239,7 @@
       });
 
       test('passes the width and height arguments correctly', () async {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         await picker.pickMultiImage();
         await picker.pickMultiImage(
           maxWidth: 10.0,
@@ -308,7 +308,7 @@
       });
 
       test('does not accept a negative width or height argument', () {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         expect(
           () => picker.pickMultiImage(maxWidth: -1.0),
           throwsArgumentError,
@@ -321,7 +321,7 @@
       });
 
       test('does not accept a invalid imageQuality argument', () {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         expect(
           () => picker.pickMultiImage(imageQuality: -1),
           throwsArgumentError,
@@ -691,7 +691,7 @@
 
     group('#getMultiImage', () {
       test('calls the method correctly', () async {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         await picker.getMultiImage();
 
         expect(
@@ -707,7 +707,7 @@
       });
 
       test('passes the width and height arguments correctly', () async {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         await picker.getMultiImage();
         await picker.getMultiImage(
           maxWidth: 10.0,
@@ -776,7 +776,7 @@
       });
 
       test('does not accept a negative width or height argument', () {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         expect(
           () => picker.getMultiImage(maxWidth: -1.0),
           throwsArgumentError,
@@ -789,7 +789,7 @@
       });
 
       test('does not accept a invalid imageQuality argument', () {
-        returnValue = ['0', '1'];
+        returnValue = <dynamic>['0', '1'];
         expect(
           () => picker.getMultiImage(imageQuality: -1),
           throwsArgumentError,
@@ -934,7 +934,7 @@
           return <String, dynamic>{
             'type': 'image',
             'path': '/example/path1',
-            'pathList': ['/example/path0', '/example/path1'],
+            'pathList': <dynamic>['/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 7721f66..1723337 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 '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<int> bytes = utf8.encode(expectedStringContents);
-final html.File textFile = html.File([bytes], 'hello.txt');
+final html.File textFile = html.File(<List<int>>[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 d366204..3201d3a 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 '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;
diff --git a/script/configs/custom_analysis.yaml b/script/configs/custom_analysis.yaml
index 13a6819..b802db1 100644
--- a/script/configs/custom_analysis.yaml
+++ b/script/configs/custom_analysis.yaml
@@ -17,7 +17,6 @@
 - google_sign_in/google_sign_in
 - google_sign_in/google_sign_in_platform_interface
 - google_sign_in/google_sign_in_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