fluffychat/lib/pages/user_bottom_sheet/user_bottom_sheet.dart

109 lines
3.5 KiB
Dart
Raw Normal View History

import 'package:flutter/material.dart';
2021-10-26 18:50:34 +02:00
import 'package:adaptive_dialog/adaptive_dialog.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
2021-10-26 18:50:34 +02:00
import 'package:matrix/matrix.dart';
2021-05-23 13:11:55 +02:00
import 'package:vrouter/vrouter.dart';
2021-11-09 21:32:16 +01:00
import 'package:fluffychat/widgets/permission_slider_dialog.dart';
import '../../widgets/matrix.dart';
import 'user_bottom_sheet_view.dart';
class UserBottomSheet extends StatefulWidget {
final User user;
final Function onMention;
2021-05-01 10:04:44 +02:00
final BuildContext outerContext;
const UserBottomSheet({
Key key,
@required this.user,
2021-05-01 10:04:44 +02:00
@required this.outerContext,
this.onMention,
}) : super(key: key);
@override
UserBottomSheetController createState() => UserBottomSheetController();
}
class UserBottomSheetController extends State<UserBottomSheet> {
void participantAction(String action) async {
2021-10-14 18:09:30 +02:00
// ignore: prefer_function_declarations_over_variables
final Function _askConfirmation =
() async => (await showOkCancelAlertDialog(
2021-05-23 15:02:36 +02:00
useRootNavigator: false,
context: context,
title: L10n.of(context).areYouSure,
okLabel: L10n.of(context).yes,
cancelLabel: L10n.of(context).no,
) ==
OkCancelResult.ok);
switch (action) {
case 'mention':
Navigator.of(context, rootNavigator: false).pop();
widget.onMention();
break;
case 'ban':
if (await _askConfirmation()) {
await showFutureLoadingDialog(
context: context,
future: () => widget.user.ban(),
);
Navigator.of(context, rootNavigator: false).pop();
}
break;
case 'unban':
if (await _askConfirmation()) {
await showFutureLoadingDialog(
context: context,
future: () => widget.user.unban(),
);
Navigator.of(context, rootNavigator: false).pop();
}
break;
case 'kick':
if (await _askConfirmation()) {
await showFutureLoadingDialog(
context: context,
future: () => widget.user.kick(),
);
Navigator.of(context, rootNavigator: false).pop();
}
break;
case 'permission':
final newPermission = await PermissionSliderDialog(
initialPermission: widget.user.powerLevel)
.show(context);
if (newPermission != null) {
if (newPermission == 100 && await _askConfirmation() == false) break;
await showFutureLoadingDialog(
context: context,
future: () => widget.user.setPower(newPermission),
);
Navigator.of(context, rootNavigator: false).pop();
}
break;
case 'message':
final roomIdResult = await showFutureLoadingDialog(
context: context,
2021-11-13 11:54:23 +01:00
future: () => widget.user.startDirectChat(),
);
if (roomIdResult.error != null) return;
VRouter.of(widget.outerContext)
.toSegments(['rooms', roomIdResult.result]);
Navigator.of(context, rootNavigator: false).pop();
break;
2021-10-16 05:28:45 +02:00
case 'ignore':
if (await _askConfirmation()) {
await showFutureLoadingDialog(
context: context,
future: () =>
Matrix.of(context).client.ignoreUser(widget.user.id));
}
}
}
@override
2021-05-22 09:13:47 +02:00
Widget build(BuildContext context) => UserBottomSheetView(this);
}