call_api.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'dart:async';
  2. import 'package:cloud_firestore/cloud_firestore.dart';
  3. import 'package:dio/dio.dart';
  4. import 'package:flutter/cupertino.dart';
  5. import '../../shared/constats.dart';
  6. import '../../shared/dio_helper.dart';
  7. import '../../shared/network/cache_helper.dart';
  8. import '../models/call_model.dart';
  9. class CallApi {
  10. StreamSubscription<QuerySnapshot<Map<String, dynamic>>>
  11. listenToInComingCall() {
  12. return FirebaseFirestore.instance
  13. .collection(callsCollection)
  14. .where('receiverId', isEqualTo: CacheHelper.getString(key: 'uId'))
  15. .snapshots()
  16. .listen((event) {});
  17. }
  18. StreamSubscription<DocumentSnapshot<Map<String, dynamic>>>
  19. listenToCallStatus({required String callId}) {
  20. return FirebaseFirestore.instance
  21. .collection(callsCollection)
  22. .doc(callId)
  23. .snapshots()
  24. .listen((event) {});
  25. }
  26. Future<void> postCallToFirestore({required CallModel callModel}) {
  27. return FirebaseFirestore.instance
  28. .collection(callsCollection)
  29. .doc(callModel.id)
  30. .set(callModel.toMap());
  31. }
  32. Future<void> updateUserBusyStatusFirestore({required CallModel callModel,required bool busy}) {
  33. Map<String, dynamic> busyMap = {'busy': busy};
  34. return FirebaseFirestore.instance
  35. .collection(userCollection)
  36. .doc(callModel.callerId)
  37. .update(busyMap)
  38. .then((value) {
  39. FirebaseFirestore.instance
  40. .collection(userCollection)
  41. .doc(callModel.receiverId)
  42. .update(busyMap);
  43. });
  44. }
  45. //Sender
  46. Future<dynamic> generateCallToken(
  47. {required Map<String, dynamic> queryMap}) async {
  48. try {
  49. var response = await DioHelper.getData(
  50. endPoint: fireCallEndpoint,
  51. query: queryMap,
  52. baseUrl: cloudFunctionBaseUrl);
  53. debugPrint('fireVideoCallResp: ${response.data}');
  54. if (response.statusCode == 200) {
  55. return response.data;
  56. } else {
  57. throw Exception(
  58. 'Error: ${response.data} Status Code: ${response.statusCode}');
  59. }
  60. } on DioError catch (error) {
  61. debugPrint("fireVideoCallError: ${error.toString()}");
  62. }
  63. }
  64. Future<void> updateCallStatus({required String callId,required String status}){
  65. return FirebaseFirestore.instance
  66. .collection(callsCollection)
  67. .doc(callId)
  68. .update({'status': status});
  69. }
  70. Future<void> endCurrentCall({required String callId}){
  71. return FirebaseFirestore.instance
  72. .collection(callsCollection)
  73. .doc(callId)
  74. .update({'current': false});
  75. }
  76. }