Skip to main content

flutter_feed_player 0.1.9 copy "flutter_feed_player: ^0.1.9" to clipboard
flutter_feed_player: ^0.1.9 copied to clipboard

Vertical short-video feed and series episode player for Flutter with park/promote preloading. No backend required.

0.1.9 #

  • Add enableLandscapeFullscreen on FeedPlayer / EpisodePlayer and the matching views (default false). 16:9 and wider-than-tall clips are letterboxed in the portrait feed, with a fullscreen chip under the video.
  • Fullscreen uses LandscapeFullscreenStage: the host can stay portrait-locked while the stage rotates; seek bar + exit control; back gesture exits fullscreen first; end-of-clip also exits.
  • Export LandscapeVideoLayout, LandscapeFullscreenButton, and LandscapeFullscreenStage. PlayerSurface gains letterbox.
  • Example: landscape fullscreen toggle and localized button labels.

0.1.8 #

  • Add Swift Package Manager support for the iOS plugin (ios/flutter_feed_player/Package.swift + Sources). CocoaPods still builds the same Swift sources and ships PrivacyInfo.xcprivacy.
  • Move the iOS plugin out of ios/Classes/ into the SPM layout; bump the podspec to 0.1.8.
  • Migrate the Android plugin to Flutter's built-in Kotlin (drop org.jetbrains.kotlin.android). Minimum SDK is Flutter >=3.44.0 / Dart ^3.12.0 (example aligned).

0.1.7 #

  • Add enablePictureInPicture on FeedPlayerController and EpisodePlayerController (default false). A playing clip opens the system picture-in-picture window when the app backgrounds; a paused clip does not. The active page stays pinned across that resize, and auto-advance is suspended until the app resumes.
  • Ship an Android / iOS plugin (FlutterFeedPlayerPlugin). Android needs android:supportsPictureInPicture plus Activity forwarding from onUserLeaveHint and onPictureInPictureModeChanged (auto-enter on Android 12+; explicit enter below that). iOS needs UIBackgroundModes audio and uses a platform-view player so picture-in-picture can bind the on-screen AVPlayerLayer.
  • While inPictureInPicture is true, the default view hides gestures, the buffering spinner, and chrome. Notification shade and Control Center do not open the window. Web and desktop ignore the calls.
  • Example: picture-in-picture toggle, plus the Android and iOS host setup.

0.1.6 #

  • Episode quality: the top bar shows the current rendition and opens showEpisodeQualitySheet when more than one option exists. EpisodePlayerController.setQuality reloads the active episode at the same playhead (and keeps play / pause) and drops parked neighbors so the next swipe uses the same quality. Default quality is 720p.
  • Options come from labeled EpisodeAssets (Auto plus two or more qualities). A single progressive URL hides the control. Convertible HLS (/master.m3u8 or /v{height}/index.m3u8) without an explicit ladder offers Auto, 1080p, 720p, 480p, and 360p.
  • Auto prefers playUrl and normalizes convertible HLS to master.m3u8. A named quality uses the matching asset, or rewrites convertible HLS to /v{height}/index.m3u8. Variant playlists stay locked and are not rewritten back to master. Park / promote reuse is same-quality only.
  • Seek bar: the uninitialized loading beam is one pixel thinner than the playback track.
  • Add a pub.dev screenshot of the vertical feed (screenshots/feed_player.jpg).
  • Replace the flutter topic with media.

0.1.5 #

  • Seek bar: before the player is initialized, the track shows a center-out loading beam (ease-out expand for ~70% of a 700ms loop, then fade).
  • Buffering spinners (feed, episode, pull-to-refresh) use solid white.
  • Center play/pause is a plain icon (no circular splash). It stays hidden until the first video frame, so it does not sit on the spinner.
  • Episode: showCenterPause stays off when a swipe or entry auto-starts playback. The first tap while playing reveals the pause button; a later tap hides chrome. showCenterPlay is still the paused-state play glyph.

0.1.4 #

  • Add autoAdvanceOnEnd on FeedPlayerController / EpisodePlayerController (default true): when a clip ends, animate to the next item (load-more if needed). Effective looping is loopClips && !autoAdvanceOnEnd.
  • Add setAutoAdvanceOnEnd / keep setLoopClips; feed exposes effectiveLoopClips.
  • Detect end-of-playback via VideoPlayerValue.isCompleted (plus near-end fallback) so auto-advance is not missed while isPlaying is briefly true.
  • Soft cold-start hint (showLoadingPrompt) no longer opens the retry page; it only shows under the buffering spinner. Retry overlay is for hard errors / timeout only. Soft prompt arms after attach to avoid flashing on slow HLS.
  • Seek UX: PlayerSeekBar shimmer, thumb, scrub time label; chrome hides meta / side actions while scrubbing (onScrubbingChanged on seek bar and bottom chrome).
  • Feed chrome: optional onMore on FeedPlayer / FeedPlayerChrome / FeedSideActions.
  • Example: grouped player param panel with loop ↔ auto-advance mutual exclusion and related l10n.

0.1.3 #

  • Add MediaFormat for URL / assetType detection, chrome badges, and platform support checks (isSupportedOnCurrentPlatform, unsupportedReason).
  • Expand format labels beyond HLS/MP4: WebM, MOV, M4V, DASH (and SS).
  • PlayerFactory.create plays network, Flutter asset (asset://… / assets/…), and local file: URLs; adds formatHintForUrl for HLS / DASH / SS.
  • Models expose isDash alongside isHls / formatLabel.
  • Stop injecting a default custom User-Agent (avoids CDN + Range conflicts); hosts can still set headers via HttpHeadersProvider.
  • Example: multi-format showcase (MP4 / HLS / MOV / M4V / WebM / DASH) with platform-aware filters and bundled assets/videos/ samples.

0.1.2 #

  • Raise video_player lower bound to ^2.10.0 (requires VideoViewType).
  • Require Flutter >=3.27.0 to match video_player 2.10.0.
  • Shorten package description for pub.dev (60–180 characters).

0.1.1 #

  • Separate player core from UI components.
  • Add FeedPlayerView / EpisodePlayerView (surface + gestures only).
  • Extract default chrome into public widgets (FeedPlayerChrome, EpisodePlayerChrome, and building blocks).
  • FeedPlayer / EpisodePlayer remain convenience wrappers (view + default chrome).
  • Customize via overlayBuilder, or compose chrome pieces freely.
  • Playback UX: cold-start watchdog, retry overlay, forward-swipe lock while first frame is loading, eager next-item warm on forward drag intent.
  • Feed clips can loop (loopClips).
  • Models expose isHls / formatLabel; chrome can show a format badge.
  • Example: MP4 / M3U8 grouped showcase with free public sample streams (Mux, Apple HLS examples, Unified Streaming, Flutter docs MP4).

0.1.0 #

  • Initial release.
  • FeedPlayer — vertical short-video feed with park/promote preloading.
  • EpisodePlayer — vertical series episode binge player with adjacent warm-up.
  • Injectable data models and mock-friendly APIs (no network client included).
1
likes
160
points
684
downloads
screenshot

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Vertical short-video feed and series episode player for Flutter with park/promote preloading. No backend required.

Repository (GitHub)
View/report issues

Topics

#video #player #feed #short-video #media

License

MIT (license)

Dependencies

flutter, video_player

More

Packages that depend on flutter_feed_player

Packages that implement flutter_feed_player