import 'package:auto_route/auto_route.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shadcn_flutter/shadcn_flutter.dart'; import 'package:spotube/collections/env.dart'; import 'package:spotube/collections/routes.gr.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/modules/getting_started/blur_card.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/pages/mobile_login/hooks/login_callback.dart'; import 'package:spotube/services/kv_store/kv_store.dart'; import 'package:url_launcher/url_launcher_string.dart'; class GettingStartedScreenSupportSection extends HookConsumerWidget { const GettingStartedScreenSupportSection({super.key}); @override Widget build(BuildContext context, ref) { final onLogin = useLoginCallback(ref); return Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ BlurCard( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ const Icon(SpotubeIcons.heartFilled, color: Colors.pink), const SizedBox(width: 8), Text( context.l10n.help_project_grow, style: const TextStyle(color: Colors.pink), ).semiBold(), ], ), const Gap(16), Text(context.l10n.help_project_grow_description), const Gap(16), Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Button( leading: const Icon(SpotubeIcons.github), style: ButtonVariance.primary.copyWith( decoration: (context, states, value) { if (states.isNotEmpty) { return ButtonVariance.primary .decoration(context, states); } return BoxDecoration( color: Colors.black, borderRadius: BorderRadius.circular(8), ); }), onPressed: () async { await launchUrlString( "https://github.com/KRTirtho/spotube", mode: LaunchMode.externalApplication, ); }, child: Text( context.l10n.contribute_on_github, style: const TextStyle(color: Colors.white), ), ), if (!Env.hideDonations) ...[ const Gap(16), Button( leading: const Icon(SpotubeIcons.openCollective), style: ButtonVariance.primary.copyWith( decoration: (context, states, value) { if (states.isNotEmpty) { return ButtonVariance.primary .decoration(context, states); } return BoxDecoration( color: const Color(0xff4cb7f6), borderRadius: BorderRadius.circular(8), ); }), onPressed: () async { await launchUrlString( "https://opencollective.com/spotube", mode: LaunchMode.externalApplication, ); }, child: Text( context.l10n.donate_on_open_collective, style: const TextStyle(color: Colors.white), ), ), ] ], ), ], ), ), const Gap(48), ConstrainedBox( constraints: const BoxConstraints(maxWidth: 250), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Button.secondary( leading: const Icon(SpotubeIcons.anonymous), onPressed: () async { await KVStoreService().setDoneGettingStarted(true); if (context.mounted) { context.navigateTo(const HomeRoute()); } }, child: Text(context.l10n.browse_anonymously), ), const Gap(16), Button.primary( leading: const Icon(SpotubeIcons.spotify), style: ButtonVariance.primary.copyWith( decoration: (context, states, value) { if (states.isNotEmpty) { return ButtonVariance.primary .decoration(context, states); } return BoxDecoration( color: const Color(0xff1db954), borderRadius: BorderRadius.circular(8), ); }, ), onPressed: () async { await KVStoreService().setDoneGettingStarted(true); await onLogin(); }, child: Text( context.l10n.connect_with_spotify, style: const TextStyle(color: Colors.white), ), ), ], ), ), ], ), ); } }