Add Supa account and search changes

This commit is contained in:
Fabian Freund
2026-05-22 18:10:22 +02:00
parent 3a19865b2e
commit 51289f1266
374 changed files with 54061 additions and 5013 deletions
@@ -242,47 +242,53 @@ class _ScreenshotsSection extends StatelessWidget {
Widget build(BuildContext context) {
return SizedBox(
height: 200,
child: ListView.separated(
scrollDirection: Axis.horizontal,
itemCount: previews.length,
separatorBuilder: (_, _) => const SizedBox(width: 12),
itemBuilder: (context, index) {
final p = previews[index];
return GestureDetector(
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: FadingScroll(
fadingSize: 15,
builder: (context, controller) {
return ListView.separated(
controller: controller,
scrollDirection: Axis.horizontal,
itemCount: previews.length,
separatorBuilder: (_, _) => const SizedBox(width: 12),
itemBuilder: (context, index) {
final p = previews[index];
return GestureDetector(
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: 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),
child: ClipRRect(
borderRadius: BorderRadius.circular(8),
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),
),
),
),
),
),
),
);
},
);
},
),
@@ -86,8 +86,6 @@ class AddonManagerScreen extends ConsumerWidget {
}
}
enum _AddonManagerMenuAction { checkForUpdates, installFromFile }
class _AddonManagerOverflowMenu extends ConsumerWidget {
final bool canCheckForUpdates;
@@ -99,44 +97,39 @@ class _AddonManagerOverflowMenu extends ConsumerWidget {
bulkAddonUpdateProvider.select((value) => value.isLoading),
);
return PopupMenuButton<_AddonManagerMenuAction>(
icon: updatesBusy
? const SizedBox(
width: 18,
height: 18,
child: CircularProgressIndicator(strokeWidth: 2),
)
: const Icon(Icons.more_vert),
onSelected: (action) async {
switch (action) {
case _AddonManagerMenuAction.checkForUpdates:
await ref.read(bulkAddonUpdateProvider.notifier).triggerAll();
if (!context.mounted) return;
showInfoMessage(
context,
'Background update checks started for installed extensions',
);
case _AddonManagerMenuAction.installFromFile:
await showInstallLocalAddonDialog(context);
}
},
itemBuilder: (context) => [
PopupMenuItem(
value: _AddonManagerMenuAction.checkForUpdates,
enabled: canCheckForUpdates && !updatesBusy,
child: const ListTile(
leading: Icon(Icons.system_update_alt),
title: Text('Check for updates'),
contentPadding: EdgeInsets.zero,
),
return MenuAnchor(
builder: (context, controller, _) => IconButton(
icon: updatesBusy
? const SizedBox(
width: 18,
height: 18,
child: CircularProgressIndicator(strokeWidth: 2),
)
: const Icon(Icons.more_vert),
onPressed: () =>
controller.isOpen ? controller.close() : controller.open(),
),
menuChildren: [
MenuItemButton(
leadingIcon: const Icon(Icons.system_update_alt),
onPressed: canCheckForUpdates && !updatesBusy
? () async {
await ref.read(bulkAddonUpdateProvider.notifier).triggerAll();
if (!context.mounted) return;
showInfoMessage(
context,
'Background update checks started for installed extensions',
);
}
: null,
child: const Text('Check for updates'),
),
const PopupMenuItem(
value: _AddonManagerMenuAction.installFromFile,
child: ListTile(
leading: Icon(Icons.file_open),
title: Text('Install from file'),
contentPadding: EdgeInsets.zero,
),
MenuItemButton(
leadingIcon: const Icon(Icons.file_open),
onPressed: () async {
await showInstallLocalAddonDialog(context);
},
child: const Text('Install from file'),
),
],
);