Add Zoom SDk
Showing
No preview for this file type
.dart_tool/package_config.json
0 → 100644
.dart_tool/package_config_subset
0 → 100644
.dart_tool/version
0 → 100644
example/.gitignore
deleted
100755 → 0
example/.metadata
deleted
100755 → 0
example/README.md
deleted
100755 → 0
example/analysis_options.yaml
deleted
100644 → 0
example/android/.gitignore
deleted
100755 → 0
example/android/app/build.gradle
deleted
100755 → 0
544 Bytes
442 Bytes
721 Bytes
1.01 KB
1.41 KB
example/android/build.gradle
deleted
100755 → 0
example/android/gradle.properties
deleted
100755 → 0
example/android/settings.gradle
deleted
100755 → 0
example/android/settings_aar.gradle
deleted
100755 → 0
example/ios/.gitignore
deleted
100755 → 0
example/ios/Flutter/Debug.xcconfig
deleted
100755 → 0
example/ios/Flutter/Release.xcconfig
deleted
100755 → 0
example/ios/Podfile
deleted
100755 → 0
example/ios/Podfile.lock
deleted
100644 → 0
example/ios/Runner/AppDelegate.swift
deleted
100755 → 0
{ | ||
"images" : [ | ||
{ | ||
"size" : "20x20", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "20x20", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "3x" | ||
}, | ||
{ | ||
"size" : "29x29", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"size" : "29x29", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "29x29", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "3x" | ||
}, | ||
{ | ||
"size" : "40x40", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "40x40", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "3x" | ||
}, | ||
{ | ||
"size" : "60x60", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "60x60", | ||
"idiom" : "iphone", | ||
"filename" : "[email protected]", | ||
"scale" : "3x" | ||
}, | ||
{ | ||
"size" : "20x20", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"size" : "20x20", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "29x29", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"size" : "29x29", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "40x40", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"size" : "40x40", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "76x76", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"size" : "76x76", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "83.5x83.5", | ||
"idiom" : "ipad", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"size" : "1024x1024", | ||
"idiom" : "ios-marketing", | ||
"filename" : "[email protected]", | ||
"scale" : "1x" | ||
} | ||
], | ||
"info" : { | ||
"version" : 1, | ||
"author" : "xcode" | ||
} | ||
} |
564 Bytes
{ | ||
"images" : [ | ||
{ | ||
"idiom" : "universal", | ||
"filename" : "LaunchImage.png", | ||
"scale" : "1x" | ||
}, | ||
{ | ||
"idiom" : "universal", | ||
"filename" : "[email protected]", | ||
"scale" : "2x" | ||
}, | ||
{ | ||
"idiom" : "universal", | ||
"filename" : "[email protected]", | ||
"scale" : "3x" | ||
} | ||
], | ||
"info" : { | ||
"version" : 1, | ||
"author" : "xcode" | ||
} | ||
} |
68 Bytes
68 Bytes
68 Bytes
example/ios/Runner/Info.plist
deleted
100755 → 0
example/lib/main.dart
deleted
100755 → 0
example/lib/meeting_screen.dart
deleted
100755 → 0
import 'dart:async'; | ||
import 'dart:io'; | ||
import 'package:flutter/foundation.dart'; | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_zoom_sdk/zoom_options.dart'; | ||
import 'package:flutter_zoom_sdk/zoom_view.dart'; | ||
class MeetingWidget extends StatefulWidget { | ||
const MeetingWidget({Key? key}) : super(key: key); | ||
@override | ||
_MeetingWidgetState createState() => _MeetingWidgetState(); | ||
} | ||
class _MeetingWidgetState extends State<MeetingWidget> { | ||
TextEditingController meetingIdController = TextEditingController(); | ||
TextEditingController meetingPasswordController = TextEditingController(); | ||
late Timer timer; | ||
@override | ||
Widget build(BuildContext context) { | ||
// new page needs scaffolding! | ||
return Scaffold( | ||
appBar: AppBar( | ||
title: const Text('Join meeting'), | ||
), | ||
body: Padding( | ||
padding: const EdgeInsets.symmetric( | ||
vertical: 8.0, | ||
horizontal: 32.0, | ||
), | ||
child: Column( | ||
children: [ | ||
Padding( | ||
padding: const EdgeInsets.only(bottom: 8.0), | ||
child: TextField( | ||
controller: meetingIdController, | ||
decoration: const InputDecoration( | ||
border: OutlineInputBorder(), | ||
labelText: 'Meeting ID', | ||
), | ||
), | ||
), | ||
Padding( | ||
padding: const EdgeInsets.only(bottom: 8.0), | ||
child: TextField( | ||
controller: meetingPasswordController, | ||
decoration: const InputDecoration( | ||
border: OutlineInputBorder(), | ||
labelText: 'Password', | ||
), | ||
), | ||
), | ||
Padding( | ||
padding: const EdgeInsets.all(16.0), | ||
child: Builder( | ||
builder: (context) { | ||
// The basic Material Design action button. | ||
return ElevatedButton( | ||
style: ElevatedButton.styleFrom( | ||
primary: Colors.blue, // background | ||
onPrimary: Colors.white, // foreground | ||
), | ||
onPressed: () => { | ||
{joinMeeting(context)} | ||
}, | ||
child: const Text('Join'), | ||
); | ||
}, | ||
), | ||
), | ||
Padding( | ||
padding: const EdgeInsets.all(16.0), | ||
child: Builder( | ||
builder: (context) { | ||
// The basic Material Design action button. | ||
return ElevatedButton( | ||
style: ElevatedButton.styleFrom( | ||
primary: Colors.blue, // background | ||
onPrimary: Colors.white, // foreground | ||
), | ||
onPressed: () => { | ||
{startMeeting(context)} | ||
}, | ||
child: const Text('Start Meeting'), | ||
); | ||
}, | ||
), | ||
), | ||
Padding( | ||
padding: const EdgeInsets.all(16.0), | ||
child: Builder( | ||
builder: (context) { | ||
// The basic Material Design action button. | ||
return ElevatedButton( | ||
style: ElevatedButton.styleFrom( | ||
primary: Colors.blue, // background | ||
onPrimary: Colors.white, // foreground | ||
), | ||
onPressed: () => startMeetingNormal(context), | ||
child: const Text('Start Meeting With Meeting ID'), | ||
); | ||
}, | ||
), | ||
) | ||
], | ||
), | ||
), | ||
); | ||
} | ||
//API KEY & SECRET is required for below methods to work | ||
//Join Meeting With Meeting ID & Password | ||
joinMeeting(BuildContext context) { | ||
bool _isMeetingEnded(String status) { | ||
var result = false; | ||
if (Platform.isAndroid) { | ||
result = status == "MEETING_STATUS_DISCONNECTING" || | ||
status == "MEETING_STATUS_FAILED"; | ||
} else { | ||
result = status == "MEETING_STATUS_IDLE"; | ||
} | ||
return result; | ||
} | ||
if (meetingIdController.text.isNotEmpty && | ||
meetingPasswordController.text.isNotEmpty) { | ||
ZoomOptions zoomOptions = ZoomOptions( | ||
domain: "zoom.us", | ||
appKey: "XKE4uWfeLwWEmh78YMbC6mqKcF8oM4YHTr9I", //API KEY FROM ZOOM | ||
appSecret: | ||
"bT7N61pQzaLXU6VLj9TVl7eYuLbqAiB0KAdb", //API SECRET FROM ZOOM | ||
); | ||
var meetingOptions = ZoomMeetingOptions( | ||
userId: 'username', | ||
/// pass username for join meeting only --- Any name eg:- EVILRATT. | ||
meetingId: meetingIdController.text, | ||
/// pass meeting id for join meeting only | ||
meetingPassword: meetingPasswordController.text, | ||
/// pass meeting password for join meeting only | ||
disableDialIn: "true", | ||
disableDrive: "true", | ||
disableInvite: "true", | ||
disableShare: "true", | ||
disableTitlebar: "false", | ||
viewOptions: "true", | ||
noAudio: "false", | ||
noDisconnectAudio: "false"); | ||
var zoom = ZoomView(); | ||
zoom.initZoom(zoomOptions).then((results) { | ||
if (results[0] == 0) { | ||
zoom.onMeetingStatus().listen((status) { | ||
if (kDebugMode) { | ||
print( | ||
"[Meeting Status Stream] : " + status[0] + " - " + status[1]); | ||
} | ||
if (_isMeetingEnded(status[0])) { | ||
if (kDebugMode) { | ||
print("[Meeting Status] :- Ended"); | ||
} | ||
timer.cancel(); | ||
} | ||
}); | ||
if (kDebugMode) { | ||
print("listen on event channel"); | ||
} | ||
zoom.joinMeeting(meetingOptions).then((joinMeetingResult) { | ||
timer = Timer.periodic(const Duration(seconds: 2), (timer) { | ||
zoom.meetingStatus(meetingOptions.meetingId!).then((status) { | ||
if (kDebugMode) { | ||
print("[Meeting Status Polling] : " + | ||
status[0] + | ||
" - " + | ||
status[1]); | ||
} | ||
}); | ||
}); | ||
}); | ||
} | ||
}).catchError((error) { | ||
if (kDebugMode) { | ||
print("[Error Generated] : " + error); | ||
} | ||
}); | ||
} else { | ||
if (meetingIdController.text.isEmpty) { | ||
ScaffoldMessenger.of(context).showSnackBar(const SnackBar( | ||
content: Text("Enter a valid meeting id to continue."), | ||
)); | ||
} else if (meetingPasswordController.text.isEmpty) { | ||
ScaffoldMessenger.of(context).showSnackBar(const SnackBar( | ||
content: Text("Enter a meeting password to start."), | ||
)); | ||
} | ||
} | ||
} | ||
//Start Meeting With Random Meeting ID ----- Emila & Password For Zoom is required. | ||
startMeeting(BuildContext context) { | ||
bool _isMeetingEnded(String status) { | ||
var result = false; | ||
if (Platform.isAndroid) { | ||
result = status == "MEETING_STATUS_DISCONNECTING" || | ||
status == "MEETING_STATUS_FAILED"; | ||
} else { | ||
result = status == "MEETING_STATUS_IDLE"; | ||
} | ||
return result; | ||
} | ||
ZoomOptions zoomOptions = ZoomOptions( | ||
domain: "zoom.us", | ||
appKey: | ||
"XKE4uWfeLwWEmh78YMbC6mqKcF8oM4YHTr9I", //API KEY FROM ZOOM -- SDK KEY | ||
appSecret: | ||
"bT7N61pQzaLXU6VLj9TVl7eYuLbqAiB0KAdb", //API SECRET FROM ZOOM -- SDK SECRET | ||
); | ||
var meetingOptions = ZoomMeetingOptions( | ||
userId: '[email protected]', //pass host email for zoom | ||
userPassword: 'Dlinkmoderm0641', //pass host password for zoom | ||
disableDialIn: "false", | ||
disableDrive: "false", | ||
disableInvite: "false", | ||
disableShare: "false", | ||
disableTitlebar: "false", | ||
viewOptions: "true", | ||
noAudio: "false", | ||
noDisconnectAudio: "false"); | ||
var zoom = ZoomView(); | ||
zoom.initZoom(zoomOptions).then((results) { | ||
if (results[0] == 0) { | ||
zoom.onMeetingStatus().listen((status) { | ||
if (kDebugMode) { | ||
print("[Meeting Status Stream] : " + status[0] + " - " + status[1]); | ||
} | ||
if (_isMeetingEnded(status[0])) { | ||
if (kDebugMode) { | ||
print("[Meeting Status] :- Ended"); | ||
} | ||
timer.cancel(); | ||
} | ||
if (status[0] == "MEETING_STATUS_INMEETING") { | ||
zoom.meetinDetails().then((meetingDetailsResult) { | ||
if (kDebugMode) { | ||
print("[MeetingDetailsResult] :- " + | ||
meetingDetailsResult.toString()); | ||
} | ||
}); | ||
} | ||
}); | ||
zoom.startMeeting(meetingOptions).then((loginResult) { | ||
if (kDebugMode) { | ||
print( | ||
"[LoginResult] :- " + loginResult[0] + " - " + loginResult[1]); | ||
} | ||
if (loginResult[0] == "SDK ERROR") { | ||
//SDK INIT FAILED | ||
if (kDebugMode) { | ||
print((loginResult[1]).toString()); | ||
} | ||
return; | ||
} else if (loginResult[0] == "LOGIN ERROR") { | ||
//LOGIN FAILED - WITH ERROR CODES | ||
if (kDebugMode) { | ||
if (loginResult[1] == | ||
ZoomError.ZOOM_AUTH_ERROR_WRONG_ACCOUNTLOCKED) { | ||
print("Multiple Failed Login Attempts"); | ||
} | ||
print((loginResult[1]).toString()); | ||
} | ||
return; | ||
} else { | ||
//LOGIN SUCCESS & MEETING STARTED - WITH SUCCESS CODE 200 | ||
if (kDebugMode) { | ||
print((loginResult[0]).toString()); | ||
} | ||
} | ||
}).catchError((error) { | ||
if (kDebugMode) { | ||
print("[Error Generated] : " + error); | ||
} | ||
}); | ||
} | ||
}).catchError((error) { | ||
if (kDebugMode) { | ||
print("[Error Generated] : " + error); | ||
} | ||
}); | ||
} | ||
//Start Meeting With Custom Meeting ID ----- Emila & Password For Zoom is required. | ||
startMeetingNormal(BuildContext context) { | ||
bool _isMeetingEnded(String status) { | ||
var result = false; | ||
if (Platform.isAndroid) { | ||
result = status == "MEETING_STATUS_DISCONNECTING" || | ||
status == "MEETING_STATUS_FAILED"; | ||
} else { | ||
result = status == "MEETING_STATUS_IDLE"; | ||
} | ||
return result; | ||
} | ||
ZoomOptions zoomOptions = ZoomOptions( | ||
domain: "zoom.us", | ||
appKey: | ||
"XKE4uWfeLwWEmh78YMbC6mqKcF8oM4YHTr9I", //API KEY FROM ZOOM -- SDK KEY | ||
appSecret: | ||
"bT7N61pQzaLXU6VLj9TVl7eYuLbqAiB0KAdb", //API SECRET FROM ZOOM -- SDK SECRET | ||
); | ||
var meetingOptions = ZoomMeetingOptions( | ||
userId: '[email protected]', //pass host email for zoom | ||
userPassword: 'Dlinkmoderm0641', //pass host password for zoom | ||
meetingId: meetingIdController.text, // | ||
disableDialIn: "false", | ||
disableDrive: "false", | ||
disableInvite: "false", | ||
disableShare: "false", | ||
disableTitlebar: "false", | ||
viewOptions: "false", | ||
noAudio: "false", | ||
noDisconnectAudio: "false"); | ||
var zoom = ZoomView(); | ||
zoom.initZoom(zoomOptions).then((results) { | ||
if (results[0] == 0) { | ||
zoom.onMeetingStatus().listen((status) { | ||
if (kDebugMode) { | ||
print("[Meeting Status Stream] : " + status[0] + " - " + status[1]); | ||
} | ||
if (_isMeetingEnded(status[0])) { | ||
if (kDebugMode) { | ||
print("[Meeting Status] :- Ended"); | ||
} | ||
timer.cancel(); | ||
} | ||
if (status[0] == "MEETING_STATUS_INMEETING") { | ||
zoom.meetinDetails().then((meetingDetailsResult) { | ||
if (kDebugMode) { | ||
print("[MeetingDetailsResult] :- " + | ||
meetingDetailsResult.toString()); | ||
} | ||
}); | ||
} | ||
}); | ||
zoom.startMeetingNormal(meetingOptions).then((loginResult) { | ||
if (kDebugMode) { | ||
print("[LoginResult] :- " + loginResult.toString()); | ||
} | ||
if (loginResult[0] == "SDK ERROR") { | ||
//SDK INIT FAILED | ||
if (kDebugMode) { | ||
print((loginResult[1]).toString()); | ||
} | ||
} else if (loginResult[0] == "LOGIN ERROR") { | ||
//LOGIN FAILED - WITH ERROR CODES | ||
if (kDebugMode) { | ||
print((loginResult[1]).toString()); | ||
} | ||
} else { | ||
//LOGIN SUCCESS & MEETING STARTED - WITH SUCCESS CODE 200 | ||
if (kDebugMode) { | ||
print((loginResult[0]).toString()); | ||
} | ||
} | ||
}); | ||
} | ||
}).catchError((error) { | ||
if (kDebugMode) { | ||
print("[Error Generated] : " + error); | ||
} | ||
}); | ||
} | ||
} |
example/pubspec.lock
deleted
100644 → 0
example/pubspec.yaml
deleted
100755 → 0
example/web/favicon.png
deleted
100644 → 0
917 Bytes
example/web/icons/Icon-192.png
deleted
100644 → 0
5.17 KB
example/web/icons/Icon-512.png
deleted
100644 → 0
8.06 KB
5.46 KB
20.5 KB
example/web/index.html
deleted
100644 → 0
example/web/manifest.json
deleted
100644 → 0