improve image lifecycle handling

This commit is contained in:
Fabian Freund
2026-02-08 17:37:21 +01:00
parent 6f3a84fb31
commit d1e769fb7c
14 changed files with 126 additions and 51 deletions
@@ -29,6 +29,7 @@ import 'package:weblibre/features/geckoview/features/search/domain/providers/eng
import 'package:weblibre/features/geckoview/utils/image_helper.dart';
import 'package:weblibre/presentation/hooks/cached_future.dart';
import 'package:weblibre/presentation/widgets/failure_widget.dart';
import 'package:weblibre/presentation/widgets/safe_raw_image.dart';
import 'package:weblibre/presentation/widgets/uri_breadcrumb.dart';
class HistorySuggestions extends HookConsumerWidget {
@@ -92,15 +93,12 @@ class HistorySuggestions extends HookConsumerWidget {
return ListTile(
leading: RepaintBoundary(
child:
icon.data?.value.mapNotNull(
(image) => RawImage(
image: image,
height: 24,
width: 24,
),
) ??
const Icon(MdiIcons.web, size: 24),
child: SafeRawImage(
image: icon.data,
height: 24,
width: 24,
fallback: const Icon(MdiIcons.web, size: 24),
),
),
title: suggestion.title.mapNotNull(
(title) => Text(
@@ -39,6 +39,7 @@ import 'package:weblibre/features/geckoview/features/tabs/domain/providers/selec
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/container.dart';
import 'package:weblibre/features/geckoview/features/tabs/domain/repositories/tab_search.dart';
import 'package:weblibre/features/geckoview/features/tabs/presentation/widgets/container_chips.dart';
import 'package:weblibre/presentation/widgets/safe_raw_image.dart';
import 'package:weblibre/presentation/widgets/uri_breadcrumb.dart';
import 'package:weblibre/presentation/widgets/url_icon.dart';
import 'package:weblibre/utils/text_highlight.dart';
@@ -187,9 +188,11 @@ class TabSearch extends HookConsumerWidget {
leading: RepaintBoundary(
child:
result.icon.mapNotNull(
(icon) => icon.value.mapNotNull(
(image) =>
RawImage(image: image, height: 24, width: 24),
(icon) => SafeRawImage(
image: icon,
height: 24,
width: 24,
fallback: UrlIcon([result.url], iconSize: 24),
),
) ??
UrlIcon([result.url], iconSize: 24),