tivio_sdk 1.0.0-rc.1 tivio_sdk: ^1.0.0-rc.1 copied to clipboard
Tivio Flutter SDK
Tivio Flutter SDK #
Initialize Tivio #
- The init method is called with parameter
secret
that is generated in administration and identifies the application. - Init returns a Tivio instance.
import 'package:tivio_sdk/tivio.dart';
class App {
Tivio _tivio;
init () async {
_tivio = await initTivio('a18b5f9e-4eb3-4bdb-a69b-660f1cd0d9b9');
}
}
Reactive data #
- Widget can be extended with one or more mixins
TivioWidgets|TivioChannels|TivioSections|TivioVideos
. - After initialization mixin starts to propagate data into state.
TivioWidget #
- Initialize by
initializeTivioWidgets
with a widget id and instance ofTivio
. - Data are in
tivioWidgets
attribute.
class _CustomWidgetState extends State<CustomWidget> with TivioWidget {
@override
void initState() {
super.initState();
initializeTivioWidget('Homepage', this.widget._tivio);
}
@override
Widget build(BuildContext context) {
return Column(
children: [
(tivioWidget != null) ? Text(tivioWidget.name) : Text('Initializing')
]
);
}
}
TivioChannels #
- Initialize by
initializeTivioChannels
with an instance ofTivioDataWidget
. - Data are in
tivioChannels
attribute.
class _CustomWidgetState extends State<CustomWidget> with TivioChannels {
@override
void initState() {
super.initState();
initializeTivioChannels(this.widget._tivioDataWidget);
}
@override
Widget build(BuildContext context) {
return Column(
children: [
...tivioChannels.entries.map((e) => Text(e.value.name)).toList(),
]
);
}
}
TivioSections #
- Initialize by
initializeTivioSections
with an instance ofTivioDataChannel
. - Data are in
tivioSections
attribute.
class _CustomWidgetState extends State<CustomWidget> with TivioSections {
@override
void initState() {
super.initState();
initializeTivioSections(this.widget._tivioDataChannel);
}
@override
Widget build(BuildContext context) {
return Column(
children: [
...tivioSections.entries.map((e) => Text(e.value.name)).toList(),
]
);
}
}
TivioVideos #
- Initialize by
initializeTivioVideos
with an instance ofTivioDataSection
. - Data are in
tivioVideos
attribute.
class _CustomWidgetState extends State<CustomWidget> with TivioVideos {
@override
void initState() {
super.initState();
initializeTivioVideos(this.widget._tivioDataSection);
}
@override
Widget build(BuildContext context) {
return Column(
children: [
...tivioVideos.entries.map((e) => Text(e.value.name)).toList(),
]
);
}
}
Data by id #
- Methods listed in this section are available on
tivio
instance.
Get widget by id #
- Required argument
id
Future<TivioDataWidget> getWidgetById(String id) {}
Get channel by id #
- Required argument
id
Future<TivioDataChannel> getChannelById(String id) {}
Get video by id #
- Required argument
id
Future<TivioDataChannel> getVideoById(String id) {}
Search #
- Methods listed in this section are available on
tivio
instance.
Search channels #
- Required argument
query
- Optional argument limit
Future<TivioDataPagination<TivioDataChannel>> searchChannels({@required String query, int limit = 10}) {}
Search videos #
- Required argument
query
- Optional argument limit
Future<TivioDataPagination<TivioDataVideo>> searchVideos({@required String query, int limit = 10}) {}
DTO #
Pagination #
- Result of methods that can return a larger amount of data is wrapped in the
Pagination
object. - To get all records iterate until the
hasNextPage
is true. - Called method can have a
count
parameter to change the number of returned records.
class TivioDataPagination<T> {
List<T> records;
bool hasNextPage;
}
Widget #
- A widget holds together multiple channels with some specific configuration.
class TivioDataWidget {
String id;
String name;
subscribeToChannels(Function(TivioDataChannel) callback) {}
unsubscribeToChannels() {}
}
Channel #
- The Channel is a container for multiple sections.
class _ChannelImages {
String logo;
String cover;
}
class TivioDataChannel {
String id;
String name;
_ChannelImages images;
subscribeToSections(Function(TivioDataSection) callback) {}
unsubscribeToSections() {}
}
Section #
- The Section is a container for multiple videos.
class TivioDataSection {
String id;
String name;
subscribeToVideos(Function(TivioDataVideo) callback) {}
unsubscribeToVideos() {}
}
Video #
class _Url {
String hls;
}
class _VideoImages {
String cover;
}
class _Monetization {
num price;
String type;
}
class TivioDataPlaylistItem {
String name;
_Url url;
Duration duration;
}
class TivioDataVideo {
String id;
String name;
Duration duration;
DateTime created;
bool isPlaylist;
List<TivioDataPlaylistItem> playlistItems;
_Url url;
_VideoImages images;
_Monetization monetization;
}
Video player #
Declarative api #
import 'package:tivio_sdk/tivio.dart';
class App extends StatefulWidget {
@override
_AppState createState() => __AppState();
}
class _AppState extends State<App> {
bool _isTivioInitialized = false;
Tivio _tivio;
@override
void initState() {
super.initState();
initializeTivio();
}
initializeTivio() async {
_tivio = await initTivio('a18b5f9e-4eb3-4bdb-a69b-660f1cd0d9b9');
setState(() {
_isTivioInitialized = true;
});
}
@override
Widget build(BuildContext context) {
return (_isTivioInitialized)
? Column(
children: [
TivioPlayer(
playerId: 'MainPlayer',
tivio: _tivio,
source: TivioPlayerChannelSource(
'https://cdn1.tiv.io/raw/xxW7ifg8dbNM17tgcwmp/Ďatelinka%20vs.%20Hošek.mp4/playlist.m3u8',
'Ďatelinka vs. Hošek',
Duration(),
Duration(milliseconds: 1200080),
),
),
],
)
: Text('...');
}
}
Imperative api #
import 'package:tivio_sdk/tivio.dart';
class App extends StatefulWidget {
@override
_AppState createState() => __AppState();
}
class _AppState extends State<App> {
bool _isTivioInitialized = false;
Tivio _tivio;
TivioPlayerController _tivioPlayerController;
@override
void initState() {
super.initState();
initializeTivio();
}
initializeTivio() async {
_tivio = await initTivio('a18b5f9e-4eb3-4bdb-a69b-660f1cd0d9b9');
_tivioPlayerController = TivioPlayerController();
setState(() {
_isTivioInitialized = true;
});
}
@override
Widget build(BuildContext context) {
return (_isTivioInitialized)
? Column(
children: [
TivioPlayer(
playerId: 'MainPlayer',
tivio: _tivio,
controller: _tivioPlayerController,
),
Column(
children: [
TextButton(
onPressed: () {
_tivioPlayerController.openAndPlay(
TivioPlayerChannelSource(
'https://cdn1.tiv.io/raw/xxW7ifg8dbNM17tgcwmp/Ďatelinka%20vs.%20Hošek.mp4/playlist.m3u8',
'Ďatelinka vs. Hošek',
Duration(),
Duration(milliseconds: 1200080),
),
);
},
child: Text('Peňáz vs. Debienne'),
),
TextButton(
onPressed: () {
_tivioPlayerController.openAndPlay(
TivioPlayerChannelSource(
'https://cdn1.tiv.io/raw/q4LDHFNA0iiU9YAh8tPk/OKTAGON 19_ Vémola vs. Mikulášek.mp4/playlist.m3u8',
'OKTAGON 19 Vémola vs Mikulášek',
Duration(),
Duration(milliseconds: 1460400),
),
);
},
child: Text('Szabová vs. Zouak'),
),
],
)
],
)
: Text('...');
}
}
Api #
TivioPlayer
class TivioPlayer {
TivioPlayer(String playerId, Tivio tivio, TivioPlayerController controller);
}
TivioPlayerChannelSource
class TivioPlayerChannelSource {
final String uri;
final String name;
final Duration from;
final Duration to;
}
TivioPlayerController
class TivioPlayerController {
void openAndPlay (TivioPlayerChannelSource source) {}
}