import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; import 'package:star_lock/tools/storage.dart'; import '../../start_chart_manage.dart'; class UdpTalkRequestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handle(ScpMessage scpMessage) { if (scpMessage.MessageType == MessageTypeConstant.Req) { print('收到对讲请求:${scpMessage}'); final TalkReq talkReq = scpMessage.Payload; // 回复成功消息 startChartManage.sendGenericRespSuccessMessage( ToPeerId: scpMessage.FromPeerId!, FromPeerId: scpMessage.ToPeerId!, PayloadType: scpMessage.PayloadType!, ); // 处理收到接听请求后的事件 _talkRequestEvent(); } else if (scpMessage.MessageType == MessageTypeConstant.Resp) { final GenericResp genericResp = scpMessage.Payload; if (genericResp.code == 0) { print('发送对讲成功'); } } } // 来电事件的处理 void _talkRequestEvent() { playRingtone(); _showTalkRequestNotification(); // 收到呼叫请求,跳转到接听页面 Get.toNamed( Routers.lockMonitoringPage, arguments: {'lockId': '111'}, ); } // 收到来电请求时进行本地通知 Future _showTalkRequestNotification() async { const AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails('1', 'flutter_channel', importance: Importance.max, priority: Priority.high, playSound: true, ticker: 'ticker'); const NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidPlatformChannelSpecifics); // 获取锁名 String? getLockName = await Storage.getString(saveLockAlias); final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // 执行本地通知 await flutterLocalNotificationsPlugin.show(0, '呼叫提醒'.tr, '${'收到来自'.tr}($getLockName)${'锁的呼叫'.tr}。', platformChannelSpecifics, payload: 'item x'); } }