From f611ac82e7ac80c38a14d774bff8981dbfc9f4f6 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Sat, 7 Oct 2023 14:39:40 +0200 Subject: [PATCH] fix(neon): Fix NeonCachedImage BoxFit Signed-off-by: jld3103 --- packages/neon/neon/lib/src/widgets/image.dart | 74 +++++++++---------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/packages/neon/neon/lib/src/widgets/image.dart b/packages/neon/neon/lib/src/widgets/image.dart index a7236b89..8e903d3d 100644 --- a/packages/neon/neon/lib/src/widgets/image.dart +++ b/packages/neon/neon/lib/src/widgets/image.dart @@ -135,48 +135,46 @@ class NeonCachedImage extends StatefulWidget { class _NeonCachedImageState extends State { @override - Widget build(final BuildContext context) => Center( - child: FutureBuilder( - future: widget.image, - builder: (final context, final fileSnapshot) { - if (fileSnapshot.hasError) { - return _buildError(fileSnapshot.error); - } + Widget build(final BuildContext context) => FutureBuilder( + future: widget.image, + builder: (final context, final fileSnapshot) { + if (fileSnapshot.hasError) { + return _buildError(fileSnapshot.error); + } + + if (!fileSnapshot.hasData) { + return SizedBox( + width: widget.size?.width, + child: const NeonLinearProgressIndicator(), + ); + } - if (!fileSnapshot.hasData) { - return SizedBox( + final content = fileSnapshot.requireData; + + try { + // TODO: Is this safe enough? + if (widget.isSvgHint || utf8.decode(content).contains(' _buildError(error), - ); - }, - ), + } catch (_) { + // If the data is not UTF-8 + } + + return Image.memory( + content, + height: widget.size?.height, + width: widget.size?.width, + fit: widget.fit, + gaplessPlayback: true, + errorBuilder: (final context, final error, final stacktrace) => _buildError(error), + ); + }, ); Widget _buildError(final Object? error) =>