Blue Billywig Channel SDK for Flutter

Embed a Blue Billywig video channel in any Flutter app with native video playback, navigation, search, multi-channel support, deep linking, and analytics — all driven by a single declarative widget.

The SDK pairs the BB channel UI (loaded from BB's CDN) with the native player from flutter-bb-player for hardware-accelerated playback with ads, Chromecast, and Picture-in-Picture.

Install

dependencies:
  bb_channel:
    git: https://github.com/bluebillywig/flutter-bb-channel
  bb_player:
    git: https://github.com/bluebillywig/flutter-bb-player

Supports Flutter >=3.19 (Dart 3.3+) through the current master.

Android

Add the BB Maven repo so the player can resolve native artifacts:

allprojects {
  repositories {
    google()
    mavenCentral()
    maven { url 'https://maven.bluebillywig.com/releases' }
  }
}

iOS

platform :ios, '14.0'

Quick start

import 'package:bb_channel/bb_channel.dart';

BBChannelWithPlayer(
  channelUrl: 'https://demo.bbvms.com/ch/123.json',
  onReady: () => print('Channel loaded'),
  onMediaPlay: (m) => print('Playing: ${m.title}'),
)

That's it — the widget handles channel UI, navigation, search, the native player, and analytics out of the box.

API

BBChannelWithPlayer

Primary widget. Renders the channel UI and uses the native BB player for playback. On the detail page, the player is mounted inline; tapping a preview thumbnail anywhere else opens the native modal player.

Prop Type Description
channelUrl String (required) https://<pub>.bbvms.com/ch/<id>.json
options BBChannelOptions autoPlay, JWT, search-bar visibility, etc.
controller BBChannelController? Imperative control (play, navigate, search, …)
initialNavigationState BBNavigationState? Restore navigation on mount (deep linking)
safeAreaEdges Set<BBSafeAreaEdge> Which edges receive safe-area padding (default: top)
handleBackButton bool Intercept the Android back button to navigate within the channel
playerMode BBPlayerMode inline (default) or fullscreen
playerAspectRatio double Default 16:9; auto-overridden when a clip reports its own ratio
jwt String? JWT for authenticated content (used for both channel and player)
onReady / onError callbacks Lifecycle
onMediaPlay / onMediaPause / onMediaEnd (BBMediaInfo) => void Media lifecycle
onTimeUpdate (BBTimeUpdateEvent) => void Frequent — for progress bars
onPlayerEvent (BBPlayerEvent) => void Sealed-class hierarchy — switch over event subtypes
onAnalyticsEvent (BBAnalyticsEvent) => void Forward BB analytics into your own pipeline
onNativePlayerStateChange (BBNativePlayerStatus) => void Idle / loading / playing / paused / ended

BBChannelController

Pass a controller to drive the channel from outside:

final ctrl = BBChannelController();

BBChannelWithPlayer(channelUrl: '…', controller: ctrl);

// Later, anywhere…
ctrl.playVideo('12345');
ctrl.search('news');
final state = await ctrl.getNavigationState();

Available methods include play, pause, seek, setVolume, setMuted, enterFullscreen, exitFullscreen, setJwt, playVideo, navigateToEntity, navigateTo, goBack, search, setNavigationState, getNavigationState, getPlayerState, getPlayers, setActivePlayer.

Types

The SDK exposes typed data classes for every event payload: BBMediaInfo, BBNavigationState, BBNavigationEvent, BBPlayerState, BBPlayerEvent (sealed hierarchy), BBTimeUpdateEvent, BBClipLoadedEvent, BBAdEvent, BBAnalyticsEvent, BBSearchEvent, BBErrorEvent.

See lib/src/bb_types.dart for the canonical definitions.

Examples

  • example/ — full QA app with channel browser, viewer, per-channel settings, and a live event inspector.

Support

License

Proprietary — Blue Billywig.

Libraries

bb_channel
Blue Billywig Channel SDK for Flutter.