import 'dart:async';
import 'package:flutter/material.dart';
import '../../models/ad_campaign.dart';
import '../../core/navigation/deep_link.dart';
import '../../data/app_data_scope.dart';
import '../../services/settings_service.dart';
import '../../services/analytics_service.dart';
import '../ads/sponsor_interstitial_page.dart';
import '../shell/main_shell.dart';
/// MeinWeimar brand splash shown before the optional sponsor interstitial.
class SplashPage extends StatefulWidget {
const SplashPage(
{super.key, required this.settings, required this.initialDeepLink});
final SettingsService settings;
final DeepLink initialDeepLink;
@override
State<SplashPage> createState() => _SplashPageState();
}
class _SplashPageState extends State<SplashPage> {
Timer? _timer;
@override
void initState() {
super.initState();
AnalyticsService.instance.screenView('splash');
_timer = Timer(const Duration(milliseconds: 1350), _continueAfterBranding);
}
Future<void> _continueAfterBranding() async {
final store = AppDataScope.read(context);
final languageCode = widget.settings.locale.languageCode;
// Load sponsor data independently from the main content request.
final AdCampaign? sponsorCampaign =
await store.loadSponsorInterstitial(languageCode: languageCode).timeout(
const Duration(seconds: 6),
onTimeout: () => null,
);
final showSponsor = sponsorCampaign != null &&
await widget.settings.shouldShowSponsorInterstitial(
sponsorCampaign.id,
sponsorCampaign.frequencyHours,
);
if (!mounted) return;
if (showSponsor) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (_) => SponsorInterstitialPage(
settings: widget.settings,
campaign: sponsorCampaign,
initialDeepLink: widget.initialDeepLink,
),
),
);
return;
}
_enterApp();
}
void _enterApp() {
if (!mounted) return;
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (_) => MainShell(
settings: widget.settings,
initialDeepLink: widget.initialDeepLink)),
);
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return const Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: Center(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 54),
child: Image(
image: AssetImage(
'assets/branding/meinweimar_tourguide_app_icon.png',
),
width: 300,
fit: BoxFit.contain,
),
),
),
),
);
}
}

