improved handling of absent or loading icons
This commit is contained in:
@@ -18,7 +18,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
import 'package:weblibre/domain/services/generic_website.dart';
|
||||
import 'package:weblibre/features/geckoview/domain/entities/states/tab.dart';
|
||||
@@ -46,12 +48,16 @@ class TabIcon extends HookConsumerWidget {
|
||||
}, [state.icon, state.url]);
|
||||
|
||||
return Skeletonizer(
|
||||
enabled:
|
||||
icon.connectionState != ConnectionState.done && icon.data == null,
|
||||
enabled: icon.connectionState != ConnectionState.done,
|
||||
child: Skeleton.replace(
|
||||
replacement: Bone.icon(size: iconSize),
|
||||
child: RepaintBoundary(
|
||||
child: RawImage(image: icon.data, height: iconSize, width: iconSize),
|
||||
child:
|
||||
icon.data.mapNotNull(
|
||||
(icon) =>
|
||||
RawImage(image: icon, height: iconSize, width: iconSize),
|
||||
) ??
|
||||
Icon(MdiIcons.web, size: iconSize),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
+10
-5
@@ -20,6 +20,7 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
@@ -91,11 +92,15 @@ class HistorySuggestions extends HookConsumerWidget {
|
||||
|
||||
return ListTile(
|
||||
leading: RepaintBoundary(
|
||||
child: RawImage(
|
||||
image: icon.data?.value,
|
||||
height: 24,
|
||||
width: 24,
|
||||
),
|
||||
child:
|
||||
icon.data?.value.mapNotNull(
|
||||
(favicon) => RawImage(
|
||||
image: favicon,
|
||||
height: 24,
|
||||
width: 24,
|
||||
),
|
||||
) ??
|
||||
const Icon(MdiIcons.web, size: 24),
|
||||
),
|
||||
title: suggestion.title.mapNotNull(
|
||||
(title) => Text(title),
|
||||
|
||||
@@ -40,7 +40,7 @@ class UrlIcon extends HookConsumerWidget {
|
||||
);
|
||||
|
||||
return Skeletonizer(
|
||||
enabled: !icon.hasData,
|
||||
enabled: icon.connectionState != ConnectionState.done,
|
||||
child: SizedBox.square(
|
||||
dimension: iconSize,
|
||||
child: (icon.data != null)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:nullability/nullability.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
@@ -40,10 +41,16 @@ class WebsiteTitleTile extends HookConsumerWidget {
|
||||
skipLoadingOnReload: true,
|
||||
data: (info) {
|
||||
return ListTile(
|
||||
leading: RawImage(
|
||||
image: info.favicon?.image.value,
|
||||
height: 24,
|
||||
width: 24,
|
||||
leading: RepaintBoundary(
|
||||
child:
|
||||
info.favicon.mapNotNull(
|
||||
(favicon) => RawImage(
|
||||
image: favicon.image.value,
|
||||
height: 24,
|
||||
width: 24,
|
||||
),
|
||||
) ??
|
||||
const Icon(MdiIcons.web, size: 24),
|
||||
),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: Text(
|
||||
|
||||
Reference in New Issue
Block a user