Wallpaper-Genie/lib/common/components/image_network_widget.dart
2024-07-22 17:52:41 +08:00

77 lines
2.0 KiB
Dart

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:wallpaperx/generated/assets.dart';
class ImageNetworkWidget extends StatelessWidget {
const ImageNetworkWidget({
super.key,
this.width,
this.height,
this.radius = 0.0,
required this.url,
this.fit = BoxFit.cover,
this.aspectRatio,
this.placeholder,
this.errorWidget,
});
final double? width;
final double? height;
final double radius;
final String? url;
final BoxFit fit;
final double? aspectRatio;
final Widget? placeholder;
final Widget? errorWidget;
@override
Widget build(BuildContext context) {
if (aspectRatio != null) {
return AspectRatio(
aspectRatio: aspectRatio ?? 0.5,
child: ClipRRect(
borderRadius: BorderRadius.circular(radius),
child: CachedNetworkImage(
width: width,
height: height,
imageUrl: '$url',
fit: fit,
placeholder: (context, url) {
return placeholder ??
_placeholderWidget(Assets.iconPlaceholderImage);
},
errorWidget: (context, url, error) {
return errorWidget ?? _placeholderWidget(Assets.iconImgErrorType);
},
),
),
);
}
return ClipRRect(
borderRadius: BorderRadius.circular(radius),
child: CachedNetworkImage(
width: width,
height: height,
imageUrl: '$url',
fit: fit,
placeholder: (context, url) {
return placeholder ?? _placeholderWidget(Assets.iconPlaceholderImage);
},
errorWidget: (context, url, error) {
return errorWidget ?? _placeholderWidget(Assets.iconImgErrorType);
},
),
);
}
Widget _placeholderWidget(String imgName) {
return Container(
color: Colors.grey,
child: Image.asset(
imgName,
color: Colors.white,
),
);
}
}