ui improvements and lint fixes

This commit is contained in:
Fabian Freund
2026-04-19 18:44:33 +02:00
parent 66cb10aa47
commit 7af0f1d4e3
5 changed files with 39 additions and 48 deletions
@@ -153,14 +153,14 @@ Future<List<AddonListing>> searchAddonListings(
if (trimmed.isEmpty) {
return ref.watch(featuredAddonListingsProvider(app).future);
}
return ref.read(addonServiceProvider).searchAddonListings(
query: trimmed,
app: app,
);
return ref
.read(addonServiceProvider)
.searchAddonListings(query: trimmed, app: app);
}
@Riverpod(keepAlive: true)
class AddonStoreAppFilter extends _$AddonStoreAppFilter {
// ignore: use_setters_to_change_properties
void setApp(AddonStoreApp app) => state = app;
@override
@@ -589,9 +589,9 @@ class _DescriptionCard extends ConsumerWidget {
: MarkdownBody(
data: markdown,
selectable: true,
onTapLink: (text, href, title) {
onTapLink: (text, href, title) async {
if (href != null && href.isNotEmpty) {
launchUrl(Uri.parse(href));
await launchUrl(Uri.parse(href));
}
},
),
@@ -249,16 +249,37 @@ class _ScreenshotsSection extends StatelessWidget {
itemBuilder: (context, index) {
final p = previews[index];
return GestureDetector(
onTap: () => _showFullScreenImage(context, p.imageUrl),
onTap: () => showDialog<void>(
context: context,
barrierColor: Colors.black87,
builder: (context) => Dialog(
backgroundColor: Colors.transparent,
insetPadding: EdgeInsets.zero,
child: GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: InteractiveViewer(
child: Hero(
tag: p.imageUrl,
child: Image.network(p.imageUrl, fit: BoxFit.contain),
),
),
),
),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(8),
child: Image.network(
p.thumbnailUrl ?? p.imageUrl,
fit: BoxFit.cover,
errorBuilder: (_, _, _) => Container(
width: 300,
color: Theme.of(context).colorScheme.surfaceContainerHighest,
child: const Icon(Icons.broken_image_outlined),
child: Hero(
tag: p.imageUrl,
child: Image.network(
p.thumbnailUrl ?? p.imageUrl,
fit: BoxFit.cover,
errorBuilder: (_, _, _) => Container(
width: 300,
color: Theme.of(
context,
).colorScheme.surfaceContainerHighest,
child: const Icon(Icons.broken_image_outlined),
),
),
),
),
@@ -267,36 +288,6 @@ class _ScreenshotsSection extends StatelessWidget {
),
);
}
void _showFullScreenImage(BuildContext context, String url) {
Navigator.of(context).push(
PageRouteBuilder<void>(
opaque: false,
barrierColor: Colors.black87,
pageBuilder: (_, _, _) => _FullScreenImage(url: url),
),
);
}
}
class _FullScreenImage extends StatelessWidget {
final String url;
const _FullScreenImage({required this.url});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.transparent,
body: GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Center(
child: InteractiveViewer(
child: Image.network(url, fit: BoxFit.contain),
),
),
),
);
}
}
class _ExpandableDescription extends HookConsumerWidget {
@@ -311,8 +302,8 @@ class _ExpandableDescription extends HookConsumerWidget {
skipLoadingOnReload: true,
data: (markdown) => MarkdownBody(
data: markdown.isEmpty ? html : markdown,
onTapLink: (_, href, _) {
if (href != null) launchUrl(Uri.parse(href));
onTapLink: (_, href, _) async {
if (href != null) await launchUrl(Uri.parse(href));
},
),
loading: () => Text(html),
@@ -80,7 +80,7 @@ final class DefaultSearchBangProvider
}
}
String _$defaultSearchBangHash() => r'39c5b18231a56763e2c620cae5f2889f7c95f6ee';
String _$defaultSearchBangHash() => r'2da8ec4ccd0da74a7242a83ef4efe53850293116';
@ProviderFor(bangData)
final bangDataProvider = BangDataFamily._();
@@ -24,7 +24,7 @@ import 'package:weblibre/core/logger.dart';
import 'package:weblibre/features/web_feed/presentation/controllers/fetch_articles.dart';
@pragma('vm:entry-point')
Future<void> backgroundFetch(HeadlessTask task) async {
Future<void> backgroundFetch(HeadlessEvent task) async {
final taskId = task.taskId;
final isTimeout = task.timeout;