import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:solian/exts.dart'; import 'package:solian/models/channel.dart'; import 'package:solian/providers/auth.dart'; class ChannelDeletionDialog extends StatefulWidget { final Channel channel; final String realm; final bool isOwned; const ChannelDeletionDialog({ super.key, required this.channel, required this.realm, required this.isOwned, }); @override State createState() => _ChannelDeletionDialogState(); } class _ChannelDeletionDialogState extends State { bool _isBusy = false; Future deleteChannel() async { final AuthProvider auth = Get.find(); if (auth.isAuthorized.isFalse) return; setState(() => _isBusy = true); final client = auth.configureClient('messaging'); final resp = await client .delete('/channels/${widget.realm}/${widget.channel.id}'); if (resp.statusCode != 200) { context.showErrorDialog(resp.bodyString); } else if (Navigator.canPop(context)) { Navigator.pop(context, 'OK'); } setState(() => _isBusy = false); } Future leaveChannel() async { final AuthProvider auth = Get.find(); if (auth.isAuthorized.isFalse) return; setState(() => _isBusy = true); final client = auth.configureClient('messaging'); final resp = await client.delete( '/channels/${widget.realm}/${widget.channel.alias}/members/me', ); if (resp.statusCode != 200) { context.showErrorDialog(resp.bodyString); } else if (Navigator.canPop(context)) { Navigator.pop(context, 'OK'); } setState(() => _isBusy = false); } @override Widget build(BuildContext context) { return AlertDialog( title: Text(widget.isOwned ? 'channelDeletionConfirm'.tr : 'channelLeaveConfirm'.tr), content: Text( widget.isOwned ? 'channelDeletionConfirmCaption' .trParams({'channel': '#${widget.channel.alias}'}) : 'channelLeaveConfirmCaption' .trParams({'channel': '#${widget.channel.alias}'}), ), actions: [ TextButton( onPressed: _isBusy ? null : () => Navigator.pop(context), child: Text('cancel'.tr), ), TextButton( onPressed: _isBusy ? null : widget.isOwned ? deleteChannel : leaveChannel, child: Text('confirm'.tr), ), ], ); } }