mirror of
				https://gitlab.com/famedly/fluffychat.git
				synced 2025-11-04 06:17:26 +01:00 
			
		
		
		
	Use SimpleDialogs
This commit is contained in:
		
							parent
							
								
									76ebe310a0
								
							
						
					
					
						commit
						02d2e062db
					
				@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_sound/flutter_sound.dart';
 | 
			
		||||
import 'package:intl/intl.dart';
 | 
			
		||||
 | 
			
		||||
import 'matrix.dart';
 | 
			
		||||
import 'dialogs/simple_dialogs.dart';
 | 
			
		||||
 | 
			
		||||
class AudioPlayer extends StatefulWidget {
 | 
			
		||||
  final Color color;
 | 
			
		||||
@ -48,7 +48,7 @@ class _AudioPlayerState extends State<AudioPlayer> {
 | 
			
		||||
  _downloadAction() async {
 | 
			
		||||
    if (status != AudioPlayerStatus.NOT_DOWNLOADED) return;
 | 
			
		||||
    setState(() => status = AudioPlayerStatus.DOWNLOADING);
 | 
			
		||||
    final matrixFile = await Matrix.of(context)
 | 
			
		||||
    final matrixFile = await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithErrorToast(widget.event.downloadAndDecryptAttachment());
 | 
			
		||||
    setState(() {
 | 
			
		||||
      audioFile = matrixFile.bytes;
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@ class _ChatSettingsPopupMenuState extends State<ChatSettingsPopupMenu> {
 | 
			
		||||
  void startCallAction(BuildContext context) async {
 | 
			
		||||
    final url =
 | 
			
		||||
        '${Matrix.of(context).jitsiInstance}${Uri.encodeComponent(widget.room.id.localpart)}';
 | 
			
		||||
    final success = await Matrix.of(context)
 | 
			
		||||
    final success = await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithLoadingDialog(widget.room.sendEvent({
 | 
			
		||||
      'msgtype': Matrix.callNamespace,
 | 
			
		||||
      'body': url,
 | 
			
		||||
@ -86,7 +86,7 @@ class _ChatSettingsPopupMenuState extends State<ChatSettingsPopupMenu> {
 | 
			
		||||
          case "leave":
 | 
			
		||||
            bool confirmed = await SimpleDialogs(context).askConfirmation();
 | 
			
		||||
            if (confirmed) {
 | 
			
		||||
              final success = await Matrix.of(context)
 | 
			
		||||
              final success = await SimpleDialogs(context)
 | 
			
		||||
                  .tryRequestWithLoadingDialog(widget.room.leave());
 | 
			
		||||
              if (success != false) {
 | 
			
		||||
                await Navigator.of(context).pushAndRemoveUntil(
 | 
			
		||||
@ -96,11 +96,11 @@ class _ChatSettingsPopupMenuState extends State<ChatSettingsPopupMenu> {
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          case "mute":
 | 
			
		||||
            await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
            await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                widget.room.setPushRuleState(PushRuleState.mentions_only));
 | 
			
		||||
            break;
 | 
			
		||||
          case "unmute":
 | 
			
		||||
            await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
            await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                widget.room.setPushRuleState(PushRuleState.notify));
 | 
			
		||||
            break;
 | 
			
		||||
          case "call":
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,7 @@
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
 | 
			
		||||
 | 
			
		||||
class SimpleDialogs {
 | 
			
		||||
  final BuildContext context;
 | 
			
		||||
@ -22,7 +24,7 @@ class SimpleDialogs {
 | 
			
		||||
    await showDialog(
 | 
			
		||||
      context: context,
 | 
			
		||||
      builder: (c) => AlertDialog(
 | 
			
		||||
        title: Text(titleText ?? I18n.of(context).enterAUsername),
 | 
			
		||||
        title: Text(titleText ?? 'Please enter a text'),
 | 
			
		||||
        content: TextField(
 | 
			
		||||
          controller: controller,
 | 
			
		||||
          autofocus: true,
 | 
			
		||||
@ -104,4 +106,46 @@ class SimpleDialogs {
 | 
			
		||||
    );
 | 
			
		||||
    return confirmed;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<dynamic> tryRequestWithLoadingDialog(Future<dynamic> request,
 | 
			
		||||
      {Function(MatrixException) onAdditionalAuth}) async {
 | 
			
		||||
    showLoadingDialog(context);
 | 
			
		||||
    final dynamic = await tryRequestWithErrorToast(request,
 | 
			
		||||
        onAdditionalAuth: onAdditionalAuth);
 | 
			
		||||
    Navigator.of(context)?.pop();
 | 
			
		||||
    return dynamic;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<dynamic> tryRequestWithErrorToast(Future<dynamic> request,
 | 
			
		||||
      {Function(MatrixException) onAdditionalAuth}) async {
 | 
			
		||||
    try {
 | 
			
		||||
      return await request;
 | 
			
		||||
    } on MatrixException catch (exception) {
 | 
			
		||||
      if (exception.requireAdditionalAuthentication &&
 | 
			
		||||
          onAdditionalAuth != null) {
 | 
			
		||||
        return await tryRequestWithErrorToast(onAdditionalAuth(exception));
 | 
			
		||||
      } else {
 | 
			
		||||
        showToast(exception.errorMessage);
 | 
			
		||||
      }
 | 
			
		||||
    } catch (exception) {
 | 
			
		||||
      showToast(exception.toString());
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  showLoadingDialog(BuildContext context) {
 | 
			
		||||
    showDialog(
 | 
			
		||||
      context: context,
 | 
			
		||||
      barrierDismissible: false,
 | 
			
		||||
      builder: (BuildContext context) => AlertDialog(
 | 
			
		||||
        content: Row(
 | 
			
		||||
          children: <Widget>[
 | 
			
		||||
            CircularProgressIndicator(),
 | 
			
		||||
            SizedBox(width: 16),
 | 
			
		||||
            Text(I18n.of(context).loadingPleaseWait),
 | 
			
		||||
          ],
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ class _EncryptionButtonState extends State<EncryptionButton> {
 | 
			
		||||
          confirmText: I18n.of(context).yes,
 | 
			
		||||
        ) ==
 | 
			
		||||
        true) {
 | 
			
		||||
      await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
        widget.room.enableEncryption(),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,8 @@ class ChatListItem extends StatelessWidget {
 | 
			
		||||
  void clickAction(BuildContext context) async {
 | 
			
		||||
    if (!activeChat) {
 | 
			
		||||
      if (room.membership == Membership.invite &&
 | 
			
		||||
          await Matrix.of(context).tryRequestWithLoadingDialog(room.join()) ==
 | 
			
		||||
          await SimpleDialogs(context)
 | 
			
		||||
                  .tryRequestWithLoadingDialog(room.join()) ==
 | 
			
		||||
              false) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
@ -60,7 +61,7 @@ class ChatListItem extends StatelessWidget {
 | 
			
		||||
                child: Text(I18n.of(context).rejoin.toUpperCase(),
 | 
			
		||||
                    style: TextStyle(color: Colors.blue)),
 | 
			
		||||
                onPressed: () async {
 | 
			
		||||
                  await Matrix.of(context)
 | 
			
		||||
                  await SimpleDialogs(context)
 | 
			
		||||
                      .tryRequestWithLoadingDialog(room.join());
 | 
			
		||||
                  await Navigator.of(context).pop();
 | 
			
		||||
                },
 | 
			
		||||
@ -74,7 +75,7 @@ class ChatListItem extends StatelessWidget {
 | 
			
		||||
        if (Matrix.of(context).shareContent != null) {
 | 
			
		||||
          if (Matrix.of(context).shareContent["msgtype"] ==
 | 
			
		||||
              "chat.fluffy.shared_file") {
 | 
			
		||||
            await Matrix.of(context).tryRequestWithErrorToast(
 | 
			
		||||
            await SimpleDialogs(context).tryRequestWithErrorToast(
 | 
			
		||||
              room.sendFileEvent(
 | 
			
		||||
                Matrix.of(context).shareContent["file"],
 | 
			
		||||
              ),
 | 
			
		||||
@ -96,8 +97,8 @@ class ChatListItem extends StatelessWidget {
 | 
			
		||||
  Future<bool> archiveAction(BuildContext context) async {
 | 
			
		||||
    {
 | 
			
		||||
      if ([Membership.leave, Membership.ban].contains(room.membership)) {
 | 
			
		||||
        final success =
 | 
			
		||||
            await Matrix.of(context).tryRequestWithLoadingDialog(room.forget());
 | 
			
		||||
        final success = await SimpleDialogs(context)
 | 
			
		||||
            .tryRequestWithLoadingDialog(room.forget());
 | 
			
		||||
        if (success != false) {
 | 
			
		||||
          if (this.onForget != null) this.onForget();
 | 
			
		||||
        }
 | 
			
		||||
@ -107,8 +108,8 @@ class ChatListItem extends StatelessWidget {
 | 
			
		||||
      if (!confirmed) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      final success =
 | 
			
		||||
          await Matrix.of(context).tryRequestWithLoadingDialog(room.leave());
 | 
			
		||||
      final success = await SimpleDialogs(context)
 | 
			
		||||
          .tryRequestWithLoadingDialog(room.leave());
 | 
			
		||||
      if (success == false) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
import 'package:bubble/bubble.dart';
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:fluffychat/components/message_content.dart';
 | 
			
		||||
import 'package:fluffychat/components/reply_content.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
@ -116,7 +117,7 @@ class Message extends StatelessWidget {
 | 
			
		||||
                        I18n.of(context).requestPermission,
 | 
			
		||||
                        style: TextStyle(color: textColor),
 | 
			
		||||
                      ),
 | 
			
		||||
                      onPressed: () => Matrix.of(context)
 | 
			
		||||
                      onPressed: () => SimpleDialogs(context)
 | 
			
		||||
                          .tryRequestWithLoadingDialog(event.requestKey()),
 | 
			
		||||
                    ),
 | 
			
		||||
                  SizedBox(height: 4),
 | 
			
		||||
 | 
			
		||||
@ -14,36 +14,39 @@ class ParticipantListItem extends StatelessWidget {
 | 
			
		||||
  const ParticipantListItem(this.user);
 | 
			
		||||
 | 
			
		||||
  participantAction(BuildContext context, String action) async {
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    switch (action) {
 | 
			
		||||
      case "ban":
 | 
			
		||||
        if (await SimpleDialogs(context).askConfirmation()) {
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.ban());
 | 
			
		||||
          await SimpleDialogs(context).tryRequestWithLoadingDialog(user.ban());
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case "unban":
 | 
			
		||||
        if (await SimpleDialogs(context).askConfirmation()) {
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.unban());
 | 
			
		||||
          await SimpleDialogs(context)
 | 
			
		||||
              .tryRequestWithLoadingDialog(user.unban());
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case "kick":
 | 
			
		||||
        if (await SimpleDialogs(context).askConfirmation()) {
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.kick());
 | 
			
		||||
          await SimpleDialogs(context).tryRequestWithLoadingDialog(user.kick());
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case "admin":
 | 
			
		||||
        if (await SimpleDialogs(context).askConfirmation()) {
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.setPower(100));
 | 
			
		||||
          await SimpleDialogs(context)
 | 
			
		||||
              .tryRequestWithLoadingDialog(user.setPower(100));
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case "moderator":
 | 
			
		||||
        if (await SimpleDialogs(context).askConfirmation()) {
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.setPower(50));
 | 
			
		||||
          await SimpleDialogs(context)
 | 
			
		||||
              .tryRequestWithLoadingDialog(user.setPower(50));
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case "user":
 | 
			
		||||
        if (await SimpleDialogs(context).askConfirmation()) {
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.setPower(0));
 | 
			
		||||
          await SimpleDialogs(context)
 | 
			
		||||
              .tryRequestWithLoadingDialog(user.setPower(0));
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      case "message":
 | 
			
		||||
 | 
			
		||||
@ -74,7 +74,7 @@ class PresenceListItem extends StatelessWidget {
 | 
			
		||||
              width: 80,
 | 
			
		||||
              child: Column(
 | 
			
		||||
                children: <Widget>[
 | 
			
		||||
                  SizedBox(height: 6),
 | 
			
		||||
                  SizedBox(height: 9),
 | 
			
		||||
                  Avatar(avatarUrl, displayname),
 | 
			
		||||
                  Padding(
 | 
			
		||||
                    padding: const EdgeInsets.all(6.0),
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,11 @@
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
import '../../i18n/i18n.dart';
 | 
			
		||||
import '../../utils/app_route.dart';
 | 
			
		||||
import '../../views/chat.dart';
 | 
			
		||||
import '../avatar.dart';
 | 
			
		||||
import '../matrix.dart';
 | 
			
		||||
 | 
			
		||||
class PublicRoomListItem extends StatelessWidget {
 | 
			
		||||
  final PublicRoomEntry publicRoomEntry;
 | 
			
		||||
@ -13,7 +13,7 @@ class PublicRoomListItem extends StatelessWidget {
 | 
			
		||||
  const PublicRoomListItem(this.publicRoomEntry, {Key key}) : super(key: key);
 | 
			
		||||
 | 
			
		||||
  void joinAction(BuildContext context) async {
 | 
			
		||||
    final success = await Matrix.of(context)
 | 
			
		||||
    final success = await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithLoadingDialog(publicRoomEntry.join());
 | 
			
		||||
    if (success != false) {
 | 
			
		||||
      await Navigator.of(context).push(
 | 
			
		||||
 | 
			
		||||
@ -77,53 +77,6 @@ class MatrixState extends State<Matrix> {
 | 
			
		||||
    await storage.deleteItem(widget.clientName);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  BuildContext _loadingDialogContext;
 | 
			
		||||
 | 
			
		||||
  Future<dynamic> tryRequestWithLoadingDialog(Future<dynamic> request,
 | 
			
		||||
      {Function(MatrixException) onAdditionalAuth}) async {
 | 
			
		||||
    showLoadingDialog(context);
 | 
			
		||||
    final dynamic = await tryRequestWithErrorToast(request,
 | 
			
		||||
        onAdditionalAuth: onAdditionalAuth);
 | 
			
		||||
    hideLoadingDialog();
 | 
			
		||||
    return dynamic;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<dynamic> tryRequestWithErrorToast(Future<dynamic> request,
 | 
			
		||||
      {Function(MatrixException) onAdditionalAuth}) async {
 | 
			
		||||
    try {
 | 
			
		||||
      return await request;
 | 
			
		||||
    } on MatrixException catch (exception) {
 | 
			
		||||
      if (exception.requireAdditionalAuthentication &&
 | 
			
		||||
          onAdditionalAuth != null) {
 | 
			
		||||
        return await tryRequestWithErrorToast(onAdditionalAuth(exception));
 | 
			
		||||
      } else {
 | 
			
		||||
        showToast(exception.errorMessage);
 | 
			
		||||
      }
 | 
			
		||||
    } catch (exception) {
 | 
			
		||||
      showToast(exception.toString());
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  showLoadingDialog(BuildContext context) {
 | 
			
		||||
    _loadingDialogContext = context;
 | 
			
		||||
    showDialog(
 | 
			
		||||
      context: _loadingDialogContext,
 | 
			
		||||
      barrierDismissible: false,
 | 
			
		||||
      builder: (BuildContext context) => AlertDialog(
 | 
			
		||||
        content: Row(
 | 
			
		||||
          children: <Widget>[
 | 
			
		||||
            CircularProgressIndicator(),
 | 
			
		||||
            SizedBox(width: 16),
 | 
			
		||||
            Text(I18n.of(context).loadingPleaseWait),
 | 
			
		||||
          ],
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  hideLoadingDialog() => Navigator.of(_loadingDialogContext)?.pop();
 | 
			
		||||
 | 
			
		||||
  Future<String> downloadAndSaveContent(MxContent content,
 | 
			
		||||
      {int width, int height, ThumbnailMethod method}) async {
 | 
			
		||||
    final bool thumbnail = width == null && height == null ? false : true;
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ import 'package:link_text/link_text.dart';
 | 
			
		||||
import 'package:url_launcher/url_launcher.dart';
 | 
			
		||||
import 'package:fluffychat/utils/matrix_file_extension.dart';
 | 
			
		||||
 | 
			
		||||
import 'dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'matrix.dart';
 | 
			
		||||
 | 
			
		||||
class MessageContent extends StatelessWidget {
 | 
			
		||||
@ -60,8 +61,9 @@ class MessageContent extends StatelessWidget {
 | 
			
		||||
                          );
 | 
			
		||||
                          return;
 | 
			
		||||
                        }
 | 
			
		||||
                        final MatrixFile matrixFile = await Matrix.of(context)
 | 
			
		||||
                            .tryRequestWithLoadingDialog(
 | 
			
		||||
                        final MatrixFile matrixFile =
 | 
			
		||||
                            await SimpleDialogs(context)
 | 
			
		||||
                                .tryRequestWithLoadingDialog(
 | 
			
		||||
                          event.downloadAndDecryptAttachment(),
 | 
			
		||||
                        );
 | 
			
		||||
                        matrixFile.open();
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
import 'package:fluffychat/views/chat.dart';
 | 
			
		||||
@ -21,7 +22,7 @@ class UrlLauncher {
 | 
			
		||||
    final matrix = Matrix.of(context);
 | 
			
		||||
    final String identifier = url.replaceAll("https://matrix.to/#/", "");
 | 
			
		||||
    if (identifier.substring(0, 1) == "#") {
 | 
			
		||||
      final response = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
      final response = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
        matrix.client.joinRoomById(
 | 
			
		||||
          Uri.encodeComponent(identifier),
 | 
			
		||||
        ),
 | 
			
		||||
@ -37,8 +38,8 @@ class UrlLauncher {
 | 
			
		||||
        identifier,
 | 
			
		||||
        room: Room(id: "", client: matrix.client),
 | 
			
		||||
      );
 | 
			
		||||
      final String roomID =
 | 
			
		||||
          await matrix.tryRequestWithLoadingDialog(user.startDirectChat());
 | 
			
		||||
      final String roomID = await SimpleDialogs(context)
 | 
			
		||||
          .tryRequestWithLoadingDialog(user.startDirectChat());
 | 
			
		||||
      Navigator.of(context).pop();
 | 
			
		||||
 | 
			
		||||
      if (roomID != null) {
 | 
			
		||||
 | 
			
		||||
@ -182,7 +182,7 @@ class _ChatState extends State<_Chat> {
 | 
			
		||||
    }
 | 
			
		||||
    File file = await FilePicker.getFile();
 | 
			
		||||
    if (file == null) return;
 | 
			
		||||
    await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      room.sendFileEvent(
 | 
			
		||||
        MatrixFile(bytes: await file.readAsBytes(), path: file.path),
 | 
			
		||||
      ),
 | 
			
		||||
@ -200,7 +200,7 @@ class _ChatState extends State<_Chat> {
 | 
			
		||||
        maxWidth: 1600,
 | 
			
		||||
        maxHeight: 1600);
 | 
			
		||||
    if (file == null) return;
 | 
			
		||||
    await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      room.sendImageEvent(
 | 
			
		||||
        MatrixFile(bytes: await file.readAsBytes(), path: file.path),
 | 
			
		||||
      ),
 | 
			
		||||
@ -218,7 +218,7 @@ class _ChatState extends State<_Chat> {
 | 
			
		||||
        maxWidth: 1600,
 | 
			
		||||
        maxHeight: 1600);
 | 
			
		||||
    if (file == null) return;
 | 
			
		||||
    await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      room.sendImageEvent(
 | 
			
		||||
        MatrixFile(bytes: await file.readAsBytes(), path: file.path),
 | 
			
		||||
      ),
 | 
			
		||||
@ -234,7 +234,7 @@ class _ChatState extends State<_Chat> {
 | 
			
		||||
            ));
 | 
			
		||||
    if (result == null) return;
 | 
			
		||||
    final File audioFile = File(result);
 | 
			
		||||
    await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
    await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      room.sendAudioEvent(
 | 
			
		||||
        MatrixFile(bytes: audioFile.readAsBytesSync(), path: audioFile.path),
 | 
			
		||||
      ),
 | 
			
		||||
@ -265,7 +265,7 @@ class _ChatState extends State<_Chat> {
 | 
			
		||||
    );
 | 
			
		||||
    if (!confirmed) return;
 | 
			
		||||
    for (Event event in selectedEvents) {
 | 
			
		||||
      await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
          event.status > 0 ? event.redact() : event.remove());
 | 
			
		||||
    }
 | 
			
		||||
    setState(() => selectedEvents.clear());
 | 
			
		||||
@ -322,7 +322,7 @@ class _ChatState extends State<_Chat> {
 | 
			
		||||
    matrix.activeRoomId = widget.id;
 | 
			
		||||
 | 
			
		||||
    if (room.membership == Membership.invite) {
 | 
			
		||||
      matrix.tryRequestWithLoadingDialog(room.join());
 | 
			
		||||
      SimpleDialogs(context).tryRequestWithLoadingDialog(room.join());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    String typingText = "";
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,6 @@ import 'package:fluffychat/components/chat_settings_popup_menu.dart';
 | 
			
		||||
import 'package:fluffychat/components/content_banner.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:fluffychat/components/list_items/participant_list_item.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
import 'package:fluffychat/utils/room_extension.dart';
 | 
			
		||||
@ -39,8 +38,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
      hintText: widget.room.getLocalizedDisplayname(context),
 | 
			
		||||
    );
 | 
			
		||||
    if (displayname == null) return;
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final success = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      widget.room.setName(displayname),
 | 
			
		||||
    );
 | 
			
		||||
    if (success != false) {
 | 
			
		||||
@ -65,14 +63,15 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
    if (aliases.indexWhere((s) => s == canonicalAlias) == -1) {
 | 
			
		||||
      List<String> newAliases = List.from(aliases);
 | 
			
		||||
      newAliases.add(canonicalAlias);
 | 
			
		||||
      final response = await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      final response = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
        widget.room.client.jsonRequest(
 | 
			
		||||
          type: HTTPType.GET,
 | 
			
		||||
          action: "/client/r0/directory/room/$canonicalAlias",
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
      if (response == false) {
 | 
			
		||||
        final success = await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
        final success =
 | 
			
		||||
            await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
          widget.room.client.jsonRequest(
 | 
			
		||||
              type: HTTPType.PUT,
 | 
			
		||||
              action: "/client/r0/directory/room/$canonicalAlias",
 | 
			
		||||
@ -81,7 +80,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
        if (success == false) return;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
    await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      widget.room.client.jsonRequest(
 | 
			
		||||
          type: HTTPType.PUT,
 | 
			
		||||
          action:
 | 
			
		||||
@ -100,8 +99,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
      multiLine: true,
 | 
			
		||||
    );
 | 
			
		||||
    if (displayname == null) return;
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final success = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      widget.room.setDescription(displayname),
 | 
			
		||||
    );
 | 
			
		||||
    if (success != false) {
 | 
			
		||||
@ -116,8 +114,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
        maxWidth: 1600,
 | 
			
		||||
        maxHeight: 1600);
 | 
			
		||||
    if (tempFile == null) return;
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final success = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      widget.room.setAvatar(
 | 
			
		||||
        MatrixFile(
 | 
			
		||||
          bytes: await tempFile.readAsBytes(),
 | 
			
		||||
@ -131,7 +128,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void requestMoreMembersAction(BuildContext context) async {
 | 
			
		||||
    final List<User> participants = await Matrix.of(context)
 | 
			
		||||
    final List<User> participants = await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithLoadingDialog(widget.room.requestParticipants());
 | 
			
		||||
    if (participants != null) setState(() => members = participants);
 | 
			
		||||
  }
 | 
			
		||||
@ -288,7 +285,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                        onSelected: (JoinRules joinRule) =>
 | 
			
		||||
                            Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                            SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                          widget.room.setJoinRules(joinRule),
 | 
			
		||||
                        ),
 | 
			
		||||
                        itemBuilder: (BuildContext context) =>
 | 
			
		||||
@ -323,7 +320,7 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
                          ),
 | 
			
		||||
                        ),
 | 
			
		||||
                        onSelected: (HistoryVisibility historyVisibility) =>
 | 
			
		||||
                            Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                            SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                          widget.room.setHistoryVisibility(historyVisibility),
 | 
			
		||||
                        ),
 | 
			
		||||
                        itemBuilder: (BuildContext context) =>
 | 
			
		||||
@ -371,7 +368,8 @@ class _ChatDetailsState extends State<ChatDetails> {
 | 
			
		||||
                            ),
 | 
			
		||||
                          ),
 | 
			
		||||
                          onSelected: (GuestAccess guestAccess) =>
 | 
			
		||||
                              Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
                              SimpleDialogs(context)
 | 
			
		||||
                                  .tryRequestWithLoadingDialog(
 | 
			
		||||
                            widget.room.setGuestAccess(guestAccess),
 | 
			
		||||
                          ),
 | 
			
		||||
                          itemBuilder: (BuildContext context) =>
 | 
			
		||||
 | 
			
		||||
@ -84,7 +84,7 @@ class _ChatListState extends State<ChatList> {
 | 
			
		||||
      coolDown = Timer(Duration(seconds: 1), () async {
 | 
			
		||||
        setState(() => loadingPublicRooms = true);
 | 
			
		||||
        final newPublicRoomsResponse =
 | 
			
		||||
            await Matrix.of(context).tryRequestWithErrorToast(
 | 
			
		||||
            await SimpleDialogs(context).tryRequestWithErrorToast(
 | 
			
		||||
          Matrix.of(context).client.requestPublicRooms(
 | 
			
		||||
                limit: 30,
 | 
			
		||||
                includeAllNetworks: true,
 | 
			
		||||
@ -190,7 +190,7 @@ class _ChatListState extends State<ChatList> {
 | 
			
		||||
      hintText: I18n.of(context).statusExampleMessage,
 | 
			
		||||
    );
 | 
			
		||||
    if (status?.isEmpty ?? true) return;
 | 
			
		||||
    await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
    await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      Matrix.of(context).client.jsonRequest(
 | 
			
		||||
        type: HTTPType.PUT,
 | 
			
		||||
        action:
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ class HomeserverPicker extends StatelessWidget {
 | 
			
		||||
    if (!homeserver.startsWith('https://')) {
 | 
			
		||||
      homeserver = 'https://$homeserver';
 | 
			
		||||
    }
 | 
			
		||||
    final success = await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
        Matrix.of(context).client.checkServer(homeserver));
 | 
			
		||||
    if (success != false) {
 | 
			
		||||
      await Navigator.of(context).push(AppRoute(SignUp()));
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ import 'dart:async';
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/adaptive_page_layout.dart';
 | 
			
		||||
import 'package:fluffychat/components/avatar.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@ -53,7 +54,7 @@ class _InvitationSelectionState extends State<InvitationSelection> {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void inviteAction(BuildContext context, String id) async {
 | 
			
		||||
    final success = await Matrix.of(context).tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      widget.room.invite(id),
 | 
			
		||||
    );
 | 
			
		||||
    if (success != false) {
 | 
			
		||||
@ -81,7 +82,7 @@ class _InvitationSelectionState extends State<InvitationSelection> {
 | 
			
		||||
    if (loading) return;
 | 
			
		||||
    setState(() => loading = true);
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final response = await matrix.tryRequestWithErrorToast(
 | 
			
		||||
    final response = await SimpleDialogs(context).tryRequestWithErrorToast(
 | 
			
		||||
      matrix.client.jsonRequest(
 | 
			
		||||
          type: HTTPType.POST,
 | 
			
		||||
          action: "/client/r0/user_directory/search",
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
import 'package:fluffychat/components/adaptive_page_layout.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
@ -42,7 +43,8 @@ class _NewGroupState extends State<_NewGroup> {
 | 
			
		||||
      params["preset"] = "private_chat";
 | 
			
		||||
    }
 | 
			
		||||
    if (controller.text.isNotEmpty) params["name"] = controller.text;
 | 
			
		||||
    final String roomID = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    final String roomID =
 | 
			
		||||
        await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      matrix.client.createRoom(params: params),
 | 
			
		||||
    );
 | 
			
		||||
    Navigator.of(context).pop();
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ import 'dart:async';
 | 
			
		||||
import 'package:famedlysdk/famedlysdk.dart';
 | 
			
		||||
import 'package:fluffychat/components/adaptive_page_layout.dart';
 | 
			
		||||
import 'package:fluffychat/components/avatar.dart';
 | 
			
		||||
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
 | 
			
		||||
import 'package:fluffychat/components/matrix.dart';
 | 
			
		||||
import 'package:fluffychat/i18n/i18n.dart';
 | 
			
		||||
import 'package:fluffychat/utils/app_route.dart';
 | 
			
		||||
@ -54,8 +55,8 @@ class _NewPrivateChatState extends State<_NewPrivateChat> {
 | 
			
		||||
      "@" + controller.text.trim(),
 | 
			
		||||
      room: Room(id: "", client: matrix.client),
 | 
			
		||||
    );
 | 
			
		||||
    final String roomID =
 | 
			
		||||
        await matrix.tryRequestWithLoadingDialog(user.startDirectChat());
 | 
			
		||||
    final String roomID = await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithLoadingDialog(user.startDirectChat());
 | 
			
		||||
    Navigator.of(context).pop();
 | 
			
		||||
 | 
			
		||||
    if (roomID != null) {
 | 
			
		||||
@ -87,7 +88,7 @@ class _NewPrivateChatState extends State<_NewPrivateChat> {
 | 
			
		||||
    if (loading) return;
 | 
			
		||||
    setState(() => loading = true);
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final response = await matrix.tryRequestWithErrorToast(
 | 
			
		||||
    final response = await SimpleDialogs(context).tryRequestWithErrorToast(
 | 
			
		||||
      matrix.client.jsonRequest(
 | 
			
		||||
          type: HTTPType.POST,
 | 
			
		||||
          action: "/client/r0/user_directory/search",
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,8 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    await matrix.tryRequestWithLoadingDialog(matrix.client.logout());
 | 
			
		||||
    await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithLoadingDialog(matrix.client.logout());
 | 
			
		||||
    matrix.clean();
 | 
			
		||||
    await Navigator.of(context).pushAndRemoveUntil(
 | 
			
		||||
        AppRoute.defaultRoute(context, HomeserverPicker()), (r) => false);
 | 
			
		||||
@ -73,7 +74,7 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
    );
 | 
			
		||||
    if (displayname == null) return;
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final success = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      matrix.client.setDisplayname(displayname),
 | 
			
		||||
    );
 | 
			
		||||
    if (success != false) {
 | 
			
		||||
@ -92,7 +93,7 @@ class _SettingsState extends State<Settings> {
 | 
			
		||||
        maxHeight: 1600);
 | 
			
		||||
    if (tempFile == null) return;
 | 
			
		||||
    final MatrixState matrix = Matrix.of(context);
 | 
			
		||||
    final success = await matrix.tryRequestWithLoadingDialog(
 | 
			
		||||
    final success = await SimpleDialogs(context).tryRequestWithLoadingDialog(
 | 
			
		||||
      matrix.client.setAvatar(
 | 
			
		||||
        MatrixFile(
 | 
			
		||||
          bytes: await tempFile.readAsBytes(),
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,7 @@ class DevicesSettingsState extends State<DevicesSettings> {
 | 
			
		||||
    for (UserDevice userDevice in devices) {
 | 
			
		||||
      deviceIds.add(userDevice.deviceId);
 | 
			
		||||
    }
 | 
			
		||||
    final success = await matrix
 | 
			
		||||
    final success = await SimpleDialogs(context)
 | 
			
		||||
        .tryRequestWithLoadingDialog(matrix.client.deleteDevices(deviceIds),
 | 
			
		||||
            onAdditionalAuth: (MatrixException exception) async {
 | 
			
		||||
      final String password = await SimpleDialogs(context).enterText(
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user