diff --git a/lib/config/themes.dart b/lib/config/themes.dart index abed6dc..5b04925 100644 --- a/lib/config/themes.dart +++ b/lib/config/themes.dart @@ -12,10 +12,10 @@ abstract class FluffyThemes { width > columnWidth * 2 + navRailWidth; static bool isColumnMode(BuildContext context) => - isColumnModeByWidth(MediaQuery.of(context).size.width); + isColumnModeByWidth(MediaQuery.sizeOf(context).width); static bool isThreeColumnMode(BuildContext context) => - MediaQuery.of(context).size.width > FluffyThemes.columnWidth * 3.5; + MediaQuery.sizeOf(context).width > FluffyThemes.columnWidth * 3.5; static LinearGradient backgroundGradient( BuildContext context, diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart index 986c1c7..213e82e 100644 --- a/lib/pages/chat/chat_emoji_picker.dart +++ b/lib/pages/chat/chat_emoji_picker.dart @@ -21,7 +21,7 @@ class ChatEmojiPicker extends StatelessWidget { clipBehavior: Clip.hardEdge, decoration: const BoxDecoration(), height: controller.showEmojiPicker - ? MediaQuery.of(context).size.height / 2 + ? MediaQuery.sizeOf(context).height / 2 : 0, child: controller.showEmojiPicker ? DefaultTabController( diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 1c6419b..d7e2bae 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -288,8 +288,8 @@ class ChatView extends StatelessWidget { cacheKey: accountConfig.wallpaperUrl.toString(), uri: accountConfig.wallpaperUrl, fit: BoxFit.cover, - height: MediaQuery.of(context).size.height, - width: MediaQuery.of(context).size.width, + height: MediaQuery.sizeOf(context).height, + width: MediaQuery.sizeOf(context).width, isThumbnail: false, placeholder: (_) => Container(), ), diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 5a8157c..532f50e 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -364,7 +364,8 @@ class Message extends StatelessWidget { colors: colors, ignore: noBubble || !ownMessage || - !gradient, + !gradient || + MediaQuery.highContrastOf(context), scrollController: scrollController, child: Container( decoration: BoxDecoration( diff --git a/lib/pages/dialer/dialer.dart b/lib/pages/dialer/dialer.dart index 6b9fe65..ade0a24 100644 --- a/lib/pages/dialer/dialer.dart +++ b/lib/pages/dialer/dialer.dart @@ -238,18 +238,18 @@ class MyCallingPage extends State { void _resizeLocalVideo(Orientation orientation) { final shortSide = min( - MediaQuery.of(widget.context).size.width, - MediaQuery.of(widget.context).size.height, + MediaQuery.sizeOf(widget.context).width, + MediaQuery.sizeOf(widget.context).height, ); _localVideoMargin = remoteStream != null ? const EdgeInsets.only(top: 20.0, right: 20.0) : EdgeInsets.zero; _localVideoWidth = remoteStream != null ? shortSide / 3 - : MediaQuery.of(widget.context).size.width; + : MediaQuery.sizeOf(widget.context).width; _localVideoHeight = remoteStream != null ? shortSide / 4 - : MediaQuery.of(widget.context).size.height; + : MediaQuery.sizeOf(widget.context).height; } void _handleCallState(CallState state) { diff --git a/lib/pages/dialer/pip/pip_view.dart b/lib/pages/dialer/pip/pip_view.dart index d9aa3d9..78facfa 100644 --- a/lib/pages/dialer/pip/pip_view.dart +++ b/lib/pages/dialer/pip/pip_view.dart @@ -138,10 +138,9 @@ class PIPViewState extends State with TickerProviderStateMixin { @override Widget build(BuildContext context) { - final mediaQuery = MediaQuery.of(context); - var windowPadding = mediaQuery.padding; + var windowPadding = MediaQuery.paddingOf(context); if (widget.avoidKeyboard) { - windowPadding += mediaQuery.viewInsets; + windowPadding += MediaQuery.viewInsetsOf(context); } final isFloating = _floating; diff --git a/lib/pages/image_viewer/image_viewer.dart b/lib/pages/image_viewer/image_viewer.dart index 28da2c4..8443d98 100644 --- a/lib/pages/image_viewer/image_viewer.dart +++ b/lib/pages/image_viewer/image_viewer.dart @@ -111,7 +111,7 @@ class ImageViewerController extends State { void onInteractionEnds(ScaleEndDetails endDetails) { if (PlatformInfos.usesTouchscreen == false) { if (endDetails.velocity.pixelsPerSecond.dy > - MediaQuery.of(context).size.height * maxScaleFactor) { + MediaQuery.sizeOf(context).height * maxScaleFactor) { Navigator.of(context, rootNavigator: false).pop(); } } diff --git a/lib/utils/adaptive_bottom_sheet.dart b/lib/utils/adaptive_bottom_sheet.dart index faa7f5c..db9a11e 100644 --- a/lib/utils/adaptive_bottom_sheet.dart +++ b/lib/utils/adaptive_bottom_sheet.dart @@ -54,7 +54,7 @@ Future showAdaptiveBottomSheet({ isDismissible: isDismissible, isScrollControlled: isScrollControlled, constraints: BoxConstraints( - maxHeight: min(MediaQuery.of(context).size.height - 32, 600), + maxHeight: min(MediaQuery.sizeOf(context).height - 32, 600), maxWidth: FluffyThemes.columnWidth * 1.25, ), backgroundColor: Colors.transparent, diff --git a/lib/widgets/adaptive_dialogs/show_modal_action_popup.dart b/lib/widgets/adaptive_dialogs/show_modal_action_popup.dart index 7e67098..47db330 100644 --- a/lib/widgets/adaptive_dialogs/show_modal_action_popup.dart +++ b/lib/widgets/adaptive_dialogs/show_modal_action_popup.dart @@ -23,7 +23,7 @@ Future showModalActionPopup({ clipBehavior: Clip.hardEdge, constraints: BoxConstraints( maxWidth: 512, - maxHeight: MediaQuery.of(context).size.height - 32, + maxHeight: MediaQuery.sizeOf(context).height - 32, ), builder: (context) => ListView( shrinkWrap: true, diff --git a/lib/widgets/layouts/empty_page.dart b/lib/widgets/layouts/empty_page.dart index 4a30abe..5a0be78 100644 --- a/lib/widgets/layouts/empty_page.dart +++ b/lib/widgets/layouts/empty_page.dart @@ -7,7 +7,7 @@ class EmptyPage extends StatelessWidget { const EmptyPage({super.key}); @override Widget build(BuildContext context) { - final width = min(MediaQuery.of(context).size.width, EmptyPage._width) / 2; + final width = min(MediaQuery.sizeOf(context).width, EmptyPage._width) / 2; final theme = Theme.of(context); return Scaffold( // Add invisible appbar to make status bar on Android tablets bright. diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart index 341bfa8..380e549 100644 --- a/lib/widgets/member_actions_popup_menu_button.dart +++ b/lib/widgets/member_actions_popup_menu_button.dart @@ -1,3 +1,4 @@ +import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; import 'package:fluffychat/generated/l10n/l10n.dart'; @@ -15,6 +16,7 @@ void showMemberActionsPopupMenu({ required User user, void Function()? onMention, }) async { + final mx = Matrix.of(context); final theme = Theme.of(context); final displayname = user.calcDisplayname(); final isMe = user.room.client.userID == user.id; @@ -220,32 +222,36 @@ void showMemberActionsPopupMenu({ ); return; case _MemberActions.kick: - if (await showOkCancelAlertDialog( + final reason = await showTextInputDialog( context: context, title: L10n.of(context).areYouSure, okLabel: L10n.of(context).yes, cancelLabel: L10n.of(context).no, message: L10n.of(context).kickUserDescription, - ) == - OkCancelResult.ok) { + hintText: L10n.of(context).reason, + isDestructive: true + ); + if (reason != null) { await showFutureLoadingDialog( context: context, - future: () => user.kick(), + future: () => mx.client.kick(user.room.id, user.id, reason: reason) ); } return; case _MemberActions.ban: - if (await showOkCancelAlertDialog( + final reason = await showTextInputDialog( context: context, title: L10n.of(context).areYouSure, okLabel: L10n.of(context).yes, cancelLabel: L10n.of(context).no, message: L10n.of(context).banUserDescription, - ) == - OkCancelResult.ok) { + hintText: L10n.of(context).reason, + isDestructive: true + ); + if (reason != null) { await showFutureLoadingDialog( context: context, - future: () => user.ban(), + future: () => mx.client.ban(user.room.id, user.id, reason: reason) ); } return; diff --git a/lib/widgets/mxc_image.dart b/lib/widgets/mxc_image.dart index bdc938e..6ae7056 100644 --- a/lib/widgets/mxc_image.dart +++ b/lib/widgets/mxc_image.dart @@ -72,7 +72,7 @@ class _MxcImageState extends State { final event = widget.event; if (uri != null) { - final devicePixelRatio = MediaQuery.of(context).devicePixelRatio; + final devicePixelRatio = MediaQuery.devicePixelRatioOf(context); final width = widget.width; final realWidth = width == null ? null : width * devicePixelRatio; final height = widget.height; diff --git a/lib/widgets/mxc_image_viewer.dart b/lib/widgets/mxc_image_viewer.dart index ffc578f..41b4481 100644 --- a/lib/widgets/mxc_image_viewer.dart +++ b/lib/widgets/mxc_image_viewer.dart @@ -36,7 +36,7 @@ class MxcImageViewer extends StatelessWidget { maxScale: 10.0, onInteractionEnd: (endDetails) { if (endDetails.velocity.pixelsPerSecond.dy > - MediaQuery.of(context).size.height * 1.5) { + MediaQuery.sizeOf(context).height * 1.5) { Navigator.of(context, rootNavigator: false).pop(); } }, diff --git a/pubspec.lock b/pubspec.lock index bae79a6..e01895b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -333,10 +333,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d + sha256: "43a5a6679649a7731ab860334a5812f2067c2d9ce6452cf069c5e0c25336c17c" url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.8.1" emoji_picker_flutter: dependency: "direct main" description: @@ -389,10 +389,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: ab13ae8ef5580a411c458d6207b6774a6c237d77ac37011b13994879f68a8810 + sha256: "13ba4e627ef24503a465d1d61b32596ce10eb6b8903678d362a528f9939b4aa8" url: "https://pub.dev" source: hosted - version: "8.3.7" + version: "10.2.1" file_selector: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 1bc1ae9..7cbe6a2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,11 +21,11 @@ dependencies: desktop_drop: ^0.4.4 desktop_notifications: ^0.6.3 device_info_plus: ^10.0.1 - dynamic_color: ^1.7.0 + dynamic_color: ^1.8.1 emoji_picker_flutter: ^3.1.0 emojis: ^0.9.9 #fcm_shared_isolate: ^0.2.0 - file_picker: ^8.1.2 + file_picker: ^10.2.1 file_selector: ^1.0.3 flutter: sdk: flutter