lib/splash_screen.dartDart
import 'package:flutter/material.dart';
import 'package:meinweimar_box__nativ/constants.dart';
import 'package:meinweimar_box__nativ/main.dart'; // Wichtig für MainNavigation
class SplashScreen extends StatefulWidget {
const SplashScreen({super.key});
@override
State<SplashScreen> createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _fadeIn;
late Animation<double> _scale;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 2000), // Etwas knackiger auf 2 Sek
);
_fadeIn = Tween<double>(begin: 0.0, end: 1.0).animate(
CurvedAnimation(
parent: _controller,
curve: const Interval(0.0, 0.6, curve: Curves.easeIn),
),
);
_scale = Tween<double>(begin: 0.85, end: 1.0).animate(
CurvedAnimation(
parent: _controller,
curve: const Interval(0.0, 0.6, curve: Curves.easeOutBack),
),
);
_controller.forward();
// Wechsel zur MainNavigation nach Ablauf der Animation + kleiner Puffer
Future.delayed(const Duration(milliseconds: 2800), () {
if (mounted) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => const MainNavigation()),
);
}
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppConstants.baseWhite, // Immer Weiß laut Brand-Vorgabe
body: Stack(
children: [
Center(
child: FadeTransition(
opacity: _fadeIn,
child: ScaleTransition(
scale: _scale,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// Dein Logo aus dem Assets-Pfad
Image.asset(
'assets/MeinWeimar_Black.png',
width: MediaQuery.of(context).size.width * 0.5,
fit: BoxFit.contain,
),
const SizedBox(height: 10),
// Dein Projekt-Name in Brand-Farbe #F92367
const Text(
"rettertüte",
style: TextStyle(
color: AppConstants.mainColor,
fontSize: 26,
fontWeight: FontWeight.w300,
letterSpacing: 6,
),
),
],
),
),
),
),
// Slogan unten fixiert in #454545
Positioned(
bottom: 60,
left: 0,
right: 0,
child: FadeTransition(
opacity: _fadeIn,
child: const Text(
"DEINE STADT. DEINE CHANCE.\nRETTE LEBENSMITTEL.",
textAlign: TextAlign.center,
style: TextStyle(
color: AppConstants.fontGrey,
fontSize: 11,
fontWeight: FontWeight.bold,
letterSpacing: 2.0,
),
),
),
),
],
),
);
}
}