flutter-vienna-hackathon-25/wien_talks/wien_talks_flutter/lib/helper/go_router.dart
2025-08-17 09:07:14 +02:00

51 lines
1.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:wien_talks_client/wien_talks_client.dart';
import 'package:wien_talks_flutter/screens/create_event_screen.dart';
import 'package:wien_talks_flutter/screens/news_screen.dart';
double? _qpDouble(GoRouterState s, String key) {
final v = s.uri.queryParameters[key];
return v == null || v.isEmpty ? null : double.tryParse(v);
}
final router = GoRouter(
initialLocation: '/',
routes: [
GoRoute(
path: '/',
name: 'news',
builder: (c, s) => NewsScreen(),
),
GoRoute(
path: '/create_event',
name: 'create_event',
pageBuilder: (c, s) {
final quote = s.extra as Quote?;
final lat = _qpDouble(s, 'lat');
final lon = _qpDouble(s, 'lon');
return CustomTransitionPage(
key: s.pageKey,
child: CreateEventScreen(
contextQuote: quote,
initialLat: lat,
initialLon: lon,
),
transitionsBuilder: (context, anim, secAnim, child) {
final curve =
CurvedAnimation(parent: anim, curve: Curves.easeOutCubic);
return FadeTransition(
opacity: curve,
child: SlideTransition(
position: Tween(begin: const Offset(0, 0.08), end: Offset.zero)
.animate(curve),
child: child,
),
);
},
);
},
),
],
);