jar_video_player 0.1.5 copy "jar_video_player: ^0.1.5" to clipboard
jar_video_player: ^0.1.5 copied to clipboard

PlatformAndroid

A modern reels-ready customizable network video player for Flutter with lifecycle and visibility handling.

jar_video_player #

A modern, reels-ready, customizable network video player for Flutter.

jar_video_player is built for real-world performance. It provides automatic lifecycle handling, route awareness, visibility-based playback control, and optimized support for vertical reel-style feeds like Instagram or TikTok.

https://github.com/user-attachments/assets/f1f8e44a-3425-4870-aa0e-35beab325ad8


โœจ Features #

  • ๐ŸŽฅ Network video playback
  • ๐Ÿ” Reels mode (auto play/pause based on visibility)
  • ๐Ÿ”„ Route-aware auto pause
  • ๐Ÿ“ฑ App lifecycle handling (background/foreground safety)
  • ๐ŸŽ› External controller support
  • โšก Optimized for PageView reels
  • ๐Ÿง  Safe async initialization (prevents ghost audio issues)
  • ๐Ÿงน Proper resource disposal to prevent memory leaks

๐Ÿ“ฆ Installation #

Add the dependency to your pubspec.yaml:

dependencies:
  jar_video_player: ^0.1.5

Then run:

flutter pub get

๐Ÿš€ Some important permissions #



<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


<!-- Internet (required for downloading video) -->
<uses-permission android:name="android.permission.INTERNET"/>

<!-- Android 13+ (API 33+) -->
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>

<!-- Android 12 and below -->
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />


๐Ÿš€ Overlay Jar Video Player #

import 'package:flutter/material.dart';
import 'package:jar_video_player/jar_video_player.dart';

final controller = JarVideoPlayerController();



///
// this must be true 
// for downloading and sharing the video with or without overlay 
// downloadWithOverlay: true,
///
JarVideoPlayerOverlay(
        url: videoUrl,
        aspectRatio: 9 / 16,
        reelsMode: true,

        ///top overlay widget
        // topStripe: Container(
        //   color: Colors.green,
        //   width: double.infinity,
        //   height: 50,
        //   child: Text("Hello leaders", style: TextStyle(fontSize: 37)),
        // ),

        /// this is bottom overlay
        downloadWithOverlay: true,
        bottomStripe: Container(
          color: Colors.red,
          width: double.infinity,
          height: 70,
          child: Text("Hello Sagar"),
        ),


        /// if you want custom downlaod or share functions
        // onDownload: () {},
        // onShare: () {},

        ///if you want reel mode, controller is not necessary
        // controller: ctrl,

      ),
    );

///types of Overlay Animations
enum OverlayAnimationType {
  none, /// defauls to 'top left' 

  // Basic
  topToCenter,
  rightToCenter,
  leftToCenter,
  bottomToCenter,
  leftToRight,
  rightToLeft,

  // Diagonal
  diagonalTopLeftToBottomRight,
  diagonalTopRightToBottomLeft,
  diagonalBottomLeftToTopRight,
  diagonalBottomRightToTopLeft,
}

๐ŸŽฌ Reels Mode #

Reels mode automatically plays the video when it becomes visible and pauses it when it goes out of view.

JarVideoPlayer(
  controller: controller,
  url: videoUrl,
  reelsMode: true,
);
PageView.builder(
  scrollDirection: Axis.vertical,
  itemCount: videoList.length,
  itemBuilder: (context, index) {
    final controller = JarVideoPlayerController();

    return JarVideoPlayer(
      controller: controller,
      url: videoList[index],
      reelsMode: true,
    );
  },
);

๐ŸŽ› Controller API #

You can control playback manually using the controller:

controller.play();
controller.pause();
controller.seekTo(Duration(seconds: 10));
controller.dispose();

๐Ÿ”„ Lifecycle & Route Handling #

jar_video_player automatically:

  • Pauses when navigating to a new route
  • Pauses when app goes to background
  • Resumes safely when returning
  • Prevents audio leaks during fast scroll

๐Ÿงฉ Best Practices #

  • Dispose controllers properly when no longer needed.
  • Use reelsMode: true inside PageView for best performance.
  • Avoid initializing multiple heavy videos simultaneously on low-end devices.

๐Ÿ“š Example #

A complete working example is available inside the example/ folder of this package.


๐Ÿ›  Requirements #

  • Flutter 3.10+
  • Dart >=3.0.0 <4.0.0

๐Ÿ“ License #

MIT License

Copyright (c) 2026 Sagar

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish the Software.

1
likes
160
points
398
downloads

Publisher

unverified uploader

Weekly Downloads

A modern reels-ready customizable network video player for Flutter with lifecycle and visibility handling.

Repository (GitHub)
View/report issues

Topics

#video #player #reels #download #animated

Documentation

API reference

License

MIT (license)

Dependencies

ffmpeg_kit_flutter_new_https_gpl, flutter, http, media_store_plus, path_provider, permission_handler, share_plus, video_player, visibility_detector

More

Packages that depend on jar_video_player