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
- Docs: support.bluebillywig.com
- Email: support@bluebillywig.com
License
Proprietary — Blue Billywig.
Libraries
- bb_channel
- Blue Billywig Channel SDK for Flutter.