star_live 1.1.2-alpha1.3 copy "star_live: ^1.1.2-alpha1.3" to clipboard
star_live: ^1.1.2-alpha1.3 copied to clipboard

outdated

star live flutter plugin

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:star_live/page/home/live_home_page.dart';
import 'package:star_live/sdk/live_env.dart';
import 'package:star_live/sdk/live_sdk_callback.dart';
import 'package:star_live/sdk/live_sdk_manager.dart';
import 'package:star_live/utils/debug_log.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'StarLive',
      debugShowCheckedModeBanner: false,
      navigatorObservers: [TestRouteObserver()],
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class TestRouteObserver extends NavigatorObserver {
  @override
  void didPush(Route route, Route? previousRoute) {
    super.didPush(route, previousRoute);
    debugLog("[didPush] >> current:${route.settings.name}, previous:${previousRoute?.settings.name}", tag: "NavigatorObserver");
  }

  @override
  void didPop(Route route, Route? previousRoute) {
    super.didPop(route, previousRoute);
    debugLog("[didPop] >> current:${route.settings.name}, previous:${previousRoute?.settings.name}", tag: "NavigatorObserver");
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _hadLogin = false;

  @override
  void initState() {
    super.initState();
    LiveSdkManager.instance.initSdk(
        appId: "8", //appId需申请
        env: LiveEnv.beta, //beta:测试环境;release:线上环境
        debug: true, //true:打印log;false:关闭log
        callback: LiveSdkCallback(onCheckLiveRoomPermission: (context) {
          //是否允许看播,返回true则允许。返回false则业务方自行处理页面逻辑
          sdkLog("[onCheckLiveRoomPermission]");
          return true;
        }, onCustomAdClick: (context, id, type, location, key, value) {
          //自定义广告点击时间
          //id:广告id
          //type:广告类型。0:业务方在直播后台设置的自定义广告;1:业务方在plugin设置的广告
          //location:广告位置。0:首页banner;1:直播间banner
          //key:广告自定义key
          //value:广告自定义value
          sdkLog("[onCustomAdClick] >> id:$id, type:$type, key:$key, value:$value");
        }, onNeedLogin: (context) {
          //未登录。需要业务方更新uid和token后调用LiveSdkManager.instance.loginSDK
          sdkLog("[onNeedLogin]");
        }, onRecharge: (context) async {
          //跳转业务方充值页面
          //需要返回 Navigator Future,如
          //return Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => const RechargePage()));
          sdkLog("[onRecharge]");
        }, onUserOffline: (context) {
          //用户在其他设备登录被挤下线,需要业务方重新调用LiveSdkManager.instance.loginSDK
          sdkLog("[onUserOffline]");
        }));
  }

  void _login() {
    if (!_hadLogin) {
      LiveSdkManager.instance.loginSDK(
        uid: "bGlS1re1L9KJyJ3KHDrYTm8cDA7Bn6KGh06bh0m8CJc=", //业务方的直播uid
        token: "ba67ef58b250eaee60bac748712a0789", //业务方的直播token
        callback: (success, msg) {
          _hadLogin = true;
          if (success) {
            Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => const LiveHomePage()));
          }
        },
      );
    } else {
      Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => const LiveHomePage()));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("StarLive plugin sdk demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: const <Widget>[
            Text(
              'star live plugin sdk test',
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _login,
        tooltip: '直播首页',
        child: const Icon(Icons.home),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}