stack_wallet/lib/widgets/app_icon.dart

75 lines
1.6 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import '../app_config.dart';
import '../themes/theme_providers.dart';
enum _SvgType {
file,
asset;
}
final _pAppIcon = Provider.autoDispose<({_SvgType svgType, String svg})>((ref) {
if (AppConfig.appIconAsset != null) {
final brightness = ref.watch(
themeProvider.select(
(value) => value.brightness,
),
);
final String asset;
switch (brightness) {
case Brightness.dark:
asset = AppConfig.appIconAsset!.dark;
break;
case Brightness.light:
asset = AppConfig.appIconAsset!.light;
break;
}
return (svgType: _SvgType.asset, svg: asset);
} else {
final file = ref.watch(
themeAssetsProvider.select(
(value) => value.stackIcon,
),
);
return (svgType: _SvgType.file, svg: file);
}
});
class AppIcon extends ConsumerWidget {
const AppIcon({
super.key,
this.width,
this.height,
});
final double? width;
final double? height;
@override
Widget build(BuildContext context, WidgetRef ref) {
final iconInfo = ref.watch(_pAppIcon);
switch (iconInfo.svgType) {
case _SvgType.file:
return SvgPicture.file(
File(
iconInfo.svg,
),
width: width,
height: height,
);
case _SvgType.asset:
return SvgPicture.asset(
iconInfo.svg,
width: width,
height: height,
);
}
}
}