Flutter SDK release notes (historical)
Historical Experiences SDK release notes for Flutter. For current releases, use the latest published release notes.
1.20.0 - Flutter
Date: 2026-08-10
Breaking changes
- Replaced
promotedLabelswithcoldStartLabelsonBlazeRecommendationsType.forYou.coldStartLabelsfetches cold start content for viewers below the interaction threshold, where labels are OR'd and ordered by recency, rather than prioritizing labels within the recommendations. There's no alias, so update any For you data source that still passespromotedLabels. See Implicit personalization. anyLabelFilteronBlazeRecommendationsType.forYouis now a non-nullableList<String>that defaults to[].- The Moments Tabs bar now collapses when a container has 0 or 1 visible tabs. Set
isTabTitleVisibleWhenSingleTab: trueonBlazePlayerTabsStyleto keep it visible. BlazeGAMBannerAdsDelegate.onGAMBannerAdsAdErrornow receives aBlazeGAMBannerAdsDelegateOnAdErrorParamsobject (errorMessage,extraInfo) instead of a bareString.multiAspectRatioonBlazeVideosPlaybackConfigurationis now optional (bool?). Omitting it falls through to the native SDK default, which changed totrue(previouslyfalse). Pass an explicit value to opt out of picking up native default changes automatically.
Added
Content and data sources
BlazeDataSourceType.compositecombines multiple independent data sources into a single deduplicated feed. Entries are fetched in parallel, merged in declaration order, and deduplicated by item ID with first occurrence winning, through the newBlazeCompositeDataSourceEntryandBlazeCompositeDataSourceConfig(isMandatory) types. A non-mandatory entry that fails to fetch is dropped as long as one other entry succeeds. An empty entry list, and nesting a composite inside a composite, are rejected natively.BlazeVideosFilterParams(contentTypes,streamStates) with the newBlazeVideoContentType(video,stream) andBlazeLiveStreamStatus(live,upcoming,ended) enums. Passed asvideosFilterParamsonplayVideosandprepareVideos, and onBlazeVideosRowViewandBlazeVideosGridView. Both fields default to no filtering on that dimension.BlazeOrderType.startTimeAscandBlazeOrderType.startTimeDesc, to order live and upcoming content by start time.BlazeDataSourcePersonalizedType.playerAndTeamIds(playerIds:, teamIds:)convenience constructor.labelsPriorityonBlazeDataSourcePersonalizedType.labelsis now optional and defaults to[].
Player control and events
BlazeSDK.pauseCurrentPlayer()andBlazeSDK.resumeCurrentPlayer(), to pause and resume the currently presented player.sourceIdon the entry point methods (playStory,playStories,prepareStories,playMoment,playMoments,prepareMoments,playVideo,playVideos,prepareVideos), and onhandleUniversalLinkandhandleNotificationPayload. It's surfaced in thesourceIdfield of the delegate callbacks triggered by the playback it starts.eventIdonplayStory.onShareClickedon all player delegates,BlazeWidgetDelegate,BlazePlayerEntryPointDelegate, andBlazePlayerContainerTabsDelegate, withBlazeOnShareClickedParams(playerType,sourceId,id,contentType,title,description,sdkGeneratedLink,extraInfo) andBlazeShareContentType(story(pageId:),moment,video). Observer only: the SDK always sharessdkGeneratedLinkand the callback can't override it.sdkMetadataonBlazeOnTriggerCustomActionButtonParams, read-only metadata populated by the SDK with the content's extra info at the moment the button was clicked, alongside the app-suppliedappMetadata.
Playback configuration
adsonBlazeStoriesPlaybackConfiguration, through the newBlazeStoriesAdsPlaybackConfiguration(enablePreroll), to show a pre-roll ad on the first page the viewer interacts with. Disabled by default for backward compatibility.
Captions
BlazeCaptionsStyle(font,textSize,positioning) to style the rendered caption text, available ascaptionsonBlazeStoryPlayerStyle,BlazeMomentsPlayerStyle, andBlazeVideosPlayerStyle.textSizeis Android only. On iOS the size is baked intofont.BlazeCaptionsPositioning, withBlazeCaptionsXPosition(start,center,custom(offsetPercent:)) andBlazeCaptionsYPosition(top,center,bottom,custom(offsetPercent:)). Each axis is configured independently, and custom offsets are percentages of the player width or height, coerced into 0 to 100.captionsbutton inBlazeStoryPlayerButtonsStyleandBlazeMomentsPlayerButtonsStyle. Unlike the other button styles, the native default isisVisible: false, so the CC button must be opted into explicitly.cc_stateon theVideoPropsanalytics payload, reporting the captions state of the video. Analytics events reach the host app only through the typedBlazeAnalyticsEventmodel, so this field was previously dropped during parsing and is newly visible toBlazeGlobalDelegate.onEventTriggeredhandlers.
Player styles
borderColorandborderWidthonBlazeStoryPlayerCtaStyle,BlazeMomentsPlayerCtaStyle, andBlazeVideosPlayerCtaStyle. A border color supplied by the backend or CMS takes precedence when present and parseable, and these values are used otherwise.shouldPreserveLikesCountBelowThresholdonBlazeMomentsPlayerButtonsStyle, to keep the space below the like button reserved when the likes count is hidden, so buttons don't shift as the count crosses the display threshold.overlayVisibilityThresholdMsonBlazeVideosPlayerStyle, controlling how long the controls overlay stays visible before auto-hiding. Non-positive values are rejected natively and fall back to the SDK default.
Widgets
widgetIdis now optional on all row and grid widgets. A unique value is generated when it's omitted.widgetRemoteIdentifieron all row and grid widgets, for remote-managed widget configuration. When it resolves, the layout, data source, and per-item style overrides come from the remote config and the locally supplied ones become no-ops. The widget falls back to the local data source if the remote fetch fails. Applied at widget creation only, and ignored by the Moments.tabs()constructors.BlazeMomentsWidgetController, a Moments-specific controller extendingBlazeWidgetControllerwithreloadAllTabs(),reloadNonActiveTabs(),reloadTab(index:), andreloadTabByContainerId(containerId:)for the fullscreen widget-to-tabs player.reloadTabandreloadTabByContainerIdare iOS only.activeTabIndicatoronBlazePlayerTabsStyle, through the newBlazePlayerActiveTabIndicatorStyle(isVisible,height), drawing an underline beneath the selected tab. Opt-in, and the indicator color and width always follow the selected tab title.isTabVisibleWhenEmptyonBlazePlayerTabsStyle, to keep or auto-remove a Moments Tabs tab whose content is empty or fails to load. The first tab is always kept.isTabTitleVisibleWhenSingleTabonBlazePlayerTabsStyle. See Breaking changes.
SDK configuration and privacy
forceLayoutDirectiononBlazeSDK.initSDK(), with the newBlazeLayoutDirectionenum (ltr,rtl), to force the layout direction of the SDK's own screens independently of the device locale. When left unset, the SDK follows the system layout direction.BlazeSDK.setDisableUserActivity()to enable or disable the periodic user-activity sync that backs read and liked state and personalized recommendations, andBlazeSDK.clearLocalUserActivity()to clear locally cached user-activity data (liked and viewed content and interaction answers) and refresh widgets.BlazeSDK.hostingAppContext, a key-value store the hosting app populates for the SDK to read, surfaced to SDK features that consume host-app context such as in-player interactions:getValue(),getContext(),setValue(),setContext(), anddeleteValue().setContext()clears every existing key first, so prefersetValue()anddeleteValue()for incremental updates.
Ads
extraInfo(BlazeContentExtraInfo) onBlazeGAMBannerAdsDelegateOnAdEventParams, on the newBlazeGAMBannerAdsDelegateOnAdErrorParams, and onBlazeGAMCustomNativeAdsDelegateOnAdEventParams, carrying contextual metadata about the content surrounding the ad.adInfoonBlazeIMADelegateOnAdEventParams, through the newBlazeIMAAdInfotype (adId,adTitle,adDescription,adSystem,isSkippable,skipTimeOffset,adDuration,advertiserName,adTag,extraInfo). Every field is optional, because the IMA SDK reports no ad information for some events and individual fields are absent whenever the VAST response omits them.
1.19.0 - Flutter
Date: 2026-07-29
Breaking changes
- Replaced
ctaVisibilityonBlazeVideosPlayerCtaStylewith a simplebool? isVisible. TheBlazeVideosPlayerCtaVisibilityclass andBlazeVideosPlayerCtaVisibilityTypeenum were removed. - Renamed
BlazeKeysPresetstoBlazeExtraInfoKeyPreset, which is also the type of thekeyPresetparameter ofBlazeWidgetItemCustomMapping.fromPreset. - iOS: raised the minimum deployment target to 15.0.
Added
Playback configuration
BlazeVideosPlaybackConfiguration(multiAspectRatio,shouldOpenInLandscape,pipConfiguration,bufferingSpinnerDelayMs),BlazeMomentsPlaybackConfiguration(loopBehavior,bufferingSpinnerDelayMs), andBlazeStoriesPlaybackConfiguration(bufferingSpinnerDelayMs). Passed asplaybackConfigurationon the Stories, Moments, and Videos row and grid widgets, and onplayStory,playStories,playVideo, andplayVideos.- Global defaults per vertical:
BlazeSDK.setDefaultStoriesPlaybackConfiguration()andgetDefaultStoriesPlaybackConfiguration(),setDefaultMomentsPlaybackConfiguration()andgetDefaultMomentsPlaybackConfiguration(),setDefaultVideosPlaybackConfiguration()andgetDefaultVideosPlaybackConfiguration(). - Moments auto-advance through
BlazeMomentsLoopBehavior.infiniteLoop()andBlazeMomentsLoopBehavior.loopAndAdvance(numberOfPlays:). bufferingSpinnerDelayMson Stories, Moments, and Videos playback configuration, to control when the buffering spinner appears. The native default is1000ms, and negative values are clamped to0.
Player control and events
- Global player sound-state APIs:
BlazeSDK.setPlayerSoundState(BlazePlayerSoundState)andBlazeSDK.isMuted(). The native default is muted, and the state isn't persisted across app launches. BlazeSDK.appendMomentsToPlayer()to append content to an already-open Moments player.entryContentIdparameter on the entry point methodsprepareStories,playStories,prepareMoments,playMoments,prepareVideos, andplayVideos.BlazeGlobalDelegate.playbackModificationHandlerto modify the playback URL, for example to add tokenization, before HLS or MP4 playback starts, withBlazePlaybackModificationRequestandBlazePlaybackModificationResponse. Returning synchronously or asynchronously are both supported. If the handler throws, the SDK falls back to the original URL.onReadStatusChangedonBlazePlayerEntryPointDelegate, withBlazeOnReadStatusChangedParams.
Casting and picture-in-picture
- Casting support for the Videos player, using Chromecast on Android and AirPlay on iOS: the
castingfield inBlazeVideosPlayerButtonsStyle,BlazeSDK.stopActiveCastingSession(), andBlazeSDK.setCastingDelegate()withBlazeCastingDelegate.onCastingStateChanged,BlazeCastingStateChangedParams, andBlazeCastingState. - Picture-in-picture support for the Videos player: the
pictureInPicturefield inBlazeVideosPlayerButtonsStyle,BlazePipConfigurationwithenterPipOnAppBackground,BlazeSDK.stopActivePiPSession()andBlazeSDK.isPiPActive(), andBlazeSDK.setPipDelegate()withBlazePipDelegate.onPiPStateChanged,BlazePipStateChangedParams, andBlazePipState.
Player buttons and styles
captions,forceRotation,casting,pictureInPicture,seekForward, andseekBackwardbuttons inBlazeVideosPlayerButtonsStyle.seekForward,seekBackward, andsearchbuttons inBlazeMomentsPlayerButtonsStyle.- Custom action buttons:
customActionButtonsinBlazeStoryPlayerButtonsStyleandBlazeMomentsPlayerButtonsStyle, withBlazeCustomActionButtonandBlazeCustomActionButtonParams, a declarativeVisibilityCondition(always,never,keyExists,keyNotExists,keyEquals,keyNotEquals,keyIn,keyNotIn,keyGreaterThan,keyLessThan,keyBetween,keyContains,and,or,not) to show or hide a button based on content metadata, and theonTriggerCustomActionButtoncallback on all player delegates. isVisibleonBlazeStoryPlayerCtaStyleandBlazeMomentsPlayerCtaStyle.- Story player title image, a contextual image displayed alongside the story title in the player header, through the new
imageproperty onBlazeStoryPlayerTitleTextStyleand the newBlazeStoryPlayerTitleImageStyle,BlazeStoryPlayerTitleImageSource(staticSourceordynamicSource), andBlazeStoryPlayerTitleImageStaticSource(imageorurl) types. followEntityinBlazeMomentsPlayerStyle, withBlazeMomentsPlayerFollowEntityStyle,BlazeMomentsPlayerFollowEntityStateStyle,BlazeMomentsPlayerFollowEntityAvatarStyle,BlazeMomentsPlayerFollowEntityChipStyle,BlazeMomentsPlayerFollowEntityChipContentSource,BlazeFollowEntityType, andBlazeFollowEntityTypeValue.BlazePlayerDisplayModesupport onBlazeMomentsPlayerStylethroughplayerDisplayMode.
Follow entities
- Followed-entities management:
BlazeSDK.setFollowedEntities(),insertFollowedEntities(),removeFollowedEntities(), andgetFollowedEntities(). BlazeSDK.setFollowEntitiesDelegate()withBlazeFollowEntitiesDelegate.onFollowEntityClicked,BlazeOnFollowEntityClickedParams, andBlazeFollowEntity.
Widgets
- Moments widget-to-tabs support:
BlazeMomentsRowView.tabs()andBlazeMomentsGridView.tabs()constructors taking atabsConfigurationand an optionalmomentsContainerTabsDelegate. Tapping any widget item opens a fullscreen Moments tabs player, and the widget's thumbnails are driven by the first tab's data source. New types:BlazeMomentsWidgetTabsConfiguration,BlazeMomentsContainerTabItem,BlazePlayerTabsStyle,BlazePlayerTabItemStyle,BlazePlayerTabItemIconStyle,BlazePlayerTabsGradientStyle, andBlazePlayerTabItemCustomImageStates, plusBlazePlayerContainerTabsDelegatewithonTabSelectedandBlazeOnTabSelectedParams. shimmeringinBlazeWidgetLayoutto customize widget loading-state colors, through the newBlazeWidgetShimmeringStyle(baseColor,highlightColor).
Search and content
BlazeDataSourceType.searchfor free text content search (searchText,maxItems,labels).BlazeSDK.showSearchScreen({BlazeSearchScreenOptions? options})to present the standalone search screen, with an optionalsuggestionsDataSource. On Android asuggestionsDataSourceis required. On iOS it's optional.promotedLabelsinBlazeRecommendationsType.forYou, to prioritize certain labels when fetching recommendations.
Localization, privacy, and packaging
BlazeSDK.setPreferredLanguage()for text localization, meaning the content language preference.BlazeSDK.setDisableAnalytics()to stop analytics collection while keeping event callbacks and content delivery.- Swift Package Manager support for iOS, for
blaze_flutter_sdk,blaze_flutter_ima_ads, andblaze_flutter_gam_ads.
Improved
- Accessibility support.
- Improved video caching performance.
- iOS: improved content and HLS prefetching performance.
0.1.1 - Flutter
Date: 2025-10-19
Fixed
- Changed implementation for Flutter SDK version extraction on iOS because of issues on some app configuration.
Updated 11 days ago
Did this page help you?
