GuidesAPI ReferenceRelease Notes
HomeLog InHome
Guides

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 promotedLabels with coldStartLabels on BlazeRecommendationsType.forYou. coldStartLabels fetches 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 passes promotedLabels. See Implicit personalization.
  • anyLabelFilter on BlazeRecommendationsType.forYou is now a non-nullable List<String> that defaults to [].
  • The Moments Tabs bar now collapses when a container has 0 or 1 visible tabs. Set isTabTitleVisibleWhenSingleTab: true on BlazePlayerTabsStyle to keep it visible.
  • BlazeGAMBannerAdsDelegate.onGAMBannerAdsAdError now receives a BlazeGAMBannerAdsDelegateOnAdErrorParams object (errorMessage, extraInfo) instead of a bare String.
  • multiAspectRatio on BlazeVideosPlaybackConfiguration is now optional (bool?). Omitting it falls through to the native SDK default, which changed to true (previously false). Pass an explicit value to opt out of picking up native default changes automatically.

Added

Content and data sources

  • BlazeDataSourceType.composite combines 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 new BlazeCompositeDataSourceEntry and BlazeCompositeDataSourceConfig (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 new BlazeVideoContentType (video, stream) and BlazeLiveStreamStatus (live, upcoming, ended) enums. Passed as videosFilterParams on playVideos and prepareVideos, and on BlazeVideosRowView and BlazeVideosGridView. Both fields default to no filtering on that dimension.
  • BlazeOrderType.startTimeAsc and BlazeOrderType.startTimeDesc, to order live and upcoming content by start time.
  • BlazeDataSourcePersonalizedType.playerAndTeamIds(playerIds:, teamIds:) convenience constructor.
  • labelsPriority on BlazeDataSourcePersonalizedType.labels is now optional and defaults to [].

Player control and events

  • BlazeSDK.pauseCurrentPlayer() and BlazeSDK.resumeCurrentPlayer(), to pause and resume the currently presented player.
  • sourceId on the entry point methods (playStory, playStories, prepareStories, playMoment, playMoments, prepareMoments, playVideo, playVideos, prepareVideos), and on handleUniversalLink and handleNotificationPayload. It's surfaced in the sourceId field of the delegate callbacks triggered by the playback it starts.
  • eventId on playStory.
  • onShareClicked on all player delegates, BlazeWidgetDelegate, BlazePlayerEntryPointDelegate, and BlazePlayerContainerTabsDelegate, with BlazeOnShareClickedParams (playerType, sourceId, id, contentType, title, description, sdkGeneratedLink, extraInfo) and BlazeShareContentType (story(pageId:), moment, video). Observer only: the SDK always shares sdkGeneratedLink and the callback can't override it.
  • sdkMetadata on BlazeOnTriggerCustomActionButtonParams, read-only metadata populated by the SDK with the content's extra info at the moment the button was clicked, alongside the app-supplied appMetadata.

Playback configuration

  • ads on BlazeStoriesPlaybackConfiguration, through the new BlazeStoriesAdsPlaybackConfiguration (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 as captions on BlazeStoryPlayerStyle, BlazeMomentsPlayerStyle, and BlazeVideosPlayerStyle. textSize is Android only. On iOS the size is baked into font.
  • BlazeCaptionsPositioning, with BlazeCaptionsXPosition (start, center, custom(offsetPercent:)) and BlazeCaptionsYPosition (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.
  • captions button in BlazeStoryPlayerButtonsStyle and BlazeMomentsPlayerButtonsStyle. Unlike the other button styles, the native default is isVisible: false, so the CC button must be opted into explicitly.
  • cc_state on the VideoProps analytics payload, reporting the captions state of the video. Analytics events reach the host app only through the typed BlazeAnalyticsEvent model, so this field was previously dropped during parsing and is newly visible to BlazeGlobalDelegate.onEventTriggered handlers.

Player styles

  • borderColor and borderWidth on BlazeStoryPlayerCtaStyle, BlazeMomentsPlayerCtaStyle, and BlazeVideosPlayerCtaStyle. A border color supplied by the backend or CMS takes precedence when present and parseable, and these values are used otherwise.
  • shouldPreserveLikesCountBelowThreshold on BlazeMomentsPlayerButtonsStyle, 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.
  • overlayVisibilityThresholdMs on BlazeVideosPlayerStyle, 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

  • widgetId is now optional on all row and grid widgets. A unique value is generated when it's omitted.
  • widgetRemoteIdentifier on 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 extending BlazeWidgetController with reloadAllTabs(), reloadNonActiveTabs(), reloadTab(index:), and reloadTabByContainerId(containerId:) for the fullscreen widget-to-tabs player. reloadTab and reloadTabByContainerId are iOS only.
  • activeTabIndicator on BlazePlayerTabsStyle, through the new BlazePlayerActiveTabIndicatorStyle (isVisible, height), drawing an underline beneath the selected tab. Opt-in, and the indicator color and width always follow the selected tab title.
  • isTabVisibleWhenEmpty on BlazePlayerTabsStyle, to keep or auto-remove a Moments Tabs tab whose content is empty or fails to load. The first tab is always kept.
  • isTabTitleVisibleWhenSingleTab on BlazePlayerTabsStyle. See Breaking changes.

SDK configuration and privacy

  • forceLayoutDirection on BlazeSDK.initSDK(), with the new BlazeLayoutDirection enum (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, and BlazeSDK.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(), and deleteValue(). setContext() clears every existing key first, so prefer setValue() and deleteValue() for incremental updates.

Ads

  • extraInfo (BlazeContentExtraInfo) on BlazeGAMBannerAdsDelegateOnAdEventParams, on the new BlazeGAMBannerAdsDelegateOnAdErrorParams, and on BlazeGAMCustomNativeAdsDelegateOnAdEventParams, carrying contextual metadata about the content surrounding the ad.
  • adInfo on BlazeIMADelegateOnAdEventParams, through the new BlazeIMAAdInfo type (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 ctaVisibility on BlazeVideosPlayerCtaStyle with a simple bool? isVisible. The BlazeVideosPlayerCtaVisibility class and BlazeVideosPlayerCtaVisibilityType enum were removed.
  • Renamed BlazeKeysPresets to BlazeExtraInfoKeyPreset, which is also the type of the keyPreset parameter of BlazeWidgetItemCustomMapping.fromPreset.
  • iOS: raised the minimum deployment target to 15.0.

Added

Playback configuration

  • BlazeVideosPlaybackConfiguration (multiAspectRatio, shouldOpenInLandscape, pipConfiguration, bufferingSpinnerDelayMs), BlazeMomentsPlaybackConfiguration (loopBehavior, bufferingSpinnerDelayMs), and BlazeStoriesPlaybackConfiguration (bufferingSpinnerDelayMs). Passed as playbackConfiguration on the Stories, Moments, and Videos row and grid widgets, and on playStory, playStories, playVideo, and playVideos.
  • Global defaults per vertical: BlazeSDK.setDefaultStoriesPlaybackConfiguration() and getDefaultStoriesPlaybackConfiguration(), setDefaultMomentsPlaybackConfiguration() and getDefaultMomentsPlaybackConfiguration(), setDefaultVideosPlaybackConfiguration() and getDefaultVideosPlaybackConfiguration().
  • Moments auto-advance through BlazeMomentsLoopBehavior.infiniteLoop() and BlazeMomentsLoopBehavior.loopAndAdvance(numberOfPlays:).
  • bufferingSpinnerDelayMs on Stories, Moments, and Videos playback configuration, to control when the buffering spinner appears. The native default is 1000ms, and negative values are clamped to 0.

Player control and events

  • Global player sound-state APIs: BlazeSDK.setPlayerSoundState(BlazePlayerSoundState) and BlazeSDK.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.
  • entryContentId parameter on the entry point methods prepareStories, playStories, prepareMoments, playMoments, prepareVideos, and playVideos.
  • BlazeGlobalDelegate.playbackModificationHandler to modify the playback URL, for example to add tokenization, before HLS or MP4 playback starts, with BlazePlaybackModificationRequest and BlazePlaybackModificationResponse. Returning synchronously or asynchronously are both supported. If the handler throws, the SDK falls back to the original URL.
  • onReadStatusChanged on BlazePlayerEntryPointDelegate, with BlazeOnReadStatusChangedParams.

Casting and picture-in-picture

  • Casting support for the Videos player, using Chromecast on Android and AirPlay on iOS: the casting field in BlazeVideosPlayerButtonsStyle, BlazeSDK.stopActiveCastingSession(), and BlazeSDK.setCastingDelegate() with BlazeCastingDelegate.onCastingStateChanged, BlazeCastingStateChangedParams, and BlazeCastingState.
  • Picture-in-picture support for the Videos player: the pictureInPicture field in BlazeVideosPlayerButtonsStyle, BlazePipConfiguration with enterPipOnAppBackground, BlazeSDK.stopActivePiPSession() and BlazeSDK.isPiPActive(), and BlazeSDK.setPipDelegate() with BlazePipDelegate.onPiPStateChanged, BlazePipStateChangedParams, and BlazePipState.

Player buttons and styles

  • captions, forceRotation, casting, pictureInPicture, seekForward, and seekBackward buttons in BlazeVideosPlayerButtonsStyle.
  • seekForward, seekBackward, and search buttons in BlazeMomentsPlayerButtonsStyle.
  • Custom action buttons: customActionButtons in BlazeStoryPlayerButtonsStyle and BlazeMomentsPlayerButtonsStyle, with BlazeCustomActionButton and BlazeCustomActionButtonParams, a declarative VisibilityCondition (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 the onTriggerCustomActionButton callback on all player delegates.
  • isVisible on BlazeStoryPlayerCtaStyle and BlazeMomentsPlayerCtaStyle.
  • Story player title image, a contextual image displayed alongside the story title in the player header, through the new image property on BlazeStoryPlayerTitleTextStyle and the new BlazeStoryPlayerTitleImageStyle, BlazeStoryPlayerTitleImageSource (staticSource or dynamicSource), and BlazeStoryPlayerTitleImageStaticSource (image or url) types.
  • followEntity in BlazeMomentsPlayerStyle, with BlazeMomentsPlayerFollowEntityStyle, BlazeMomentsPlayerFollowEntityStateStyle, BlazeMomentsPlayerFollowEntityAvatarStyle, BlazeMomentsPlayerFollowEntityChipStyle, BlazeMomentsPlayerFollowEntityChipContentSource, BlazeFollowEntityType, and BlazeFollowEntityTypeValue.
  • BlazePlayerDisplayMode support on BlazeMomentsPlayerStyle through playerDisplayMode.

Follow entities

  • Followed-entities management: BlazeSDK.setFollowedEntities(), insertFollowedEntities(), removeFollowedEntities(), and getFollowedEntities().
  • BlazeSDK.setFollowEntitiesDelegate() with BlazeFollowEntitiesDelegate.onFollowEntityClicked, BlazeOnFollowEntityClickedParams, and BlazeFollowEntity.

Widgets

  • Moments widget-to-tabs support: BlazeMomentsRowView.tabs() and BlazeMomentsGridView.tabs() constructors taking a tabsConfiguration and an optional momentsContainerTabsDelegate. 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, and BlazePlayerTabItemCustomImageStates, plus BlazePlayerContainerTabsDelegate with onTabSelected and BlazeOnTabSelectedParams.
  • shimmering in BlazeWidgetLayout to customize widget loading-state colors, through the new BlazeWidgetShimmeringStyle (baseColor, highlightColor).

Search and content

  • BlazeDataSourceType.search for free text content search (searchText, maxItems, labels).
  • BlazeSDK.showSearchScreen({BlazeSearchScreenOptions? options}) to present the standalone search screen, with an optional suggestionsDataSource. On Android a suggestionsDataSource is required. On iOS it's optional.
  • promotedLabels in BlazeRecommendationsType.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, and blaze_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.

Did this page help you?