storify 0.4.0
storify: ^0.4.0 copied to clipboard
Storify — Instagram-like stories for Flutter: scrollable tray, full-screen viewer, RTL support, theming, transitions, and cached video slides.
Changelog #
All notable changes to the storify package are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.4.0 - 2026-05-18 #
Fixed #
- Story viewer pauses progress and video when the app goes to the background; playback resumes when the app returns (unless the user had already paused with hold-to-pause).
0.3.0 - 2026-05-18 #
Added #
- Video story duration —
StoryItem.videoUrl,videoFile, andvideoAssetuse the loaded video length for progress whendurationis omitted. Progress pauses briefly until the video is initialized. StoryPlaybackController.updateDurationAt— updates a slide duration after async metadata loads.
Changed #
- Explicit
StoryItem.durationstill overrides video length (e.g. cap a long clip or show a looping segment for a fixed time). - When
StoriesThemeData.videoLooping(or per-slidelooping: true) is enabled, themedefaultStoryDurationis used unlessdurationis set.
0.2.0 - 2026-05-18 #
Added #
onUserSeenonStoriesPanelandStoryViewer—ValueChanged<String>called withStoryUser.idwhen a user finishes all of their slides. The package does not store seen user ids; you persist them in the callback.onSeenStoryonStoriesPanelandStoryViewer—ValueChanged<String>called withStoryItem.idwhen a slide is considered viewed. The package does not store seen story ids; you persist them in the callback.StoryItem.id— required unique id on every slide (all factories acceptrequired String id).
Changed #
- Breaking: Replaced
cached_video_playerwithcached_video_player_plusfor network video caching inStoryVideoSlideandStoryItem.videoUrl. - Breaking: Added a direct
video_playerdependency (VideoPlayerwidget andVideoFormatonStoryItem.videoUrl). - Breaking:
StoryItemand all factories now require anidparameter.
Migration from 0.1.0 #
-
Add ids to every slide:
// Before StoryItem.imageUrl('https://example.com/1.jpg') // After StoryItem.imageUrl('https://example.com/1.jpg', id: 'story_1') -
Optional — track seen state with callbacks (instead of only
onUsersChanged):StoriesPanel( users: users, onUserSeen: (userId) => saveUserSeen(userId), onSeenStory: (storyId) => saveStorySeen(storyId), ) -
Video: Remove
cached_video_playerfrom your app if you added it only for stories; storify now usescached_video_player_plusinternally.
Notes #
onUserSeenfires once per user id per viewer session when their last slide completes.onSeenStoryfires once per story id per viewer session (timer end, tap next, swipe to another user, or close).onUsersChangedstill updates the tray whenStoriesPanelmarks a user seen internally.- Network videos are cached via
flutter_cache_manager; asset and file sources are not cached.
0.1.0 - 2026-05-18 #
Added #
StoriesTray— horizontal scrollable thumbnail row with seen/unseen rings.StoriesPanel— tray wired to open the full-screen viewer.StoryViewer— segmented progress, header, captions, gestures (tap, hold, swipe down).StoryUserandStoryItemmodels with title, subtitle, and caption support.StoriesThemeData— tray, rings, viewer, progress bar, video, and transition styling.StoriesScopefor RTL and theme overrides.- RTL support via directional layout throughout.
StoryItemTransitionandStoryUserTransition(fade, slide, scale, zoom, cube, and more).StoryItemhelpers:imageUrl,imageAsset,videoUrl,videoFile,videoAsset,widget.StoryVideoSlidewith cached network video and hold-to-pause sync.StoryAvatar,StoryProgressBar,StorySlideOverlay,StoryGestureLayer.- Example app with transition pickers and RTL toggle.