mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 09:09:29 +01:00
fix: move all .of(context) out of the widget tree and into a variable
At some places <something>.of(context) was used multiple times in the same widget. This, although small, can have an impact on performance that's just plain unnecessary. It's better to just get things you need out of the context first before you do anything else.
This commit is contained in:
parent
e11250182d
commit
eaffffac4d
@ -32,6 +32,8 @@ class RadioPlayFab extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
return FloatingActionButton(
|
return FloatingActionButton(
|
||||||
heroTag: null,
|
heroTag: null,
|
||||||
onPressed: onPressed,
|
onPressed: onPressed,
|
||||||
@ -44,7 +46,7 @@ class RadioPlayFab extends StatelessWidget {
|
|||||||
right: -10,
|
right: -10,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.play_arrow_rounded,
|
Icons.play_arrow_rounded,
|
||||||
color: Theme.of(context).colorScheme.primaryContainer,
|
color: theme.colorScheme.primaryContainer,
|
||||||
size: 26,
|
size: 26,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -327,8 +327,9 @@ class _DownloadAction extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final l = AppLocalizations.of(context);
|
||||||
return _MenuItem(
|
return _MenuItem(
|
||||||
title: _actionText(AppLocalizations.of(context)),
|
title: _actionText(l),
|
||||||
icon: downloadAction.iconBuilder(context),
|
icon: downloadAction.iconBuilder(context),
|
||||||
onTap: downloadAction.action,
|
onTap: downloadAction.action,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -54,11 +54,12 @@ class BackgroundGradient extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final mediaQuery = MediaQuery.of(context);
|
||||||
final base = ref.watch(baseThemeProvider);
|
final base = ref.watch(baseThemeProvider);
|
||||||
|
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: MediaQuery.of(context).size.height,
|
height: mediaQuery.size.height,
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
gradient: LinearGradient(
|
gradient: LinearGradient(
|
||||||
|
|||||||
@ -103,6 +103,8 @@ class ArtistArtImage extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final cache = ref.watch(_artistArtUriCacheInfoProvider(
|
final cache = ref.watch(_artistArtUriCacheInfoProvider(
|
||||||
artistId: artistId,
|
artistId: artistId,
|
||||||
thumbnail: thumbnail,
|
thumbnail: thumbnail,
|
||||||
@ -123,7 +125,7 @@ class ArtistArtImage extends HookConsumerWidget {
|
|||||||
width: width,
|
width: width,
|
||||||
),
|
),
|
||||||
loading: () => Container(
|
loading: () => Container(
|
||||||
color: Theme.of(context).colorScheme.secondaryContainer,
|
color: theme.colorScheme.secondaryContainer,
|
||||||
height: height,
|
height: height,
|
||||||
width: width,
|
width: width,
|
||||||
),
|
),
|
||||||
@ -211,9 +213,11 @@ class CardClip extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final cardShape = Theme.of(context).cardTheme.shape;
|
final cardShape = Theme.of(context).cardTheme.shape;
|
||||||
|
|
||||||
return ClipRRect(
|
return ClipRRect(
|
||||||
borderRadius:
|
borderRadius: cardShape is RoundedRectangleBorder
|
||||||
cardShape is RoundedRectangleBorder ? cardShape.borderRadius : BorderRadius.zero,
|
? cardShape.borderRadius
|
||||||
|
: BorderRadius.zero,
|
||||||
child: !square
|
child: !square
|
||||||
? child
|
? child
|
||||||
: AspectRatio(
|
: AspectRatio(
|
||||||
@ -247,6 +251,8 @@ class UriCacheInfoImage extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
return CachedNetworkImage(
|
return CachedNetworkImage(
|
||||||
imageUrl: cache.uri.toString(),
|
imageUrl: cache.uri.toString(),
|
||||||
cacheKey: cache.cacheKey,
|
cacheKey: cache.cacheKey,
|
||||||
@ -260,7 +266,7 @@ class UriCacheInfoImage extends StatelessWidget {
|
|||||||
placeholderStyle == PlaceholderStyle.spinner
|
placeholderStyle == PlaceholderStyle.spinner
|
||||||
? Container()
|
? Container()
|
||||||
: Container(
|
: Container(
|
||||||
color: Theme.of(context).colorScheme.secondaryContainer,
|
color: theme.colorScheme.secondaryContainer,
|
||||||
),
|
),
|
||||||
errorWidget: (context, url, error) => PlaceholderImage(
|
errorWidget: (context, url, error) => PlaceholderImage(
|
||||||
fit: fit,
|
fit: fit,
|
||||||
|
|||||||
@ -204,12 +204,14 @@ class ArtistListTile extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final l = AppLocalizations.of(context);
|
||||||
|
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: CircleClip(
|
leading: CircleClip(
|
||||||
child: ArtistArtImage(artistId: artist.id),
|
child: ArtistArtImage(artistId: artist.id),
|
||||||
),
|
),
|
||||||
title: Text(artist.name),
|
title: Text(artist.name),
|
||||||
subtitle: Text(AppLocalizations.of(context).resourcesAlbumCount(
|
subtitle: Text(l.resourcesAlbumCount(
|
||||||
artist.albumCount,
|
artist.albumCount,
|
||||||
)),
|
)),
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
@ -239,6 +241,8 @@ class PlaylistListTile extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final l = AppLocalizations.of(context);
|
||||||
|
|
||||||
// generate the palette used in other views ahead of time
|
// generate the palette used in other views ahead of time
|
||||||
ref.watch(playlistArtPaletteProvider(playlist.id));
|
ref.watch(playlistArtPaletteProvider(playlist.id));
|
||||||
final cache = ref.watch(cacheServiceProvider).playlistArt(playlist);
|
final cache = ref.watch(cacheServiceProvider).playlistArt(playlist);
|
||||||
@ -248,7 +252,7 @@ class PlaylistListTile extends HookConsumerWidget {
|
|||||||
child: UriCacheInfoImage(cache: cache),
|
child: UriCacheInfoImage(cache: cache),
|
||||||
),
|
),
|
||||||
title: Text(playlist.name),
|
title: Text(playlist.name),
|
||||||
subtitle: Text(AppLocalizations.of(context).resourcesSongCount(
|
subtitle: Text(l.resourcesSongCount(
|
||||||
playlist.songCount,
|
playlist.songCount,
|
||||||
)),
|
)),
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
|
|||||||
@ -72,6 +72,8 @@ class PagedGridQueryView<T> extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final mediaQuery = MediaQuery.of(context);
|
||||||
|
|
||||||
SliverGridDelegate gridDelegate;
|
SliverGridDelegate gridDelegate;
|
||||||
double spacing;
|
double spacing;
|
||||||
|
|
||||||
@ -92,7 +94,7 @@ class PagedGridQueryView<T> extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final listView = PagedGridView<int, T>(
|
final listView = PagedGridView<int, T>(
|
||||||
padding: MediaQuery.of(context).padding + EdgeInsets.all(spacing),
|
padding: mediaQuery.padding + EdgeInsets.all(spacing),
|
||||||
pagingController: pagingController,
|
pagingController: pagingController,
|
||||||
builderDelegate: PagedChildBuilderDelegate(
|
builderDelegate: PagedChildBuilderDelegate(
|
||||||
itemBuilder: (context, item, index) =>
|
itemBuilder: (context, item, index) =>
|
||||||
|
|||||||
@ -112,6 +112,8 @@ class _TrackInfo extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final item = ref.watch(mediaItemProvider);
|
final item = ref.watch(mediaItemProvider);
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
@ -125,11 +127,11 @@ class _TrackInfo extends HookConsumerWidget {
|
|||||||
// maxLines: 1,
|
// maxLines: 1,
|
||||||
// softWrap: false,
|
// softWrap: false,
|
||||||
// overflow: TextOverflow.fade,
|
// overflow: TextOverflow.fade,
|
||||||
// style: Theme.of(context).textTheme.labelLarge,
|
// style: theme.textTheme.labelLarge,
|
||||||
// ),
|
// ),
|
||||||
ScrollableText(
|
ScrollableText(
|
||||||
data?.title ?? 'Nothing!!!',
|
data?.title ?? 'Nothing!!!',
|
||||||
style: Theme.of(context).textTheme.labelLarge,
|
style: theme.textTheme.labelLarge,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 2),
|
const SizedBox(height: 2),
|
||||||
Text(
|
Text(
|
||||||
@ -137,7 +139,7 @@ class _TrackInfo extends HookConsumerWidget {
|
|||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
softWrap: false,
|
softWrap: false,
|
||||||
overflow: TextOverflow.fade,
|
overflow: TextOverflow.fade,
|
||||||
style: Theme.of(context).textTheme.labelMedium,
|
style: theme.textTheme.labelMedium,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
error: (_, __) => const [Text('Error!')],
|
error: (_, __) => const [Text('Error!')],
|
||||||
@ -158,6 +160,8 @@ class PlayPauseButton extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final playing = ref.watch(playingProvider);
|
final playing = ref.watch(playingProvider);
|
||||||
final state = ref.watch(processingStateProvider);
|
final state = ref.watch(processingStateProvider);
|
||||||
|
|
||||||
@ -173,7 +177,7 @@ class PlayPauseButton extends HookConsumerWidget {
|
|||||||
width: size / 3,
|
width: size / 3,
|
||||||
child: CircularProgressIndicator(
|
child: CircularProgressIndicator(
|
||||||
strokeWidth: size / 16,
|
strokeWidth: size / 16,
|
||||||
color: Theme.of(context).colorScheme.surface,
|
color: theme.colorScheme.surface,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -195,7 +199,7 @@ class PlayPauseButton extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
icon: icon,
|
icon: icon,
|
||||||
color: Theme.of(context).colorScheme.surface,
|
color: theme.colorScheme.surface,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -118,10 +118,11 @@ class _Title extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
return Text(
|
return Text(
|
||||||
text,
|
text,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.displayMedium!.copyWith(
|
style: theme.textTheme.displayMedium!.copyWith(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
shadows: [
|
shadows: [
|
||||||
|
|||||||
@ -46,6 +46,8 @@ class BottomNavTabsPage extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final observer = ref.watch(bottomTabObserverProvider);
|
final observer = ref.watch(bottomTabObserverProvider);
|
||||||
const navElevation = 3.0;
|
const navElevation = 3.0;
|
||||||
|
|
||||||
@ -63,8 +65,8 @@ class BottomNavTabsPage extends HookConsumerWidget {
|
|||||||
return AnnotatedRegion<SystemUiOverlayStyle>(
|
return AnnotatedRegion<SystemUiOverlayStyle>(
|
||||||
value: SystemUiOverlayStyle.light.copyWith(
|
value: SystemUiOverlayStyle.light.copyWith(
|
||||||
systemNavigationBarColor: ElevationOverlay.applySurfaceTint(
|
systemNavigationBarColor: ElevationOverlay.applySurfaceTint(
|
||||||
Theme.of(context).colorScheme.surface,
|
theme.colorScheme.surface,
|
||||||
Theme.of(context).colorScheme.surfaceTint,
|
theme.colorScheme.surfaceTint,
|
||||||
navElevation,
|
navElevation,
|
||||||
),
|
),
|
||||||
statusBarColor: Colors.transparent,
|
statusBarColor: Colors.transparent,
|
||||||
@ -136,7 +138,6 @@ class OfflineIndicator extends HookConsumerWidget {
|
|||||||
padding: EdgeInsets.only(left: 2, bottom: 2),
|
padding: EdgeInsets.only(left: 2, bottom: 2),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.cloud_off_rounded,
|
Icons.cloud_off_rounded,
|
||||||
// color: Theme.of(context).colorScheme.secondary,
|
|
||||||
size: 20,
|
size: 20,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -154,6 +155,7 @@ class _BottomNavBar extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final iconTheme = IconTheme.of(context);
|
||||||
final tabsRouter = AutoTabsRouter.of(context);
|
final tabsRouter = AutoTabsRouter.of(context);
|
||||||
|
|
||||||
useListenableSelector(tabsRouter, () => tabsRouter.activeIndex);
|
useListenableSelector(tabsRouter, () => tabsRouter.activeIndex);
|
||||||
@ -190,9 +192,7 @@ class _BottomNavBar extends HookConsumerWidget {
|
|||||||
return SvgPicture.asset(
|
return SvgPicture.asset(
|
||||||
'assets/tag_FILL0_wght400_GRAD0_opsz24.svg',
|
'assets/tag_FILL0_wght400_GRAD0_opsz24.svg',
|
||||||
colorFilter: ColorFilter.mode(
|
colorFilter: ColorFilter.mode(
|
||||||
IconTheme.of(context).color!.withOpacity(
|
iconTheme.color!.withOpacity(iconTheme.opacity ?? 1),
|
||||||
IconTheme.of(context).opacity ?? 1,
|
|
||||||
),
|
|
||||||
BlendMode.srcIn,
|
BlendMode.srcIn,
|
||||||
),
|
),
|
||||||
height: 28,
|
height: 28,
|
||||||
|
|||||||
@ -249,6 +249,8 @@ class _Category extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
return MultiSliver(
|
return MultiSliver(
|
||||||
children: [
|
children: [
|
||||||
SliverToBoxAdapter(
|
SliverToBoxAdapter(
|
||||||
@ -256,7 +258,7 @@ class _Category extends HookConsumerWidget {
|
|||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||||
child: Text(
|
child: Text(
|
||||||
title,
|
title,
|
||||||
style: Theme.of(context).textTheme.headlineMedium,
|
style: theme.textTheme.headlineMedium,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@ -228,6 +228,8 @@ class _LibraryFilterFab extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final tabsRouter = AutoTabsRouter.of(context);
|
final tabsRouter = AutoTabsRouter.of(context);
|
||||||
final activeIndex =
|
final activeIndex =
|
||||||
useListenableSelector(tabsRouter, () => tabsRouter.activeIndex);
|
useListenableSelector(tabsRouter, () => tabsRouter.activeIndex);
|
||||||
@ -242,7 +244,7 @@ class _LibraryFilterFab extends HookConsumerWidget {
|
|||||||
end: 0,
|
end: 0,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.circle,
|
Icons.circle,
|
||||||
color: Theme.of(context).colorScheme.primaryContainer,
|
color: theme.colorScheme.primaryContainer,
|
||||||
size: 11,
|
size: 11,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -449,6 +451,8 @@ class ListSortFilterOptions extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final list = ref.watch(libraryListQueryProvider(index));
|
final list = ref.watch(libraryListQueryProvider(index));
|
||||||
|
|
||||||
return SliverList(
|
return SliverList(
|
||||||
@ -457,7 +461,7 @@ class ListSortFilterOptions extends HookConsumerWidget {
|
|||||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: Text(
|
child: Text(
|
||||||
'Sort by',
|
'Sort by',
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
style: theme.textTheme.titleLarge,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
@ -480,7 +484,7 @@ class ListSortFilterOptions extends HookConsumerWidget {
|
|||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
child: Text(
|
child: Text(
|
||||||
'Filter',
|
'Filter',
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
style: theme.textTheme.titleLarge,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
for (var column in list.options.filterColumns)
|
for (var column in list.options.filterColumns)
|
||||||
|
|||||||
@ -215,6 +215,8 @@ class _Progress extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
final colors = ref.watch(mediaItemThemeProvider).valueOrNull;
|
final colors = ref.watch(mediaItemThemeProvider).valueOrNull;
|
||||||
final position = ref.watch(positionProvider);
|
final position = ref.watch(positionProvider);
|
||||||
final duration = ref.watch(durationProvider);
|
final duration = ref.watch(durationProvider);
|
||||||
@ -246,7 +248,7 @@ class _Progress extends HookConsumerWidget {
|
|||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 24),
|
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||||
child: DefaultTextStyle(
|
child: DefaultTextStyle(
|
||||||
style: Theme.of(context).textTheme.titleMedium!,
|
style: theme.textTheme.titleMedium!,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@ -131,11 +131,11 @@ class _SectionHeader extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final theme = Theme.of(context).textTheme;
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
child: Text(title, style: theme.headlineMedium),
|
child: Text(title, style: theme.textTheme.headlineMedium),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user