refactor favicon widget
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user