- Flutter app (Android/iOS): home, explore, albums, search, player with equalizer, mini player, sign up/sign in with email codes, profile, encrypted offline downloads, About page - server/: one-command deploy of self-hosted Supabase behind HestiaCP/nginx (or Caddy), migrations, backups, email templates - supabase/migrations: schema, row-level security, profiles - tools/: song scanner and importer Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
83 lines
3.1 KiB
Dart
83 lines
3.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
|
|
import '../../app/theme.dart';
|
|
import '../../shared/widgets/artwork.dart';
|
|
|
|
class SplashScreen extends StatelessWidget {
|
|
const SplashScreen({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final text = Theme.of(context).textTheme;
|
|
return Scaffold(
|
|
body: Stack(
|
|
fit: StackFit.expand,
|
|
children: [
|
|
Image.asset('assets/images/nilgiris_valley.jpg', fit: BoxFit.cover, alignment: const Alignment(0.25, 0)),
|
|
const PhotoScrim(stops: [0.35, 1]),
|
|
DecoratedBox(
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.center,
|
|
colors: [NkColors.ground.withValues(alpha: 0.55), NkColors.ground.withValues(alpha: 0)],
|
|
),
|
|
),
|
|
),
|
|
SafeArea(
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 24),
|
|
child: Column(
|
|
children: [
|
|
const SizedBox(height: 48),
|
|
Container(
|
|
width: 150,
|
|
height: 150,
|
|
decoration: BoxDecoration(
|
|
shape: BoxShape.circle,
|
|
color: NkColors.cream,
|
|
boxShadow: [BoxShadow(color: Colors.black.withValues(alpha: 0.35), blurRadius: 32, offset: const Offset(0, 12))],
|
|
),
|
|
clipBehavior: Clip.antiAlias,
|
|
child: Transform.scale(
|
|
scale: 1.08,
|
|
child: Image.asset('assets/images/emblem.png', semanticLabel: 'Nanga Kathai emblem'),
|
|
),
|
|
),
|
|
const SizedBox(height: 20),
|
|
Text('Nanga Kathai', style: text.headlineLarge?.copyWith(fontSize: 42)),
|
|
const SizedBox(height: 10),
|
|
Text(
|
|
'Our song · music of the\nBadaga people, Nilgiris',
|
|
textAlign: TextAlign.center,
|
|
style: text.titleMedium?.copyWith(height: 1.4, fontWeight: FontWeight.w600),
|
|
),
|
|
const Spacer(),
|
|
SizedBox(
|
|
width: double.infinity,
|
|
height: 58,
|
|
child: FilledButton(
|
|
onPressed: () => context.go('/login?mode=signup'),
|
|
child: const Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [Text('Get Started'), SizedBox(width: 12), Icon(Icons.arrow_forward_rounded)],
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(height: 20),
|
|
const Text(
|
|
'Music · Culture · Our People',
|
|
style: TextStyle(color: NkColors.mutedOnPhoto, fontWeight: FontWeight.w600),
|
|
),
|
|
const SizedBox(height: 24),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|