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 createState() => _RoomEmojiAssetImageState(); } class _RoomEmojiAssetImageState extends State 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; }