refactor favicon widget

This commit is contained in:
Fabian Freund
2024-08-19 04:29:22 +02:00
parent 23dad27d61
commit 6a364559ff
5 changed files with 18 additions and 13 deletions
@@ -59,8 +59,8 @@ class SiteSearch extends HookConsumerWidget {
itemId: (bang) => bang.trigger, itemId: (bang) => bang.trigger,
itemAvatar: (bang) => BangIcon(bang, iconSize: 20), itemAvatar: (bang) => BangIcon(bang, iconSize: 20),
itemLabel: (bang) => Text(bang.websiteName), itemLabel: (bang) => Text(bang.websiteName),
available: availableBangs, availableItems: availableBangs,
selected: selectedBang, selectedItem: selectedBang,
onSelected: (bang) { onSelected: (bang) {
ref ref
.read( .read(
@@ -44,7 +44,8 @@ class AppBarTitle extends HookWidget {
child: Row( child: Row(
children: [ children: [
FaviconImage( FaviconImage(
webPageInfo: page, favicon: page.favicon,
url: page.url,
), ),
const SizedBox( const SizedBox(
width: 8, width: 8,
@@ -1,16 +1,18 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:lensai/domain/entities/web_page_info.dart';
import 'package:lensai/extensions/web_uri_favicon.dart'; import 'package:lensai/extensions/web_uri_favicon.dart';
class FaviconImage extends StatelessWidget { class FaviconImage extends StatelessWidget {
final double size; final double size;
final Icon _iconPlaceholder; final Icon _iconPlaceholder;
final WebPageInfo webPageInfo; final Favicon? favicon;
final Uri url;
FaviconImage({ FaviconImage({
required this.webPageInfo, required this.url,
required this.favicon,
this.size = 16, this.size = 16,
super.key, super.key,
}) : _iconPlaceholder = Icon( }) : _iconPlaceholder = Icon(
@@ -20,15 +22,15 @@ class FaviconImage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (webPageInfo.favicon != null) { if (favicon != null) {
return FadeInImage( return FadeInImage(
placeholder: NetworkImage( placeholder: NetworkImage(
webPageInfo.url.genericFavicon().toString(), url.genericFavicon().toString(),
), ),
image: NetworkImage(webPageInfo.favicon!.url.toString()), image: NetworkImage(favicon!.url.toString()),
placeholderErrorBuilder: (_, __, ___) => _iconPlaceholder, placeholderErrorBuilder: (_, __, ___) => _iconPlaceholder,
imageErrorBuilder: (_, __, ___) => Image.network( imageErrorBuilder: (_, __, ___) => Image.network(
webPageInfo.url.genericFavicon().toString(), url.genericFavicon().toString(),
errorBuilder: (_, __, ___) => _iconPlaceholder, errorBuilder: (_, __, ___) => _iconPlaceholder,
height: size, height: size,
width: size, width: size,
@@ -38,7 +40,7 @@ class FaviconImage extends StatelessWidget {
); );
} else { } else {
return Image.network( return Image.network(
webPageInfo.url.genericFavicon().toString(), url.genericFavicon().toString(),
errorBuilder: (_, __, ___) => _iconPlaceholder, errorBuilder: (_, __, ___) => _iconPlaceholder,
height: size, height: size,
width: size, width: size,
@@ -99,7 +99,8 @@ class WebPageDialog extends HookConsumerWidget {
), ),
title: ListTile( title: ListTile(
leading: FaviconImage( leading: FaviconImage(
webPageInfo: page, favicon: page.favicon,
url: page.url,
size: 24, size: 24,
), ),
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
@@ -20,7 +20,8 @@ class WebsiteTitleTile extends HookConsumerWidget {
data: (info) { data: (info) {
return ListTile( return ListTile(
leading: FaviconImage( leading: FaviconImage(
webPageInfo: info, favicon: info.favicon,
url: info.url,
size: 24, size: 24,
), ),
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,