tivio_sdk 1.0.0-rc.3 copy "tivio_sdk: ^1.0.0-rc.3" to clipboard
tivio_sdk: ^1.0.0-rc.3 copied to clipboard

outdated

Tivio Flutter SDK

Tivio Flutter SDK #

Initialize Tivio #

  • Parameter secret is generated in administration and identifies the application.
  • Parameter language is language of the application.
  • Init returns a Tivio instance.
import 'package:tivio_sdk/tivio.dart';

class App {
    Tivio _tivio;

    init () async {
        _tivio = await initTivio(secret: 'a18b5f9e-4eb3-4bdb-a69b-660f1cd0d9b9', language: TivioLanguages.cs);
    }
}

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 of Tivio.
  • 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 of TivioDataWidget.
  • 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 of TivioDataChannel.
  • 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 of TivioDataSection.
  • 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) {}
  • 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) {}
}