diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md
index adf696a..ee0accb 100644
--- a/packages/video_player/video_player/CHANGELOG.md
+++ b/packages/video_player/video_player/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.2.19
+
+* Internal code cleanup for stricter analysis options.
+
 ## 2.2.18
 
 * Moves Android and iOS implementations to federated packages.
diff --git a/packages/video_player/video_player/analysis_options.yaml b/packages/video_player/video_player/analysis_options.yaml
deleted file mode 100644
index 5aeb4e7..0000000
--- a/packages/video_player/video_player/analysis_options.yaml
+++ /dev/null
@@ -1 +0,0 @@
-include: ../../../analysis_options_legacy.yaml
diff --git a/packages/video_player/video_player/example/integration_test/controller_swap_test.dart b/packages/video_player/video_player/example/integration_test/controller_swap_test.dart
index 8478076..f80e600 100644
--- a/packages/video_player/video_player/example/integration_test/controller_swap_test.dart
+++ b/packages/video_player/video_player/example/integration_test/controller_swap_test.dart
@@ -6,8 +6,8 @@
 
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
-import 'package:integration_test/integration_test.dart';
 import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
 import 'package:video_player/video_player.dart';
 
 const Duration _playDuration = Duration(seconds: 1);
@@ -18,13 +18,13 @@
     'can substitute one controller by another without crashing',
     (WidgetTester tester) async {
       // Use WebM for web to allow CI to use Chromium.
-      final String videoAssetKey =
+      const String videoAssetKey =
           kIsWeb ? 'assets/Butterfly-209.webm' : 'assets/Butterfly-209.mp4';
 
-      VideoPlayerController controller = VideoPlayerController.asset(
+      final VideoPlayerController controller = VideoPlayerController.asset(
         videoAssetKey,
       );
-      VideoPlayerController another = VideoPlayerController.asset(
+      final VideoPlayerController another = VideoPlayerController.asset(
         videoAssetKey,
       );
       await controller.initialize();
@@ -32,18 +32,16 @@
       await controller.setVolume(0);
       await another.setVolume(0);
 
-      final Completer<void> started = Completer();
-      final Completer<void> ended = Completer();
-      bool startedBuffering = false;
-      bool endedBuffering = false;
+      final Completer<void> started = Completer<void>();
+      final Completer<void> ended = Completer<void>();
 
       another.addListener(() {
-        if (another.value.isBuffering && !startedBuffering) {
-          startedBuffering = true;
+        if (another.value.isBuffering && !started.isCompleted) {
           started.complete();
         }
-        if (startedBuffering && !another.value.isBuffering && !endedBuffering) {
-          endedBuffering = true;
+        if (started.isCompleted &&
+            !another.value.isBuffering &&
+            !ended.isCompleted) {
           ended.complete();
         }
       });
@@ -69,11 +67,8 @@
       expect(another.value.position,
           (Duration position) => position > const Duration(seconds: 0));
 
-      await started;
-      expect(startedBuffering, true);
-
-      await ended;
-      expect(endedBuffering, true);
+      await expectLater(started.future, completes);
+      await expectLater(ended.future, completes);
     },
     skip: !(kIsWeb || defaultTargetPlatform == TargetPlatform.android),
   );
@@ -86,7 +81,7 @@
       textDirection: TextDirection.ltr,
       child: Center(
         child: AspectRatio(
-          key: Key('same'),
+          key: const Key('same'),
           aspectRatio: controller.value.aspectRatio,
           child: VideoPlayer(controller),
         ),
diff --git a/packages/video_player/video_player/example/integration_test/video_player_test.dart b/packages/video_player/video_player/example/integration_test/video_player_test.dart
index 0c2252b..746c63f 100644
--- a/packages/video_player/video_player/example/integration_test/video_player_test.dart
+++ b/packages/video_player/video_player/example/integration_test/video_player_test.dart
@@ -17,7 +17,7 @@
 const Duration _playDuration = Duration(seconds: 1);
 
 // Use WebM for web to allow CI to use Chromium.
-final String _videoAssetKey =
+const String _videoAssetKey =
     kIsWeb ? 'assets/Butterfly-209.webm' : 'assets/Butterfly-209.mp4';
 
 // Returns the URL to load an asset from this example app as a network source.
@@ -48,13 +48,14 @@
       expect(_controller.value.isPlaying, false);
       // The WebM version has a slightly different duration than the MP4.
       expect(_controller.value.duration,
-          Duration(seconds: 7, milliseconds: kIsWeb ? 544 : 540));
+          const Duration(seconds: 7, milliseconds: kIsWeb ? 544 : 540));
     });
 
     testWidgets(
       'live stream duration != 0',
       (WidgetTester tester) async {
-        VideoPlayerController networkController = VideoPlayerController.network(
+        final VideoPlayerController networkController =
+            VideoPlayerController.network(
           'https://cph-p2p-msl.akamaized.net/hls/live/2000341/test/master.m3u8',
         );
         await networkController.initialize();
@@ -65,7 +66,7 @@
         expect(networkController.value.duration,
             (Duration duration) => duration != Duration.zero);
       },
-      skip: (kIsWeb),
+      skip: kIsWeb,
     );
 
     testWidgets(
@@ -124,7 +125,7 @@
         // Mute to allow playing without DOM interaction on Web.
         // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
         await _controller.setVolume(0);
-        Duration tenMillisBeforeEnd =
+        final Duration tenMillisBeforeEnd =
             _controller.value.duration - const Duration(milliseconds: 10);
         await _controller.seekTo(tenMillisBeforeEnd);
         await _controller.play();
@@ -203,12 +204,12 @@
   group('file-based videos', () {
     setUp(() async {
       // Load the data from the asset.
-      String tempDir = (await getTemporaryDirectory()).path;
-      ByteData bytes = await rootBundle.load(_videoAssetKey);
+      final String tempDir = (await getTemporaryDirectory()).path;
+      final ByteData bytes = await rootBundle.load(_videoAssetKey);
 
       // Write it to a file to use as a source.
       final String filename = _videoAssetKey.split('/').last;
-      File file = File('$tempDir/$filename');
+      final File file = File('$tempDir/$filename');
       await file.writeAsBytes(bytes.buffer.asInt8List());
 
       _controller = VideoPlayerController.file(file);
@@ -244,8 +245,8 @@
         // Mute to allow playing without DOM interaction on Web.
         // See https://developers.google.com/web/updates/2017/09/autoplay-policy-changes
         await _controller.setVolume(0);
-        final Completer<void> started = Completer();
-        final Completer<void> ended = Completer();
+        final Completer<void> started = Completer<void>();
+        final Completer<void> ended = Completer<void>();
         _controller.addListener(() {
           if (!started.isCompleted && _controller.value.isBuffering) {
             started.complete();
@@ -291,7 +292,7 @@
       // The audio was made with 44100 Hz, 192 Kbps CBR, and 32 bits.
       expect(
         _controller.value.duration,
-        Duration(seconds: 5, milliseconds: kIsWeb ? 42 : 41),
+        const Duration(seconds: 5, milliseconds: kIsWeb ? 42 : 41),
       );
     });
 
diff --git a/packages/video_player/video_player/example/lib/main.dart b/packages/video_player/video_player/example/lib/main.dart
index 9297cc6..5d496a9 100644
--- a/packages/video_player/video_player/example/lib/main.dart
+++ b/packages/video_player/video_player/example/lib/main.dart
@@ -47,10 +47,10 @@
             tabs: <Widget>[
               Tab(
                 icon: Icon(Icons.cloud),
-                text: "Remote",
+                text: 'Remote',
               ),
-              Tab(icon: Icon(Icons.insert_drive_file), text: "Asset"),
-              Tab(icon: Icon(Icons.list), text: "List example"),
+              Tab(icon: Icon(Icons.insert_drive_file), text: 'Asset'),
+              Tab(icon: Icon(Icons.list), text: 'List example'),
             ],
           ),
         ),
@@ -71,20 +71,20 @@
   Widget build(BuildContext context) {
     return ListView(
       children: <Widget>[
-        _ExampleCard(title: "Item a"),
-        _ExampleCard(title: "Item b"),
-        _ExampleCard(title: "Item c"),
-        _ExampleCard(title: "Item d"),
-        _ExampleCard(title: "Item e"),
-        _ExampleCard(title: "Item f"),
-        _ExampleCard(title: "Item g"),
+        const _ExampleCard(title: 'Item a'),
+        const _ExampleCard(title: 'Item b'),
+        const _ExampleCard(title: 'Item c'),
+        const _ExampleCard(title: 'Item d'),
+        const _ExampleCard(title: 'Item e'),
+        const _ExampleCard(title: 'Item f'),
+        const _ExampleCard(title: 'Item g'),
         Card(
             child: Column(children: <Widget>[
           Column(
             children: <Widget>[
               const ListTile(
                 leading: Icon(Icons.cake),
-                title: Text("Video video"),
+                title: Text('Video video'),
               ),
               Stack(
                   alignment: FractionalOffset.bottomRight +
@@ -96,11 +96,11 @@
             ],
           ),
         ])),
-        _ExampleCard(title: "Item h"),
-        _ExampleCard(title: "Item i"),
-        _ExampleCard(title: "Item j"),
-        _ExampleCard(title: "Item k"),
-        _ExampleCard(title: "Item l"),
+        const _ExampleCard(title: 'Item h'),
+        const _ExampleCard(title: 'Item i'),
+        const _ExampleCard(title: 'Item j'),
+        const _ExampleCard(title: 'Item k'),
+        const _ExampleCard(title: 'Item l'),
       ],
     );
   }
@@ -269,7 +269,7 @@
   const _ControlsOverlay({Key? key, required this.controller})
       : super(key: key);
 
-  static const _exampleCaptionOffsets = [
+  static const List<Duration> _exampleCaptionOffsets = <Duration>[
     Duration(seconds: -10),
     Duration(seconds: -3),
     Duration(seconds: -1, milliseconds: -500),
@@ -280,7 +280,7 @@
     Duration(seconds: 3),
     Duration(seconds: 10),
   ];
-  static const _examplePlaybackRates = [
+  static const List<double> _examplePlaybackRates = <double>[
     0.25,
     0.5,
     1.0,
@@ -298,13 +298,13 @@
     return Stack(
       children: <Widget>[
         AnimatedSwitcher(
-          duration: Duration(milliseconds: 50),
-          reverseDuration: Duration(milliseconds: 200),
+          duration: const Duration(milliseconds: 50),
+          reverseDuration: const Duration(milliseconds: 200),
           child: controller.value.isPlaying
-              ? SizedBox.shrink()
+              ? const SizedBox.shrink()
               : Container(
                   color: Colors.black26,
-                  child: Center(
+                  child: const Center(
                     child: Icon(
                       Icons.play_arrow,
                       color: Colors.white,
@@ -324,13 +324,13 @@
           child: PopupMenuButton<Duration>(
             initialValue: controller.value.captionOffset,
             tooltip: 'Caption Offset',
-            onSelected: (delay) {
+            onSelected: (Duration delay) {
               controller.setCaptionOffset(delay);
             },
-            itemBuilder: (context) {
-              return [
-                for (final offsetDuration in _exampleCaptionOffsets)
-                  PopupMenuItem(
+            itemBuilder: (BuildContext context) {
+              return <PopupMenuItem<Duration>>[
+                for (final Duration offsetDuration in _exampleCaptionOffsets)
+                  PopupMenuItem<Duration>(
                     value: offsetDuration,
                     child: Text('${offsetDuration.inMilliseconds}ms'),
                   )
@@ -353,13 +353,13 @@
           child: PopupMenuButton<double>(
             initialValue: controller.value.playbackSpeed,
             tooltip: 'Playback speed',
-            onSelected: (speed) {
+            onSelected: (double speed) {
               controller.setPlaybackSpeed(speed);
             },
-            itemBuilder: (context) {
-              return [
-                for (final speed in _examplePlaybackRates)
-                  PopupMenuItem(
+            itemBuilder: (BuildContext context) {
+              return <PopupMenuItem<double>>[
+                for (final double speed in _examplePlaybackRates)
+                  PopupMenuItem<double>(
                     value: speed,
                     child: Text('${speed}x'),
                   )
diff --git a/packages/video_player/video_player/example/pubspec.yaml b/packages/video_player/video_player/example/pubspec.yaml
index eef6eb7..6032f3c 100644
--- a/packages/video_player/video_player/example/pubspec.yaml
+++ b/packages/video_player/video_player/example/pubspec.yaml
@@ -18,14 +18,13 @@
     path: ../
 
 dev_dependencies:
-  flutter_test:
-    sdk: flutter
   flutter_driver:
     sdk: flutter
+  flutter_test:
+    sdk: flutter
   integration_test:
     sdk: flutter
   path_provider: ^2.0.6
-  pedantic: ^1.10.0
   test: any
 
 flutter:
diff --git a/packages/video_player/video_player/example/test_driver/video_player_test.dart b/packages/video_player/video_player/example/test_driver/video_player_test.dart
index 1d5ac79..5fbed80 100644
--- a/packages/video_player/video_player/example/test_driver/video_player_test.dart
+++ b/packages/video_player/video_player/example/test_driver/video_player_test.dart
@@ -12,8 +12,8 @@
     await driver.close();
   });
 
-  //TODO(cyanglaz): Use TabBar tabs to navigate between pages after https://github.com/flutter/flutter/issues/16991 is fixed.
-  //TODO(cyanglaz): Un-skip the test after https://github.com/flutter/flutter/issues/43012 is fixed
+  // TODO(cyanglaz): Use TabBar tabs to navigate between pages after https://github.com/flutter/flutter/issues/16991 is fixed.
+  // TODO(cyanglaz): Un-skip the test after https://github.com/flutter/flutter/issues/43012 is fixed
   test('Push a page contains video and pop back, do not crash.', () async {
     final SerializableFinder pushTab = find.byValueKey('push_tab');
     await driver.waitFor(pushTab);
diff --git a/packages/video_player/video_player/lib/src/closed_caption_file.dart b/packages/video_player/video_player/lib/src/closed_caption_file.dart
index e410e26..324ffc4 100644
--- a/packages/video_player/video_player/lib/src/closed_caption_file.dart
+++ b/packages/video_player/video_player/lib/src/closed_caption_file.dart
@@ -2,10 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'sub_rip.dart';
-export 'sub_rip.dart' show SubRipCaptionFile;
+import 'package:flutter/foundation.dart' show objectRuntimeType;
 
+import 'sub_rip.dart';
 import 'web_vtt.dart';
+
+export 'sub_rip.dart' show SubRipCaptionFile;
 export 'web_vtt.dart' show WebVTTCaptionFile;
 
 /// A structured representation of a parsed closed caption file.
@@ -66,7 +68,7 @@
 
   @override
   String toString() {
-    return '$runtimeType('
+    return '${objectRuntimeType(this, 'Caption')}('
         'number: $number, '
         'start: $start, '
         'end: $end, '
diff --git a/packages/video_player/video_player/lib/src/sub_rip.dart b/packages/video_player/video_player/lib/src/sub_rip.dart
index 5d6863f..7b807cd 100644
--- a/packages/video_player/video_player/lib/src/sub_rip.dart
+++ b/packages/video_player/video_player/lib/src/sub_rip.dart
@@ -28,8 +28,10 @@
 
 List<Caption> _parseCaptionsFromSubRipString(String file) {
   final List<Caption> captions = <Caption>[];
-  for (List<String> captionLines in _readSubRipFile(file)) {
-    if (captionLines.length < 3) break;
+  for (final List<String> captionLines in _readSubRipFile(file)) {
+    if (captionLines.length < 3) {
+      break;
+    }
 
     final int captionNumber = int.parse(captionLines[0]);
     final _CaptionRange captionRange =
@@ -52,11 +54,11 @@
 }
 
 class _CaptionRange {
+  _CaptionRange(this.start, this.end);
+
   final Duration start;
   final Duration end;
 
-  _CaptionRange(this.start, this.end);
-
   // Assumes format from an SubRip file.
   // For example:
   // 00:01:54,724 --> 00:01:56,760
diff --git a/packages/video_player/video_player/lib/src/web_vtt.dart b/packages/video_player/video_player/lib/src/web_vtt.dart
index 6c4527d..5527e62 100644
--- a/packages/video_player/video_player/lib/src/web_vtt.dart
+++ b/packages/video_player/video_player/lib/src/web_vtt.dart
@@ -5,9 +5,9 @@
 import 'dart:convert';
 
 import 'package:html/dom.dart';
+import 'package:html/parser.dart' as html_parser;
 
 import 'closed_caption_file.dart';
-import 'package:html/parser.dart' as html_parser;
 
 /// Represents a [ClosedCaptionFile], parsed from the WebVTT file format.
 /// See: https://en.wikipedia.org/wiki/WebVTT
@@ -28,10 +28,10 @@
   final List<Caption> captions = <Caption>[];
 
   // Ignore metadata
-  Set<String> metadata = {'HEADER', 'NOTE', 'REGION', 'WEBVTT'};
+  final Set<String> metadata = <String>{'HEADER', 'NOTE', 'REGION', 'WEBVTT'};
 
   int captionNumber = 1;
-  for (List<String> captionLines in _readWebVTTFile(file)) {
+  for (final List<String> captionLines in _readWebVTTFile(file)) {
     // CaptionLines represent a complete caption.
     // E.g
     // [
@@ -39,14 +39,18 @@
     //  ['Introduction']
     // ]
     // If caption has just header or time, but no text, `captionLines.length` will be 1.
-    if (captionLines.length < 2) continue;
+    if (captionLines.length < 2) {
+      continue;
+    }
 
     // If caption has header equal metadata, ignore.
-    String metadaType = captionLines[0].split(' ')[0];
-    if (metadata.contains(metadaType)) continue;
+    final String metadaType = captionLines[0].split(' ')[0];
+    if (metadata.contains(metadaType)) {
+      continue;
+    }
 
     // Caption has header
-    bool hasHeader = captionLines.length > 2;
+    final bool hasHeader = captionLines.length > 2;
     if (hasHeader) {
       final int? tryParseCaptionNumber = int.tryParse(captionLines[0]);
       if (tryParseCaptionNumber != null) {
@@ -82,11 +86,11 @@
 }
 
 class _CaptionRange {
+  _CaptionRange(this.start, this.end);
+
   final Duration start;
   final Duration end;
 
-  _CaptionRange(this.start, this.end);
-
   // Assumes format from an VTT file.
   // For example:
   // 00:09.000 --> 00:11.000
@@ -161,7 +165,7 @@
     return null;
   }
 
-  List<String> milisecondsStyles = dotSections[1].split(" ");
+  final List<String> milisecondsStyles = dotSections[1].split(' ');
 
   // TODO(cyanglaz): Handle caption styles.
   // https://github.com/flutter/flutter/issues/90009.
@@ -172,7 +176,7 @@
   // ```
   // For a better readable code style, style parsing should happen before
   // calling this method. See: https://github.com/flutter/plugins/pull/2878/files#r713381134.
-  int milliseconds = int.parse(milisecondsStyles[0]);
+  final int milliseconds = int.parse(milisecondsStyles[0]);
 
   return Duration(
     hours: hours,
diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart
index 8fd2162..672ba2e 100644
--- a/packages/video_player/video_player/lib/video_player.dart
+++ b/packages/video_player/video_player/lib/video_player.dart
@@ -10,16 +10,17 @@
 import 'package:flutter/services.dart';
 import 'package:video_player_platform_interface/video_player_platform_interface.dart';
 
+import 'src/closed_caption_file.dart';
+
 export 'package:video_player_platform_interface/video_player_platform_interface.dart'
     show DurationRange, DataSourceType, VideoFormat, VideoPlayerOptions;
 
-import 'src/closed_caption_file.dart';
 export 'src/closed_caption_file.dart';
 
 VideoPlayerPlatform? _lastVideoPlayerPlatform;
 
 VideoPlayerPlatform get _videoPlayerPlatform {
-  VideoPlayerPlatform currentInstance = VideoPlayerPlatform.instance;
+  final VideoPlayerPlatform currentInstance = VideoPlayerPlatform.instance;
   if (_lastVideoPlayerPlatform != currentInstance) {
     // This will clear all open videos on the platform when a full restart is
     // performed.
@@ -32,10 +33,6 @@
 /// The duration, current position, buffering state, error state and settings
 /// of a [VideoPlayerController].
 class VideoPlayerValue {
-  /// This constant is just to indicate that parameter is not passed to [copyWith]
-  /// workaround for this issue https://github.com/dart-lang/language/issues/2009
-  static const _defaultErrorDescription = 'defaultErrorDescription';
-
   /// Constructs a video with the given values. Only [duration] is required. The
   /// rest will initialize with default values when unset.
   VideoPlayerValue({
@@ -65,6 +62,10 @@
             isInitialized: false,
             errorDescription: errorDescription);
 
+  /// This constant is just to indicate that parameter is not passed to [copyWith]
+  /// workaround for this issue https://github.com/dart-lang/language/issues/2009
+  static const String _defaultErrorDescription = 'defaultErrorDescription';
+
   /// The total duration of the video.
   ///
   /// The duration is [Duration.zero] if the video hasn't been initialized.
@@ -172,7 +173,7 @@
 
   @override
   String toString() {
-    return '$runtimeType('
+    return '${objectRuntimeType(this, 'VideoPlayerValue')}('
         'duration: $duration, '
         'size: $size, '
         'position: $position, '
@@ -209,7 +210,7 @@
       {this.package, this.closedCaptionFile, this.videoPlayerOptions})
       : dataSourceType = DataSourceType.asset,
         formatHint = null,
-        httpHeaders = const {},
+        httpHeaders = const <String, String>{},
         super(VideoPlayerValue(duration: Duration.zero));
 
   /// Constructs a [VideoPlayerController] playing a video from obtained from
@@ -226,7 +227,7 @@
     this.formatHint,
     this.closedCaptionFile,
     this.videoPlayerOptions,
-    this.httpHeaders = const {},
+    this.httpHeaders = const <String, String>{},
   })  : dataSourceType = DataSourceType.network,
         package = null,
         super(VideoPlayerValue(duration: Duration.zero));
@@ -241,7 +242,7 @@
         dataSourceType = DataSourceType.file,
         package = null,
         formatHint = null,
-        httpHeaders = const {},
+        httpHeaders = const <String, String>{},
         super(VideoPlayerValue(duration: Duration.zero));
 
   /// Constructs a [VideoPlayerController] playing a video from a contentUri.
@@ -256,7 +257,7 @@
         dataSourceType = DataSourceType.contentUri,
         package = null,
         formatHint = null,
-        httpHeaders = const {},
+        httpHeaders = const <String, String>{},
         super(VideoPlayerValue(duration: Duration.zero));
 
   /// The URI to the video file. This will be in different formats depending on
@@ -393,9 +394,7 @@
     }
 
     if (closedCaptionFile != null) {
-      if (_closedCaptionFile == null) {
-        _closedCaptionFile = await closedCaptionFile;
-      }
+      _closedCaptionFile ??= await closedCaptionFile;
       value = value.copyWith(caption: _getCaptionAt(value.position));
     }
 
@@ -513,7 +512,9 @@
     // Setting the playback speed on iOS will trigger the video to play. We
     // prevent this from happening by not applying the playback speed until
     // the video is manually played from Flutter.
-    if (!value.isPlaying) return;
+    if (!value.isPlaying) {
+      return;
+    }
 
     await _videoPlayerPlatform.setPlaybackSpeed(
       _textureId,
@@ -618,9 +619,9 @@
       return Caption.none;
     }
 
-    final delayedPosition = position + value.captionOffset;
-    // TODO: This would be more efficient as a binary search.
-    for (final caption in _closedCaptionFile!.captions) {
+    final Duration delayedPosition = position + value.captionOffset;
+    // TODO(johnsonmh): This would be more efficient as a binary search.
+    for (final Caption caption in _closedCaptionFile!.captions) {
       if (caption.start <= delayedPosition && caption.end >= delayedPosition) {
         return caption;
       }
@@ -682,7 +683,7 @@
 /// Widget that displays the video controlled by [controller].
 class VideoPlayer extends StatefulWidget {
   /// Uses the given [controller] for all video rendered in this widget.
-  VideoPlayer(this.controller);
+  const VideoPlayer(this.controller);
 
   /// The [VideoPlayerController] responsible for the video being rendered in
   /// this widget.
@@ -780,7 +781,7 @@
 }
 
 class _VideoScrubber extends StatefulWidget {
-  _VideoScrubber({
+  const _VideoScrubber({
     required this.child,
     required this.controller,
   });
@@ -800,7 +801,7 @@
   @override
   Widget build(BuildContext context) {
     void seekToRelativePosition(Offset globalPosition) {
-      final RenderBox box = context.findRenderObject() as RenderBox;
+      final RenderBox box = context.findRenderObject()! as RenderBox;
       final Offset tapPos = box.globalToLocal(globalPosition);
       final double relative = tapPos.dx / box.size.width;
       final Duration position = controller.value.duration * relative;
@@ -855,7 +856,7 @@
   /// Defaults will be used for everything except [controller] if they're not
   /// provided. [allowScrubbing] defaults to false, and [padding] will default
   /// to `top: 5.0`.
-  VideoProgressIndicator(
+  const VideoProgressIndicator(
     this.controller, {
     this.colors = const VideoProgressColors(),
     required this.allowScrubbing,
@@ -923,7 +924,7 @@
       final int position = controller.value.position.inMilliseconds;
 
       int maxBuffering = 0;
-      for (DurationRange range in controller.value.buffered) {
+      for (final DurationRange range in controller.value.buffered) {
         final int end = range.end.inMilliseconds;
         if (end > maxBuffering) {
           maxBuffering = end;
@@ -1005,9 +1006,9 @@
 
   @override
   Widget build(BuildContext context) {
-    final text = this.text;
+    final String? text = this.text;
     if (text == null || text.isEmpty) {
-      return SizedBox.shrink();
+      return const SizedBox.shrink();
     }
 
     final TextStyle effectiveTextStyle = textStyle ??
@@ -1019,14 +1020,14 @@
     return Align(
       alignment: Alignment.bottomCenter,
       child: Padding(
-        padding: EdgeInsets.only(bottom: 24.0),
+        padding: const EdgeInsets.only(bottom: 24.0),
         child: DecoratedBox(
           decoration: BoxDecoration(
-            color: Color(0xB8000000),
+            color: const Color(0xB8000000),
             borderRadius: BorderRadius.circular(2.0),
           ),
           child: Padding(
-            padding: EdgeInsets.symmetric(horizontal: 2.0),
+            padding: const EdgeInsets.symmetric(horizontal: 2.0),
             child: Text(text, style: effectiveTextStyle),
           ),
         ),
diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml
index a444fc6..2f6e289 100644
--- a/packages/video_player/video_player/pubspec.yaml
+++ b/packages/video_player/video_player/pubspec.yaml
@@ -3,7 +3,7 @@
   widgets on Android, iOS, and web.
 repository: https://github.com/flutter/plugins/tree/main/packages/video_player/video_player
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
-version: 2.2.18
+version: 2.2.19
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
@@ -22,13 +22,12 @@
 dependencies:
   flutter:
     sdk: flutter
+  html: ^0.15.0
   video_player_android: ^2.2.17
   video_player_avfoundation: ^2.2.17
   video_player_platform_interface: ">=4.2.0 <6.0.0"
   video_player_web: ^2.0.0
-  html: ^0.15.0
 
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  pedantic: ^1.10.0
diff --git a/packages/video_player/video_player/test/closed_caption_file_test.dart b/packages/video_player/video_player/test/closed_caption_file_test.dart
index 369a3b3..b5c0a8e 100644
--- a/packages/video_player/video_player/test/closed_caption_file_test.dart
+++ b/packages/video_player/video_player/test/closed_caption_file_test.dart
@@ -8,7 +8,7 @@
 void main() {
   group('ClosedCaptionFile', () {
     test('toString()', () {
-      final Caption caption = const Caption(
+      const Caption caption = Caption(
         number: 1,
         start: Duration(seconds: 1),
         end: Duration(seconds: 2),
diff --git a/packages/video_player/video_player/test/sub_rip_file_test.dart b/packages/video_player/video_player/test/sub_rip_file_test.dart
index 5808e0b..ea3bfda 100644
--- a/packages/video_player/video_player/test/sub_rip_file_test.dart
+++ b/packages/video_player/video_player/test/sub_rip_file_test.dart
@@ -14,19 +14,19 @@
 
     final Caption firstCaption = parsedFile.captions.first;
     expect(firstCaption.number, 1);
-    expect(firstCaption.start, Duration(seconds: 6));
-    expect(firstCaption.end, Duration(seconds: 12, milliseconds: 74));
+    expect(firstCaption.start, const Duration(seconds: 6));
+    expect(firstCaption.end, const Duration(seconds: 12, milliseconds: 74));
     expect(firstCaption.text, 'This is a test file');
 
     final Caption secondCaption = parsedFile.captions[1];
     expect(secondCaption.number, 2);
     expect(
       secondCaption.start,
-      Duration(minutes: 1, seconds: 54, milliseconds: 724),
+      const Duration(minutes: 1, seconds: 54, milliseconds: 724),
     );
     expect(
       secondCaption.end,
-      Duration(minutes: 1, seconds: 56, milliseconds: 760),
+      const Duration(minutes: 1, seconds: 56, milliseconds: 760),
     );
     expect(secondCaption.text, '- Hello.\n- Yes?');
 
@@ -34,11 +34,11 @@
     expect(thirdCaption.number, 3);
     expect(
       thirdCaption.start,
-      Duration(minutes: 1, seconds: 56, milliseconds: 884),
+      const Duration(minutes: 1, seconds: 56, milliseconds: 884),
     );
     expect(
       thirdCaption.end,
-      Duration(minutes: 1, seconds: 58, milliseconds: 954),
+      const Duration(minutes: 1, seconds: 58, milliseconds: 954),
     );
     expect(
       thirdCaption.text,
@@ -49,11 +49,11 @@
     expect(fourthCaption.number, 4);
     expect(
       fourthCaption.start,
-      Duration(hours: 1, minutes: 1, seconds: 59, milliseconds: 84),
+      const Duration(hours: 1, minutes: 1, seconds: 59, milliseconds: 84),
     );
     expect(
       fourthCaption.end,
-      Duration(hours: 1, minutes: 2, seconds: 1, milliseconds: 552),
+      const Duration(hours: 1, minutes: 2, seconds: 1, milliseconds: 552),
     );
     expect(
       fourthCaption.text,
@@ -68,8 +68,8 @@
 
     final Caption firstCaption = parsedFile.captions.single;
     expect(firstCaption.number, 2);
-    expect(firstCaption.start, Duration(seconds: 15));
-    expect(firstCaption.end, Duration(seconds: 17, milliseconds: 74));
+    expect(firstCaption.start, const Duration(seconds: 15));
+    expect(firstCaption.end, const Duration(seconds: 17, milliseconds: 74));
     expect(firstCaption.text, 'This one is valid');
   });
 }
diff --git a/packages/video_player/video_player/test/video_player_initialization_test.dart b/packages/video_player/video_player/test/video_player_initialization_test.dart
index 1870934..af0886f 100644
--- a/packages/video_player/video_player/test/video_player_initialization_test.dart
+++ b/packages/video_player/video_player/test/video_player_initialization_test.dart
@@ -13,7 +13,8 @@
   // in this file.
   test('plugin initialized', () async {
     TestWidgetsFlutterBinding.ensureInitialized();
-    FakeVideoPlayerPlatform fakeVideoPlayerPlatform = FakeVideoPlayerPlatform();
+    final FakeVideoPlayerPlatform fakeVideoPlayerPlatform =
+        FakeVideoPlayerPlatform();
     VideoPlayerPlatform.instance = fakeVideoPlayerPlatform;
 
     final VideoPlayerController controller = VideoPlayerController.network(
diff --git a/packages/video_player/video_player/test/video_player_test.dart b/packages/video_player/video_player/test/video_player_test.dart
index 3bce821..07afd0f 100644
--- a/packages/video_player/video_player/test/video_player_test.dart
+++ b/packages/video_player/video_player/test/video_player_test.dart
@@ -29,7 +29,7 @@
   String get dataSource => '';
 
   @override
-  Map<String, String> get httpHeaders => {};
+  Map<String, String> get httpHeaders => <String, String>{};
 
   @override
   DataSourceType get dataSourceType => DataSourceType.file;
@@ -81,13 +81,13 @@
   @override
   List<Caption> get captions {
     return <Caption>[
-      Caption(
+      const Caption(
         text: 'one',
         number: 0,
         start: Duration(milliseconds: 100),
         end: Duration(milliseconds: 200),
       ),
-      Caption(
+      const Caption(
         text: 'two',
         number: 1,
         start: Duration(milliseconds: 300),
@@ -135,8 +135,9 @@
 
   group('ClosedCaption widget', () {
     testWidgets('uses a default text style', (WidgetTester tester) async {
-      final String text = 'foo';
-      await tester.pumpWidget(MaterialApp(home: ClosedCaption(text: text)));
+      const String text = 'foo';
+      await tester
+          .pumpWidget(const MaterialApp(home: ClosedCaption(text: text)));
 
       final Text textWidget = tester.widget<Text>(find.text(text));
       expect(textWidget.style!.fontSize, 36.0);
@@ -144,9 +145,9 @@
     });
 
     testWidgets('uses given text and style', (WidgetTester tester) async {
-      final String text = 'foo';
-      final TextStyle textStyle = TextStyle(fontSize: 14.725);
-      await tester.pumpWidget(MaterialApp(
+      const String text = 'foo';
+      const TextStyle textStyle = TextStyle(fontSize: 14.725);
+      await tester.pumpWidget(const MaterialApp(
         home: ClosedCaption(
           text: text,
           textStyle: textStyle,
@@ -159,19 +160,20 @@
     });
 
     testWidgets('handles null text', (WidgetTester tester) async {
-      await tester.pumpWidget(MaterialApp(home: ClosedCaption(text: null)));
+      await tester
+          .pumpWidget(const MaterialApp(home: ClosedCaption(text: null)));
       expect(find.byType(Text), findsNothing);
     });
 
     testWidgets('handles empty text', (WidgetTester tester) async {
-      await tester.pumpWidget(MaterialApp(home: ClosedCaption(text: '')));
+      await tester.pumpWidget(const MaterialApp(home: ClosedCaption(text: '')));
       expect(find.byType(Text), findsNothing);
     });
 
     testWidgets('Passes text contrast ratio guidelines',
         (WidgetTester tester) async {
-      final String text = 'foo';
-      await tester.pumpWidget(MaterialApp(
+      const String text = 'foo';
+      await tester.pumpWidget(const MaterialApp(
         home: Scaffold(
           backgroundColor: Colors.white,
           body: ClosedCaption(text: text),
@@ -218,7 +220,7 @@
         );
         expect(
           fakeVideoPlayerPlatform.dataSources[0].httpHeaders,
-          {},
+          <String, String>{},
         );
       });
 
@@ -246,7 +248,7 @@
       test('network with some headers', () async {
         final VideoPlayerController controller = VideoPlayerController.network(
           'https://127.0.0.1',
-          httpHeaders: {'Authorization': 'Bearer token'},
+          httpHeaders: <String, String>{'Authorization': 'Bearer token'},
         );
         await controller.initialize();
 
@@ -260,7 +262,7 @@
         );
         expect(
           fakeVideoPlayerPlatform.dataSources[0].httpHeaders,
-          {'Authorization': 'Bearer token'},
+          <String, String>{'Authorization': 'Bearer token'},
         );
       });
 
@@ -269,10 +271,10 @@
           'http://testing.com/invalid_url',
         );
 
-        late dynamic error;
+        late Object error;
         fakeVideoPlayerPlatform.forceInitError = true;
-        await controller.initialize().catchError((dynamic e) => error = e);
-        final PlatformException platformEx = error;
+        await controller.initialize().catchError((Object e) => error = e);
+        final PlatformException platformEx = error as PlatformException;
         expect(platformEx.code, equals('VideoError'));
       });
 
@@ -493,7 +495,7 @@
           'https://127.0.0.1',
         );
         await controller.initialize();
-        final progressWidget =
+        final VideoProgressIndicator progressWidget =
             VideoProgressIndicator(controller, allowScrubbing: true);
 
         await tester.pumpWidget(Directionality(
@@ -505,7 +507,7 @@
         expect(controller.value.isPlaying, isTrue);
 
         final Rect progressRect = tester.getRect(find.byWidget(progressWidget));
-        await tester.dragFrom(progressRect.center, Offset(1.0, 0.0));
+        await tester.dragFrom(progressRect.center, const Offset(1.0, 0.0));
         await tester.pumpAndSettle();
 
         expect(controller.value.position, lessThan(controller.value.duration));
@@ -520,7 +522,7 @@
           'https://127.0.0.1',
         );
         await controller.initialize();
-        final progressWidget =
+        final VideoProgressIndicator progressWidget =
             VideoProgressIndicator(controller, allowScrubbing: true);
 
         await tester.pumpWidget(Directionality(
@@ -580,7 +582,7 @@
         );
 
         await controller.initialize();
-        controller.setCaptionOffset(Duration(milliseconds: 100));
+        controller.setCaptionOffset(const Duration(milliseconds: 100));
         expect(controller.value.position, const Duration());
         expect(controller.value.caption.text, '');
 
@@ -616,7 +618,7 @@
         );
 
         await controller.initialize();
-        controller.setCaptionOffset(Duration(milliseconds: -100));
+        controller.setCaptionOffset(const Duration(milliseconds: -100));
         expect(controller.value.position, const Duration());
         expect(controller.value.caption.text, '');
 
@@ -688,12 +690,11 @@
 
         const Duration bufferStart = Duration(seconds: 0);
         const Duration bufferEnd = Duration(milliseconds: 500);
-        fakeVideoEventStream
-          ..add(VideoEvent(
-              eventType: VideoEventType.bufferingUpdate,
-              buffered: <DurationRange>[
-                DurationRange(bufferStart, bufferEnd),
-              ]));
+        fakeVideoEventStream.add(VideoEvent(
+            eventType: VideoEventType.bufferingUpdate,
+            buffered: <DurationRange>[
+              DurationRange(bufferStart, bufferEnd),
+            ]));
         await tester.pumpAndSettle();
         expect(controller.value.isBuffering, isTrue);
         expect(controller.value.buffered.length, 1);
@@ -854,45 +855,45 @@
 
     group('aspectRatio', () {
       test('640x480 -> 4:3', () {
-        final value = VideoPlayerValue(
+        final VideoPlayerValue value = VideoPlayerValue(
           isInitialized: true,
-          size: Size(640, 480),
-          duration: Duration(seconds: 1),
+          size: const Size(640, 480),
+          duration: const Duration(seconds: 1),
         );
         expect(value.aspectRatio, 4 / 3);
       });
 
       test('no size -> 1.0', () {
-        final value = VideoPlayerValue(
+        final VideoPlayerValue value = VideoPlayerValue(
           isInitialized: true,
-          duration: Duration(seconds: 1),
+          duration: const Duration(seconds: 1),
         );
         expect(value.aspectRatio, 1.0);
       });
 
       test('height = 0 -> 1.0', () {
-        final value = VideoPlayerValue(
+        final VideoPlayerValue value = VideoPlayerValue(
           isInitialized: true,
-          size: Size(640, 0),
-          duration: Duration(seconds: 1),
+          size: const Size(640, 0),
+          duration: const Duration(seconds: 1),
         );
         expect(value.aspectRatio, 1.0);
       });
 
       test('width = 0 -> 1.0', () {
-        final value = VideoPlayerValue(
+        final VideoPlayerValue value = VideoPlayerValue(
           isInitialized: true,
-          size: Size(0, 480),
-          duration: Duration(seconds: 1),
+          size: const Size(0, 480),
+          duration: const Duration(seconds: 1),
         );
         expect(value.aspectRatio, 1.0);
       });
 
       test('negative aspect ratio -> 1.0', () {
-        final value = VideoPlayerValue(
+        final VideoPlayerValue value = VideoPlayerValue(
           isInitialized: true,
-          size: Size(640, -480),
-          duration: Duration(seconds: 1),
+          size: const Size(640, -480),
+          duration: const Duration(seconds: 1),
         );
         expect(value.aspectRatio, 1.0);
       });
@@ -904,7 +905,7 @@
     const Color bufferedColor = Color.fromRGBO(0, 255, 0, 0.5);
     const Color backgroundColor = Color.fromRGBO(255, 255, 0, 0.25);
 
-    final VideoProgressColors colors = VideoProgressColors(
+    const VideoProgressColors colors = VideoProgressColors(
         playedColor: playedColor,
         bufferedColor: bufferedColor,
         backgroundColor: backgroundColor);
@@ -936,7 +937,7 @@
   @override
   Future<int?> create(DataSource dataSource) async {
     calls.add('create');
-    StreamController<VideoEvent> stream = StreamController<VideoEvent>();
+    final StreamController<VideoEvent> stream = StreamController<VideoEvent>();
     streams[nextTextureId] = stream;
     if (forceInitError) {
       stream.addError(PlatformException(
@@ -944,8 +945,8 @@
     } else {
       stream.add(VideoEvent(
           eventType: VideoEventType.initialized,
-          size: Size(100, 100),
-          duration: Duration(seconds: 1)));
+          size: const Size(100, 100),
+          duration: const Duration(seconds: 1)));
     }
     dataSources.add(dataSource);
     return nextTextureId++;
@@ -962,6 +963,7 @@
     initialized.complete(true);
   }
 
+  @override
   Stream<VideoEvent> videoEventsFor(int textureId) {
     return streams[textureId]!.stream;
   }
diff --git a/packages/video_player/video_player/test/web_vtt_test.dart b/packages/video_player/video_player/test/web_vtt_test.dart
index 59fce98..bde6292 100644
--- a/packages/video_player/video_player/test/web_vtt_test.dart
+++ b/packages/video_player/video_player/test/web_vtt_test.dart
@@ -14,9 +14,9 @@
       parsedFile = WebVTTCaptionFile(_valid_vtt_with_metadata);
       expect(parsedFile.captions.length, 1);
 
-      expect(parsedFile.captions[0].start, Duration(seconds: 1));
-      expect(
-          parsedFile.captions[0].end, Duration(seconds: 2, milliseconds: 500));
+      expect(parsedFile.captions[0].start, const Duration(seconds: 1));
+      expect(parsedFile.captions[0].end,
+          const Duration(seconds: 2, milliseconds: 500));
       expect(parsedFile.captions[0].text, 'We are in New York City');
     });
 
@@ -25,11 +25,11 @@
       expect(parsedFile.captions.length, 1);
 
       expect(parsedFile.captions[0].start,
-          Duration(seconds: 2, milliseconds: 800));
-      expect(
-          parsedFile.captions[0].end, Duration(seconds: 3, milliseconds: 283));
+          const Duration(seconds: 2, milliseconds: 800));
+      expect(parsedFile.captions[0].end,
+          const Duration(seconds: 3, milliseconds: 283));
       expect(parsedFile.captions[0].text,
-          "— It will perforate your stomach.\n— You could die.");
+          '— It will perforate your stomach.\n— You could die.');
     });
 
     test('with styles tags', () {
@@ -37,9 +37,9 @@
       expect(parsedFile.captions.length, 3);
 
       expect(parsedFile.captions[0].start,
-          Duration(seconds: 5, milliseconds: 200));
-      expect(
-          parsedFile.captions[0].end, Duration(seconds: 6, milliseconds: 000));
+          const Duration(seconds: 5, milliseconds: 200));
+      expect(parsedFile.captions[0].end,
+          const Duration(seconds: 6, milliseconds: 000));
       expect(parsedFile.captions[0].text,
           "You know I'm so excited my glasses are falling off here.");
     });
@@ -49,9 +49,9 @@
       expect(parsedFile.captions.length, 3);
 
       expect(parsedFile.captions[0].number, 1);
-      expect(parsedFile.captions.last.start, Duration(seconds: 4));
-      expect(parsedFile.captions.last.end, Duration(seconds: 5));
-      expect(parsedFile.captions.last.text, "Transcrit par Célestes™");
+      expect(parsedFile.captions.last.start, const Duration(seconds: 4));
+      expect(parsedFile.captions.last.end, const Duration(seconds: 5));
+      expect(parsedFile.captions.last.text, 'Transcrit par Célestes™');
     });
 
     test('with [hours]:[minutes]:[seconds].[milliseconds].', () {
@@ -59,9 +59,9 @@
       expect(parsedFile.captions.length, 1);
 
       expect(parsedFile.captions[0].number, 1);
-      expect(parsedFile.captions.last.start, Duration(seconds: 1));
-      expect(parsedFile.captions.last.end, Duration(seconds: 2));
-      expect(parsedFile.captions.last.text, "This is a test.");
+      expect(parsedFile.captions.last.start, const Duration(seconds: 1));
+      expect(parsedFile.captions.last.end, const Duration(seconds: 2));
+      expect(parsedFile.captions.last.text, 'This is a test.');
     });
 
     test('with [minutes]:[seconds].[milliseconds].', () {
@@ -69,9 +69,9 @@
       expect(parsedFile.captions.length, 1);
 
       expect(parsedFile.captions[0].number, 1);
-      expect(parsedFile.captions.last.start, Duration(seconds: 3));
-      expect(parsedFile.captions.last.end, Duration(seconds: 4));
-      expect(parsedFile.captions.last.text, "This is a test.");
+      expect(parsedFile.captions.last.start, const Duration(seconds: 3));
+      expect(parsedFile.captions.last.end, const Duration(seconds: 4));
+      expect(parsedFile.captions.last.text, 'This is a test.');
     });
 
     test('with invalid seconds format returns empty captions.', () {
@@ -105,8 +105,8 @@
 
     final Caption firstCaption = parsedFile.captions.single;
     expect(firstCaption.number, 1);
-    expect(firstCaption.start, Duration(seconds: 13));
-    expect(firstCaption.end, Duration(seconds: 16, milliseconds: 0));
+    expect(firstCaption.start, const Duration(seconds: 13));
+    expect(firstCaption.end, const Duration(seconds: 16, milliseconds: 0));
     expect(firstCaption.text, 'Valid');
   });
 }
diff --git a/script/configs/custom_analysis.yaml b/script/configs/custom_analysis.yaml
index d10424e..71f6f03 100644
--- a/script/configs/custom_analysis.yaml
+++ b/script/configs/custom_analysis.yaml
@@ -17,4 +17,3 @@
 - in_app_purchase/in_app_purchase
 - in_app_purchase/in_app_purchase_android
 - in_app_purchase/in_app_purchase_storekit
-- video_player/video_player
