didvan-app/lib/views/widgets/skeleton_image.dart

53 lines
1.7 KiB
Dart

import 'package:cached_network_image/cached_network_image.dart';
import 'package:didvan/config/design_config.dart';
import 'package:didvan/services/network/request.dart';
import 'package:didvan/services/network/request_helper.dart';
import 'package:didvan/views/widgets/shimmer_placeholder.dart';
import 'package:flutter/material.dart';
// ignore: depend_on_referenced_packages
import 'package:cached_network_image_platform_interface/cached_network_image_platform_interface.dart';
class SkeletonImage extends StatelessWidget {
final String imageUrl;
final double? width;
final double? height;
final BorderRadius? borderRadius;
final double? aspectRatio;
const SkeletonImage({
Key? key,
required this.imageUrl,
this.borderRadius = DesignConfig.lowBorderRadius,
this.aspectRatio,
this.width,
this.height,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return _aspectRatioGenerator(
child: ClipRRect(
borderRadius: borderRadius ?? BorderRadius.zero,
child: CachedNetworkImage(
fit: BoxFit.cover,
imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet,
httpHeaders: {'Authorization': 'Bearer ${RequestService.token}'},
width: width,
height: height,
imageUrl: imageUrl.startsWith('http')
? imageUrl
: RequestHelper.baseUrl + imageUrl,
placeholder: (context, _) => const ShimmerPlaceholder(),
),
),
);
}
Widget _aspectRatioGenerator({required Widget child}) => aspectRatio == null
? child
: AspectRatio(
key: ValueKey(imageUrl),
aspectRatio: aspectRatio!,
child: child,
);
}