import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:rra_app/pages/map/tiles/hive_tile_cache.dart'; class HiveTileImage extends StatefulWidget { const HiveTileImage({required this.url, super.key}); final String url; @override State createState() => _HiveTileImageState(); } class _HiveTileImageState extends State { Uint8List? _bytes; String? _loadingUrl; @override void initState() { super.initState(); _load(widget.url); } @override void didUpdateWidget(covariant HiveTileImage oldWidget) { super.didUpdateWidget(oldWidget); if (oldWidget.url != widget.url) { _load(widget.url); } } Future _load(String url) async { _loadingUrl = url; final bytes = await HiveTileCache.getOrFetch(url); if (!mounted || _loadingUrl != url) return; if (bytes != null && bytes.isNotEmpty) { setState(() { _bytes = bytes; }); } } @override Widget build(BuildContext context) { final bytes = _bytes; if (bytes == null || bytes.isEmpty) { return const ColoredBox(color: Color(0xFFE0E0E0)); } return Image.memory( bytes, fit: BoxFit.cover, gaplessPlayback: true, filterQuality: FilterQuality.low, ); } }