Files
Roadbound-Map-Utility/lib/pages/map/tiles/hive_tile_image.dart

58 lines
1.3 KiB
Dart

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<HiveTileImage> createState() => _HiveTileImageState();
}
class _HiveTileImageState extends State<HiveTileImage> {
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<void> _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,
);
}
}