diff --git a/lib/widgets/chat/channel_action.dart b/lib/widgets/chat/channel_action.dart index 460e752..d0846cc 100644 --- a/lib/widgets/chat/channel_action.dart +++ b/lib/widgets/chat/channel_action.dart @@ -5,6 +5,7 @@ import 'package:provider/provider.dart'; import 'package:solian/models/call.dart'; import 'package:solian/models/channel.dart'; import 'package:solian/providers/auth.dart'; +import 'package:solian/providers/chat.dart'; import 'package:solian/router.dart'; import 'package:solian/utils/service_url.dart'; import 'package:solian/widgets/exts.dart'; @@ -14,8 +15,7 @@ class ChannelCallAction extends StatefulWidget { final Channel channel; final Function onUpdate; - const ChannelCallAction( - {super.key, this.call, required this.channel, required this.onUpdate}); + const ChannelCallAction({super.key, this.call, required this.channel, required this.onUpdate}); @override State createState() => _ChannelCallActionState(); @@ -33,8 +33,7 @@ class _ChannelCallActionState extends State { return; } - var uri = getRequestUri( - 'messaging', '/api/channels/${widget.channel.alias}/calls'); + var uri = getRequestUri('messaging', '/api/channels/${widget.channel.alias}/calls'); var res = await auth.client!.post(uri); if (res.statusCode != 200) { @@ -48,19 +47,24 @@ class _ChannelCallActionState extends State { Future endsCall() async { setState(() => _isSubmitting = true); + final chat = context.read(); final auth = context.read(); if (!await auth.isAuthorized()) { setState(() => _isSubmitting = false); return; } - var uri = getRequestUri( - 'messaging', '/api/channels/${widget.channel.alias}/calls/ongoing'); + var uri = getRequestUri('messaging', '/api/channels/${widget.channel.alias}/calls/ongoing'); var res = await auth.client!.delete(uri); if (res.statusCode != 200) { var message = utf8.decode(res.bodyBytes); context.showErrorDialog(message); + } else { + if (chat.currentCall != null && chat.currentCall?.info.channelId == widget.channel.id) { + chat.currentCall!.deactivate(); + chat.currentCall!.dispose(); + } } setState(() => _isSubmitting = false); @@ -78,9 +82,7 @@ class _ChannelCallActionState extends State { endsCall(); } }, - icon: widget.call == null - ? const Icon(Icons.call) - : const Icon(Icons.call_end), + icon: widget.call == null ? const Icon(Icons.call) : const Icon(Icons.call_end), ); } } @@ -89,8 +91,7 @@ class ChannelManageAction extends StatelessWidget { final Channel channel; final Function onUpdate; - const ChannelManageAction( - {super.key, required this.channel, required this.onUpdate}); + const ChannelManageAction({super.key, required this.channel, required this.onUpdate}); @override Widget build(BuildContext context) {