flutter_feed_player 0.1.8
flutter_feed_player: ^0.1.8 copied to clipboard
Vertical short-video feed and series episode player for Flutter with park/promote preloading. No backend required.
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 shipsPrivacyInfo.xcprivacy. - Move the iOS plugin out of
ios/Classes/into the SPM layout; bump the podspec to0.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
enablePictureInPictureonFeedPlayerControllerandEpisodePlayerController(defaultfalse). 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 needsandroid:supportsPictureInPictureplus Activity forwarding fromonUserLeaveHintandonPictureInPictureModeChanged(auto-enter on Android 12+; explicit enter below that). iOS needsUIBackgroundModesaudioand uses a platform-view player so picture-in-picture can bind the on-screenAVPlayerLayer. - While
inPictureInPictureis 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
showEpisodeQualitySheetwhen more than one option exists.EpisodePlayerController.setQualityreloads 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 is720p. - Options come from labeled
EpisodeAssets (Autoplus two or more qualities). A single progressive URL hides the control. Convertible HLS (/master.m3u8or/v{height}/index.m3u8) without an explicit ladder offersAuto,1080p,720p,480p, and360p. AutoprefersplayUrland normalizes convertible HLS tomaster.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
fluttertopic withmedia.
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:
showCenterPausestays off when a swipe or entry auto-starts playback. The first tap while playing reveals the pause button; a later tap hides chrome.showCenterPlayis still the paused-state play glyph.
0.1.4 #
- Add
autoAdvanceOnEndonFeedPlayerController/EpisodePlayerController(defaulttrue): when a clip ends, animate to the next item (load-more if needed). Effective looping isloopClips && !autoAdvanceOnEnd. - Add
setAutoAdvanceOnEnd/ keepsetLoopClips; feed exposeseffectiveLoopClips. - Detect end-of-playback via
VideoPlayerValue.isCompleted(plus near-end fallback) so auto-advance is not missed whileisPlayingis 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:
PlayerSeekBarshimmer, thumb, scrub time label; chrome hides meta / side actions while scrubbing (onScrubbingChangedon seek bar and bottom chrome). - Feed chrome: optional
onMoreonFeedPlayer/FeedPlayerChrome/FeedSideActions. - Example: grouped player param panel with loop ↔ auto-advance mutual exclusion and related l10n.
0.1.3 #
- Add
MediaFormatfor URL /assetTypedetection, chrome badges, and platform support checks (isSupportedOnCurrentPlatform,unsupportedReason). - Expand format labels beyond HLS/MP4: WebM, MOV, M4V, DASH (and SS).
PlayerFactory.createplays network, Flutter asset (asset://…/assets/…), and localfile:URLs; addsformatHintForUrlfor HLS / DASH / SS.- Models expose
isDashalongsideisHls/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_playerlower bound to^2.10.0(requiresVideoViewType). - Require Flutter
>=3.27.0to matchvideo_player2.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/EpisodePlayerremain 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).
