linkv_rtc 0.0.9 copy "linkv_rtc: ^0.0.9" to clipboard
linkv_rtc: ^0.0.9 copied to clipboard

linkv_rtc Audio/Video Flutter SDK is a flutter plugin wrapper based on LinkV native Android/iOS SDK.

example/lib/main.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:linkv_rtc/linkv_api_defines.dart';
import 'dart:async';
import 'package:linkv_rtc/linkv_rtc_engine.dart';
import 'package:linkv_example/live_page.dart';
import 'linkv_ui.dart';
import 'package:linkv_rtc/linkv_error_code.dart';
import 'package:permission_handler/permission_handler.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      debugShowCheckedModeBanner: false,
      home: MainView(),
    );
  }
}

class MainView extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MainView> {
  final _roomIdFieldController = TextEditingController();
  bool _isSDKInit = false;
  String _version;

  @override
  void initState() {
    super.initState();

    LinkVRTCEngine.getSdkVersion().then((value) => {
      this.setState(() {
        _version = value;
      })
    });

    initSDK();

    _roomIdFieldController.text = "9527";

    LinkVRTCEngine.setAVConfig(LVAVConfig.PROFILE_360P);
  }

  void initSDK() {
    LinkVRTCEngine.initSDK("your_app_id","your_app_sign", false, true).then((result){
      print('D/Wing initSDK result:$result');
      if(result == LVErrorCode.SUCCESS){
        _isSDKInit = true;
      }
    });
  }

  void onClickWatchLive() async {
    print("onClickWatchLive");

    bool isCan = await canLive();
    if (!isCan) return;

    Navigator.push(context, MaterialPageRoute(builder: (context) =>  LivePage(false, _roomIdFieldController.text)));
  }

  void onClickStartLive() async {
    print("onClickStartLive");
    bool isCan = await canLive();
    if (!isCan) return;

    Navigator.push(context, MaterialPageRoute(builder: (context) =>  LivePage(true, _roomIdFieldController.text)));
  }

  Future<bool> canLive() async {
    // 1. 相机权限
    bool canLive = await checkPermission();
    if (!canLive) return canLive;

    // 2. 是否输入了房间id
    if(_roomIdFieldController.text.length == 0) {
      LinkvUi.showAlert(context, "Please enter your room number!");
      return false;
    }

    // 3. SDK是否已经初始化成功了
    if (!_isSDKInit) {
      initSDK();
      return false;
    }
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        resizeToAvoidBottomPadding: false,
        appBar: AppBar(
          title: const Text('LinkV example app'),
        ),
        body: SafeArea(
          child: GestureDetector(
            behavior: HitTestBehavior.translucent,
            onTap: () => FocusScope.of(context).requestFocus(new FocusNode()),

            child: Container(
              padding: const EdgeInsets.only(left: 20, top: 20, right: 20),
              child: Column(
                children: <Widget>[
                  Row(
                    children: <Widget>[
                      Text("Version: "),
                      Expanded(child: Text("$_version"),)
                    ],
                  ),
                  Padding(padding: const EdgeInsets.only(top: 20),),
                  TextField(
                    controller: _roomIdFieldController,
                    decoration: InputDecoration(
                      contentPadding: const EdgeInsets.only(left: 10, top: 12, bottom: 12),
                      hintText: "Please enter room_id",
                      enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.grey)),
                      focusedBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.cyan))
                    ),
                  ),
                  Padding(padding: const EdgeInsets.only(top: 20),),
                  Container(
                    height: 50,
                    width: MediaQuery.of(context).size.width - 20,
                    color: Colors.cyan,
                    child: CupertinoButton(
                      child: Text("Start Live", style: TextStyle(color: Colors.white),),
                      onPressed: onClickStartLive,
                    ),
                  ),
                  Padding(padding: const EdgeInsets.only(top: 20),),
                  Container(
                    height: 50,
                    width: MediaQuery.of(context).size.width - 20,
                    color: Colors.cyan,
                    child: CupertinoButton(
                      child: Text("Watch Live", style: TextStyle(color: Colors.white),),
                      onPressed: onClickWatchLive,
                    ),
                  )
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }

// MARK: - Permission
  Future<bool> checkPermission() async {
    Permission _camera = Permission.camera;
    Permission _microphone = Permission.microphone;

    PermissionStatus status;
    status = await _camera.request();
    if (status != PermissionStatus.granted) return false;
    status = await _microphone.request();
    if (status != PermissionStatus.granted) return false;

    return true;
  }
}
1
likes
20
pub points
0%
popularity

Publisher

unverified uploader

linkv_rtc Audio/Video Flutter SDK is a flutter plugin wrapper based on LinkV native Android/iOS SDK.

Homepage

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on linkv_rtc