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
