enx_flutter_plugin 1.0.0 enx_flutter_plugin: ^1.0.0 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': ''};
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,
);
}
}