enx_flutter_plugin 1.0.0 copy "enx_flutter_plugin: ^1.0.0" to clipboard
enx_flutter_plugin: ^1.0.0 copied to clipboard

outdated

A new flutter plugin project.

example/lib/main.dart

import 'dart:convert';

import 'package:enx_flutter_plugin/base.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'package:enx_flutter_plugin/enx_player_widget.dart';
import 'package:logger/logger.dart';
import 'package:enx_flutter_plugin/enx_flutter_plugin.dart';

void main() {
  runApp(MaterialApp(
    home: MyApp(),
    routes: <String, WidgetBuilder>{
      '/Conference': (context) => MyConfApp(
            token: _State.token,
          )
    },
  ));
}

class MyApp extends StatefulWidget {
  @override
  _State createState() => _State();
}

class MyConfApp extends StatefulWidget {
  MyConfApp({this.token});
  final String token;
  @override
  Conference createState() => Conference();
}

class _State extends State<MyApp> {
  static String token = "";
  TextEditingController nameController = TextEditingController();
  TextEditingController passwordController = TextEditingController();

  Future<String> createRoom() async {
    var value = {'pin': ''};
    print(jsonEncode(value));
    var response = await http.post(
        Uri.encodeFull("url/getRoomByPin"),
        headers: {"Content-Type": "application/json"},
        body: jsonEncode(value));
    if (response.statusCode == 200) {
      print(response.body);
      return response.body;
    } else {
      throw Exception('Failed to load post');
    }
  }

  Future<String> createToken() async {
    var value = {
      'user_ref': "",
      "roomId": "",
      "role": "moderator",
      "name": "flutter"
    };
    print(jsonEncode(value));
    var response = await http.post(
        Uri.encodeFull("url/createToken"),
        headers: {"Content-Type": "application/json"},
        body: jsonEncode(value));
    if (response.statusCode == 200) {
      print(response.body);
      Map<String, dynamic> user = jsonDecode(response.body);
      setState(() => token = user['token'].toString());
      print(token);
      Navigator.pushNamed(context, '/Conference');
      return response.body;
    } else {
      throw Exception('Failed to load post');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Sample App'),
        ),
        body: Padding(
            padding: EdgeInsets.all(10),
            child: ListView(
              children: <Widget>[
                Container(
                    alignment: Alignment.center,
                    padding: EdgeInsets.all(10),
                    child: Text(
                      'Enablex',
                      style: TextStyle(
                          color: Colors.redAccent,
                          fontWeight: FontWeight.w500,
                          fontSize: 30),
                    )),
                Container(
                    alignment: Alignment.center,
                    padding: EdgeInsets.all(10),
                    child: Text(
                      'Welcome !',
                      style: TextStyle(fontSize: 20),
                    )),
                Container(
                  padding: EdgeInsets.all(10),
                  child: TextField(
                    controller: nameController,
                    decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      labelText: 'User Name',
                    ),
                  ),
                ),
                Container(
                  padding: EdgeInsets.fromLTRB(10, 10, 10, 0),
                  child: TextField(
                    obscureText: true,
                    controller: passwordController,
                    decoration: InputDecoration(
                      border: OutlineInputBorder(),
                      labelText: 'Password',
                    ),
                  ),
                ),
                Container(
                    height: 100,
                    width: 300,
                    child: Row(
                      children: <Widget>[
                        RaisedButton(
                          textColor: Colors.white,
                          color: Colors.deepPurple,
                          child: Text(
                            'Join',
                            style: TextStyle(fontSize: 20),
                          ),
                          onPressed: () {
                            createRoom();
                            createToken();
                          },
                        ),
                      ],
                      mainAxisAlignment: MainAxisAlignment.center,
                    ))
              ],
            )));
  }
}

class Conference extends State<MyConfApp> {
  bool _isInChannel = false;
  @override
  void initState() {
    super.initState();
    initEnxRtc();
    _addEnxrtcEventHandlers();
  }

  final logger = Logger();
  Future<void> initEnxRtc() async {
    logger.e('Something has happened');
  }

