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) { if (trimmed.isEmpty) {
return ref.watch(featuredAddonListingsProvider(app).future); return ref.watch(featuredAddonListingsProvider(app).future);
} }
return ref.read(addonServiceProvider).searchAddonListings( return ref
query: trimmed, .read(addonServiceProvider)
app: app, .searchAddonListings(query: trimmed, app: app);
);
} }
@Riverpod(keepAlive: true) @Riverpod(keepAlive: true)
class AddonStoreAppFilter extends _$AddonStoreAppFilter { class AddonStoreAppFilter extends _$AddonStoreAppFilter {
// ignore: use_setters_to_change_properties
void setApp(AddonStoreApp app) => state = app; void setApp(AddonStoreApp app) => state = app;
@override @override
@@ -589,9 +589,9 @@ class _DescriptionCard extends ConsumerWidget {
: MarkdownBody( : MarkdownBody(
data: markdown, data: markdown,
selectable: true, selectable: true,
onTapLink: (text, href, title) { onTapLink: (text, href, title) async {
if (href != null && href.isNotEmpty) { 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) { itemBuilder: (context, index) {
final p = previews[index]; final p = previews[index];
return GestureDetector( 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( child: ClipRRect(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
child: Image.network( child: Hero(
p.thumbnailUrl ?? p.imageUrl, tag: p.imageUrl,
fit: BoxFit.cover, child: Image.network(
errorBuilder: (_, _, _) => Container( p.thumbnailUrl ?? p.imageUrl,
width: 300, fit: BoxFit.cover,
color: Theme.of(context).colorScheme.surfaceContainerHighest, errorBuilder: (_, _, _) => Container(
child: const Icon(Icons.broken_image_outlined), 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 { class _ExpandableDescription extends HookConsumerWidget {
@@ -311,8 +302,8 @@ class _ExpandableDescription extends HookConsumerWidget {
skipLoadingOnReload: true, skipLoadingOnReload: true,
data: (markdown) => MarkdownBody( data: (markdown) => MarkdownBody(
data: markdown.isEmpty ? html : markdown, data: markdown.isEmpty ? html : markdown,
onTapLink: (_, href, _) { onTapLink: (_, href, _) async {
if (href != null) launchUrl(Uri.parse(href)); if (href != null) await launchUrl(Uri.parse(href));
}, },
), ),
loading: () => Text(html), loading: () => Text(html),
@@ -80,7 +80,7 @@ final class DefaultSearchBangProvider
} }
} }
String _$defaultSearchBangHash() => r'39c5b18231a56763e2c620cae5f2889f7c95f6ee'; String _$defaultSearchBangHash() => r'2da8ec4ccd0da74a7242a83ef4efe53850293116';
@ProviderFor(bangData) @ProviderFor(bangData)
final bangDataProvider = BangDataFamily._(); final bangDataProvider = BangDataFamily._();
@@ -24,7 +24,7 @@ import 'package:weblibre/core/logger.dart';
import 'package:weblibre/features/web_feed/presentation/controllers/fetch_articles.dart'; import 'package:weblibre/features/web_feed/presentation/controllers/fetch_articles.dart';
@pragma('vm:entry-point') @pragma('vm:entry-point')
Future<void> backgroundFetch(HeadlessTask task) async { Future<void> backgroundFetch(HeadlessEvent task) async {
final taskId = task.taskId; final taskId = task.taskId;
final isTimeout = task.timeout; final isTimeout = task.timeout;