From e97ecf38c5136d227c79a6da129df240c05371b2 Mon Sep 17 00:00:00 2001 From: Hamidreza Bayat Date: Fri, 10 Jul 2026 06:41:00 +0330 Subject: [PATCH] Use more specific MediaQuery methods to reduce unnecessary rebuilds (#467) --- lib/screens/album_screen.dart | 2 +- lib/screens/downloaded_album_screen.dart | 4 ++-- lib/screens/home_tab.dart | 3 +-- lib/screens/library_tracks_folder_screen.dart | 4 ++-- lib/screens/local_album_screen.dart | 4 ++-- lib/screens/main_shell.dart | 2 +- lib/screens/queue_tab.dart | 2 +- lib/screens/settings/download_settings_page.dart | 2 +- lib/screens/settings/files_settings_page.dart | 6 +++--- lib/screens/settings/lyrics_settings_page.dart | 2 +- lib/screens/track_metadata_edit_sheet.dart | 2 +- lib/screens/track_metadata_screen.dart | 6 +++--- lib/widgets/animation_utils.dart | 4 ++-- lib/widgets/batch_convert_sheet.dart | 2 +- lib/widgets/track_collection_quick_actions.dart | 2 +- 15 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lib/screens/album_screen.dart b/lib/screens/album_screen.dart index 59b12712..c915da0d 100644 --- a/lib/screens/album_screen.dart +++ b/lib/screens/album_screen.dart @@ -178,7 +178,7 @@ class _AlbumScreenState extends ConsumerState { } double _calculateExpandedHeight(BuildContext context, {bool tall = false}) { - final mediaSize = MediaQuery.of(context).size; + final mediaSize = MediaQuery.sizeOf(context); if (tall) { return (mediaSize.height * 0.68).clamp(440.0, 660.0); } diff --git a/lib/screens/downloaded_album_screen.dart b/lib/screens/downloaded_album_screen.dart index f9af5e6b..25a0d443 100644 --- a/lib/screens/downloaded_album_screen.dart +++ b/lib/screens/downloaded_album_screen.dart @@ -99,7 +99,7 @@ class _DownloadedAlbumScreenState extends ConsumerState { } double _calculateExpandedHeight(BuildContext context) { - final mediaSize = MediaQuery.of(context).size; + final mediaSize = MediaQuery.sizeOf(context); return (mediaSize.height * 0.6).clamp(400.0, 580.0); } @@ -361,7 +361,7 @@ class _DownloadedAlbumScreenState extends ConsumerState { @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; - final bottomPadding = MediaQuery.of(context).padding.bottom; + final bottomPadding = MediaQuery.paddingOf(context).bottom; final bottomInset = context.navBarBottomInset; final tracksValue = ref.watch( diff --git a/lib/screens/home_tab.dart b/lib/screens/home_tab.dart index 11f20895..c203dfa1 100644 --- a/lib/screens/home_tab.dart +++ b/lib/screens/home_tab.dart @@ -1205,8 +1205,7 @@ class _HomeTabState extends ConsumerState final isShowingRecentAccess = ref.watch( trackProvider.select((s) => s.isShowingRecentAccess), ); - final mediaQuery = MediaQuery.of(context); - final screenHeight = mediaQuery.size.height; + final screenHeight = MediaQuery.sizeOf(context).height; final topPadding = normalizedHeaderTopPadding(context); final bottomInset = context.navBarBottomInset; final hasHistoryItems = ref.watch( diff --git a/lib/screens/library_tracks_folder_screen.dart b/lib/screens/library_tracks_folder_screen.dart index 8c4ebc44..0715d72b 100644 --- a/lib/screens/library_tracks_folder_screen.dart +++ b/lib/screens/library_tracks_folder_screen.dart @@ -68,7 +68,7 @@ class _LibraryTracksFolderScreenState } double _calculateExpandedHeight(BuildContext context) { - final mediaSize = MediaQuery.of(context).size; + final mediaSize = MediaQuery.sizeOf(context); return (mediaSize.height * 0.6).clamp(400.0, 580.0); } @@ -330,7 +330,7 @@ class _LibraryTracksFolderScreenState ) .maybeWhen(data: (keys) => keys, orElse: () => const {}); - final bottomPadding = MediaQuery.of(context).padding.bottom; + final bottomPadding = MediaQuery.paddingOf(context).bottom; final bottomInset = context.navBarBottomInset; return PopScope( diff --git a/lib/screens/local_album_screen.dart b/lib/screens/local_album_screen.dart index 97c66226..c6fc9885 100644 --- a/lib/screens/local_album_screen.dart +++ b/lib/screens/local_album_screen.dart @@ -97,7 +97,7 @@ class _LocalAlbumScreenState extends ConsumerState { } double _calculateExpandedHeight(BuildContext context) { - final mediaSize = MediaQuery.of(context).size; + final mediaSize = MediaQuery.sizeOf(context); return (mediaSize.height * 0.6).clamp(400.0, 580.0); } @@ -249,7 +249,7 @@ class _LocalAlbumScreenState extends ConsumerState { @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; - final bottomPadding = MediaQuery.of(context).padding.bottom; + final bottomPadding = MediaQuery.paddingOf(context).bottom; final bottomInset = context.navBarBottomInset; final tracks = _sortedTracksCache; diff --git a/lib/screens/main_shell.dart b/lib/screens/main_shell.dart index c61badab..fa7ee049 100644 --- a/lib/screens/main_shell.dart +++ b/lib/screens/main_shell.dart @@ -375,7 +375,7 @@ class _MainShellState extends ConsumerState final trackState = ref.read(trackProvider); - final isKeyboardVisible = MediaQuery.of(context).viewInsets.bottom > 0; + final isKeyboardVisible = MediaQuery.viewInsetsOf(context).bottom > 0; _log.d( 'Back: state check - tab=$_currentIndex, ' diff --git a/lib/screens/queue_tab.dart b/lib/screens/queue_tab.dart index a4d7b00a..57d84183 100644 --- a/lib/screens/queue_tab.dart +++ b/lib/screens/queue_tab.dart @@ -6085,7 +6085,7 @@ class _QueueTabState extends ConsumerState { if (_isSelectionMode) { _syncSelectionOverlay( items: allItems, - bottomPadding: MediaQuery.of(context).padding.bottom, + bottomPadding: MediaQuery.paddingOf(context).bottom, ); } return; diff --git a/lib/screens/settings/download_settings_page.dart b/lib/screens/settings/download_settings_page.dart index 01bbe84f..c4a34081 100644 --- a/lib/screens/settings/download_settings_page.dart +++ b/lib/screens/settings/download_settings_page.dart @@ -800,7 +800,7 @@ class _DownloadSettingsPageState extends ConsumerState { ), builder: (context) => SafeArea( child: SizedBox( - height: MediaQuery.of(context).size.height * 0.7, + height: MediaQuery.sizeOf(context).height * 0.7, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/screens/settings/files_settings_page.dart b/lib/screens/settings/files_settings_page.dart index 3c49ee08..0f259430 100644 --- a/lib/screens/settings/files_settings_page.dart +++ b/lib/screens/settings/files_settings_page.dart @@ -747,7 +747,7 @@ class _FilesSettingsPageState extends ConsumerState { borderRadius: BorderRadius.vertical(top: Radius.circular(28)), ), constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.7, + maxHeight: MediaQuery.sizeOf(context).height * 0.7, ), builder: (context) => SafeArea( child: SingleChildScrollView( @@ -846,7 +846,7 @@ class _FilesSettingsPageState extends ConsumerState { borderRadius: BorderRadius.vertical(top: Radius.circular(28)), ), constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.7, + maxHeight: MediaQuery.sizeOf(context).height * 0.7, ), builder: (context) => SafeArea( child: SingleChildScrollView( @@ -1072,7 +1072,7 @@ class _FilenameFormatEditorSheetState Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; return Padding( - padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), + padding: EdgeInsets.only(bottom: MediaQuery.viewInsetsOf(context).bottom), child: SingleChildScrollView( child: SafeArea( child: Padding( diff --git a/lib/screens/settings/lyrics_settings_page.dart b/lib/screens/settings/lyrics_settings_page.dart index 6358d7e4..034e76c8 100644 --- a/lib/screens/settings/lyrics_settings_page.dart +++ b/lib/screens/settings/lyrics_settings_page.dart @@ -326,7 +326,7 @@ class LyricsSettingsPage extends ConsumerWidget { left: 24, right: 24, top: 24, - bottom: 24 + MediaQuery.of(context).viewInsets.bottom, + bottom: 24 + MediaQuery.viewInsetsOf(context).bottom, ), child: Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/screens/track_metadata_edit_sheet.dart b/lib/screens/track_metadata_edit_sheet.dart index 5dd3a4bb..dad7bdcf 100644 --- a/lib/screens/track_metadata_edit_sheet.dart +++ b/lib/screens/track_metadata_edit_sheet.dart @@ -1250,7 +1250,7 @@ class _EditMetadataSheetState extends State<_EditMetadataSheet> { return Padding( padding: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom, + bottom: MediaQuery.viewInsetsOf(context).bottom, ), child: DraggableScrollableSheet( initialChildSize: 0.85, diff --git a/lib/screens/track_metadata_screen.dart b/lib/screens/track_metadata_screen.dart index 76c577a2..039cee73 100644 --- a/lib/screens/track_metadata_screen.dart +++ b/lib/screens/track_metadata_screen.dart @@ -262,7 +262,7 @@ class _TrackMetadataScreenState extends ConsumerState { } double _calculateExpandedHeight(BuildContext context) { - final mediaSize = MediaQuery.of(context).size; + final mediaSize = MediaQuery.sizeOf(context); return (mediaSize.height * 0.55).clamp(360.0, 520.0); } @@ -3438,7 +3438,7 @@ class _TrackMetadataScreenState extends ConsumerState { return SafeArea( child: ConstrainedBox( constraints: BoxConstraints( - maxHeight: MediaQuery.of(sheetContext).size.height * 0.85, + maxHeight: MediaQuery.sizeOf(sheetContext).height * 0.85, ), child: SingleChildScrollView( child: Column( @@ -3916,7 +3916,7 @@ class _TrackMetadataScreenState extends ConsumerState { return Padding( padding: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom, + bottom: MediaQuery.viewInsetsOf(context).bottom, ), child: DraggableScrollableSheet( initialChildSize: 0.85, diff --git a/lib/widgets/animation_utils.dart b/lib/widgets/animation_utils.dart index fcb0231a..6f1cbcd0 100644 --- a/lib/widgets/animation_utils.dart +++ b/lib/widgets/animation_utils.dart @@ -421,7 +421,7 @@ class _CollectionHeaderSkeleton extends StatelessWidget { @override Widget build(BuildContext context) { - final screenWidth = MediaQuery.of(context).size.width; + final screenWidth = MediaQuery.sizeOf(context).width; final coverSize = (screenWidth * 0.5).clamp(150.0, 210.0).toDouble(); return Padding( @@ -542,7 +542,7 @@ class ArtistScreenSkeleton extends StatelessWidget { @override Widget build(BuildContext context) { - final screenWidth = MediaQuery.of(context).size.width; + final screenWidth = MediaQuery.sizeOf(context).width; return ShimmerLoading( child: SingleChildScrollView( physics: const NeverScrollableScrollPhysics(), diff --git a/lib/widgets/batch_convert_sheet.dart b/lib/widgets/batch_convert_sheet.dart index ccfd77f5..ee6d41d7 100644 --- a/lib/widgets/batch_convert_sheet.dart +++ b/lib/widgets/batch_convert_sheet.dart @@ -75,7 +75,7 @@ class _BatchConvertSheetState extends State { return Padding( padding: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom, + bottom: MediaQuery.viewInsetsOf(context).bottom, ), child: DraggableScrollableSheet( initialChildSize: 0.85, diff --git a/lib/widgets/track_collection_quick_actions.dart b/lib/widgets/track_collection_quick_actions.dart index 666425b9..c833bd0d 100644 --- a/lib/widgets/track_collection_quick_actions.dart +++ b/lib/widgets/track_collection_quick_actions.dart @@ -68,7 +68,7 @@ class _TrackOptionsSheet extends ConsumerWidget { return SafeArea( child: ConstrainedBox( constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.82, + maxHeight: MediaQuery.sizeOf(context).height * 0.82, ), child: SingleChildScrollView( child: Column(