  void _addEnxrtcEventHandlers() {
    EnxFlutterPlugin.onRoomConnected = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onRoomConnectedFlutter' + jsonEncode(map));
      });
      EnxFlutterPlugin.publish();
      EnxFlutterPlugin.switchCamera();
    };

    EnxFlutterPlugin.onPublishedStream = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onPublishedStream' + jsonEncode(map));
        EnxFlutterPlugin.setupVideo(0, 0, true, 300, 200);
      });
    };

    EnxFlutterPlugin.onStreamAdded = (Map<dynamic, dynamic> map) {
      String streamId;
      setState(() {
        streamId = map['streamId'];
      });
      EnxFlutterPlugin.subscribe(streamId);
    };

    EnxFlutterPlugin.onRoomError = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onRoomError' + jsonEncode(map));
      });
    };
    EnxFlutterPlugin.onAudioEvent = (Map<dynamic, dynamic> map) {
      print('onAudioEvent' + jsonEncode(map));
      setState(() {});
    };

    EnxFlutterPlugin.onActiveTalkerList = (Map<dynamic, dynamic> map) {
      EnxFlutterPlugin.sendFiles(true, []);
      print('sckgschgas');
    };

    EnxFlutterPlugin.onEventError = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onEventError' + jsonEncode(map));
      });
    };

    EnxFlutterPlugin.onEventInfo = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onEventInfo' + jsonEncode(map));
      });
    };
    EnxFlutterPlugin.onUserConnected = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onUserConnected' + jsonEncode(map));
      });
    };
    EnxFlutterPlugin.onUserDisConnected = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onUserDisConnected' + jsonEncode(map));
      });
    };
    EnxFlutterPlugin.onRoomDisConnected = (Map<dynamic, dynamic> map) {
      setState(() {
        logger.e('onRoomDisConnected' + jsonEncode(map));
      });
    };
  }

  void _toggleChannel() {
    setState(() async {
      if (_isInChannel) {
        _isInChannel = false;
        await EnxFlutterPlugin.disconnect();
      } else {
        _isInChannel = true;
        Map<String, dynamic> map2 = {
          'minWidth': 320,
          'minHeight': 180,
          'maxWidth': 1280,
          'maxHeight': 720
        };
        Map<String, dynamic> map1 = {
          'audio': true,
          'video': true,
          'data': true,
          'framerate': 30,
          'maxVideoBW': 1500,
          'minVideoBW': 150,
          'audioMuted': false,
          'videoMuted': false,
          'name': 'flutter',
          'videoSize': map2
        };
        await EnxFlutterPlugin.joinRoom(widget.token, map1, null, null);
      }
    });
  }

  Widget _viewRows() {
    return Row(
      children: <Widget>[
        for (final widget in _renderWidget)
          Expanded(
            child: Container(
              child: widget,
            ),
          )
      ],
    );
  }

  Iterable<Widget> get _renderWidget sync* {
    for (final streamId in _remoteUsers) {
      print('kklklklk');
      print(streamId);
      yield EnxPlayerWidget(streamId, local: false, width: 120, height: 120);
    }
  }

  final _remoteUsers = List<int>();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Enx Plugin example'),
        ),
        body: Container(
          child: Column(
            children: [
              Container(
                  height: 100,
                  width: 100,
                  child:
                      EnxPlayerWidget(0, local: true, width: 100, height: 100)),
              Container(height: 100, width: 100, child: _viewRows()),
              OutlineButton(
                child: Text(_isInChannel ? 'Leave Channel' : 'Join Channel'),
                onPressed: _toggleChannel,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class ActiveList {
  bool active;
  List<ActiveListModel> activeList = [];
  String event;

  ActiveList(this.active, this.activeList, this.event);

  factory ActiveList.fromJson(Map<dynamic, dynamic> json) {
    return ActiveList(
      json['active'] as bool,
      (json['activeList'] as List).map((i) {
        return ActiveListModel.fromJson(i);
      }).toList(),
      json['event'] as String,
    );
  }
}

class ActiveListModel {
  String name;
  int streamId;
  String clientId;
  String videoaspectratio;
  String mediatype;
  bool videomuted;
  String reason;

  ActiveListModel(this.name, this.streamId, this.clientId,
      this.videoaspectratio, this.mediatype, this.videomuted, this.reason);

  // convert Json to an exercise object
  factory ActiveListModel.fromJson(Map<dynamic, dynamic> json) {
    return ActiveListModel(
      json['name'] as String,
      json['streamId'] as int,
      json['clientId'] as String,
      json['videoaspectratio'] as String,
      json['mediatype'] as String,
      json['videomuted'] as bool,
      json['reason'] as String,
    );
  }
}
15
likes
0
pub points
69%
popularity

Publisher

unverified uploader

A new flutter plugin project.

Homepage

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on enx_flutter_plugin