yumi-flutter/lib/ui_kit/widgets/room/room_emoji_asset_image.dart

68 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
class RoomEmojiAssetImage extends StatefulWidget {
const RoomEmojiAssetImage({
super.key,
required this.asset,
required this.width,
required this.height,
this.fit = BoxFit.contain,
});
final String asset;
final double width;
final double height;
final BoxFit fit;
@override
State<RoomEmojiAssetImage> createState() => _RoomEmojiAssetImageState();
}
class _RoomEmojiAssetImageState extends State<RoomEmojiAssetImage>
with AutomaticKeepAliveClientMixin {
late AssetImage _imageProvider;
@override
void initState() {
super.initState();
_imageProvider = AssetImage(widget.asset);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_precache();
}
@override
void didUpdateWidget(covariant RoomEmojiAssetImage oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.asset != widget.asset) {
_imageProvider = AssetImage(widget.asset);
_precache();
}
}
@override
Widget build(BuildContext context) {
super.build(context);
return RepaintBoundary(
child: Image(
image: _imageProvider,
width: widget.width,
height: widget.height,
fit: widget.fit,
gaplessPlayback: true,
filterQuality: FilterQuality.low,
),
);
}
void _precache() {
precacheImage(_imageProvider, context);
}
@override
bool get wantKeepAlive => true;
}