spotube/lib/hooks/usePaletteColor.dart
Kingkor Roy Tirtho e206f16723 feat(local-tracks): complete support for local tracks
Downloaded tracks are saved with metadata. Only MP3 file metadata support is available in local track player for now
2022-09-03 09:42:41 +06:00

67 lines
1.9 KiB
Dart

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:palette_generator/palette_generator.dart';
import 'package:spotube/components/Shared/UniversalImage.dart';
final _paletteColorState = StateProvider<PaletteColor>(
(ref) {
return PaletteColor(Colors.grey[300]!, 0);
},
);
PaletteColor usePaletteColor(String imageUrl, WidgetRef ref) {
final context = useContext();
final paletteColor = ref.watch(_paletteColorState);
final mounted = useIsMounted();
useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
final palette = await PaletteGenerator.fromImageProvider(
UniversalImage.imageProvider(
imageUrl,
height: 50,
width: 50,
),
);
if (!mounted()) return;
final color = Theme.of(context).brightness == Brightness.light
? palette.lightMutedColor ?? palette.lightVibrantColor
: palette.darkMutedColor ?? palette.darkVibrantColor;
if (color != null) {
ref.read(_paletteColorState.notifier).state = color;
}
});
return null;
}, [imageUrl]);
return paletteColor;
}
PaletteGenerator usePaletteGenerator(
BuildContext context,
String imageUrl,
) {
final palette = useState(PaletteGenerator.fromColors([]));
final mounted = useIsMounted();
useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
final newPalette = await PaletteGenerator.fromImageProvider(
UniversalImage.imageProvider(
imageUrl,
height: 50,
width: 50,
),
);
if (!mounted()) return;
palette.value = newPalette;
});
return null;
}, [imageUrl]);
return palette.value;
}