enx_flutter_plugin 0.0.1 enx_flutter_plugin: ^0.0.1 copied to clipboard
A new flutter plugin project.
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': '952977'};
print(jsonEncode(value));
var response = await http.post(
Uri.encodeFull("https://vc-mt.vcloudx.com/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': "2236",
"roomId": "5e20466b494181193f9729c1",
"role": "moderator",
"name": "flutter"
};
print(jsonEncode(value));
var response = await http.post(
Uri.encodeFull("https://vc-mt.vcloudx.com/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(
// 'Create Room',
// style: TextStyle(fontSize: 20),
// ),
// onPressed: () {
// createRoom();
// //signup screen
// },
// ),
RaisedButton(
textColor: Colors.white,
color: Colors.deepPurple,
child: Text(
'Join',
style: TextStyle(fontSize: 20),
),
onPressed: () {
createRoom();
createToken();
// Navigator.pushNamed(context, '/Conference');
//signup screen
},
),
],
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 {
debugPrint('log me');
print('log me12');
logger.e('Something has happened');
// EnxFlutterPlugin.joinRoom('eyJ0b2tlbklkIjoiNWVjMjRhM2M5NjM0ZDRlYzg1ZWEwNDMwIiwicm9vbU1ldGEiOnsibmFtZSI6IkRlbW8gUm9vbXMiLCJzZXJ2aWNlX2lkIjoiNWU2ZjY2NzVlMGJiYTczZmNlNjRhMzYyIiwib3duZXJfcmVmIjoiMTQwNDYxN0BraWl0LmFjLmluIiwic2V0dGluZ3MiOnsiZGVzY3JpcHRpb24iOiJEZW1vJ3MgUm9vbSIsIm1vZGUiOiJncm91cCIsInNjaGVkdWxlZCI6ZmFsc2UsImFkaG9jIjpmYWxzZSwiZHVyYXRpb24iOjI0MCwicGFydGljaXBhbnRzIjoiMzAiLCJhdXRvX3JlY29yZGluZyI6ZmFsc2UsImFid2QiOnRydWUsImFjdGl2ZV90YWxrZXIiOnRydWUsImNhbnZhcyI6dHJ1ZSwicXVhbGl0eSI6IlNEIiwibW9kZXJhdG9ycyI6IjEiLCJtYXhfYWN0aXZlX3RhbGtlcnMiOiI2In0sInNpcCI6eyJlbmFibGVkIjpmYWxzZX0sImNyZWF0ZWQiOiIyMDIwLTA1LTAyVDA5OjEzOjQ5LjQzNloiLCJfaWQiOiI1ZWFkMzljZDNjMWFjNWYxMmYxZjkyOWYiLCJpc01lZGlhU2VydmVyQXZhaWxhYmxlIjpmYWxzZSwidXBkYXRlZCI6IjIwMjAtMDUtMDZUMDk6NTQ6NTIuNDk4WiJ9LCJob3N0Ijoic3Nub2RlMS5lbmFibGV4LmlvOjQ0MyIsInNlY3VyZSI6dHJ1ZSwibG9nSWQiOiJvekJXVEYiLCJnYXRld2F5IjoiIiwic2lnbmF0dXJlIjoiTXpJd05XUTFNR000WVRZell6SmlPVFl5WkdSaFpUYzJORFF3TmpCaVpUSmtZalExTWpoa01nPT0ifQ==');
}
void _addEnxrtcEventHandlers() {
EnxFlutterPlugin.onRoomConnected = (Map<dynamic, dynamic> map) {
setState(() {
logger.e('onRoomConnectedFlutter' + jsonEncode(map));
});
EnxFlutterPlugin.publish();
// var list = ['one', 'two', 'three'];
// EnxFlutterPlugin.sendUserData(null, true, list);
EnxFlutterPlugin.switchCamera();
print('sjsdsd');
print(EnxFlutterPlugin.getClientId());
logger.e(EnxFlutterPlugin.getUserList());
};
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) {
print('onStreamAdded' + jsonEncode(map));
print('onStreamAdded Id' + map['streamId']);
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) {
print('onActiveTalkerList ' + map.toString());
// final items = (map['activeList'] as List)
// .map((i) => new ActiveListModel.fromJson(i));
// _remoteUsers.clear();
// if (items.length > 0) {
// setState(() {
// for (final item in items) {
// print('onActiveTalkerList item' + item.streamId.toString());
// // if (_remoteUsers.contains(item.streamId)) {
// // return;
// // } else {
// _remoteUsers.add(item.streamId);
// // }
// }
// });
// }
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,
);
}
}