Files
flutter/lib/app/router/app_router.dart
T
Ruslan Bakiev e641837815
Build and deploy Flutter Web / build (push) Successful in 2m30s
Launch add review through URL route params
2026-06-13 00:46:55 +07:00

89 lines
2.6 KiB
Dart

import 'package:flutter/widgets.dart';
import 'package:go_router/go_router.dart';
import 'package:latlong2/latlong.dart';
import '../../features/mapflow/presentation/admin_voice_experiences_screen.dart';
import '../../features/mapflow/presentation/mapflow_shell.dart';
class MapflowRoutes {
const MapflowRoutes._();
static const home = '/';
static const addExperience = '/experience/new';
static const adminReviews = '/admin/reviews';
static String addExperienceLocation({
required LatLng? coordinate,
required bool hasTelegramAuth,
}) {
return Uri(
path: addExperience,
queryParameters: {
'telegramAuth': hasTelegramAuth ? '1' : '0',
if (coordinate != null) ...{
'lat': coordinate.latitude.toString(),
'lng': coordinate.longitude.toString(),
},
},
).toString();
}
}
GoRouter createAppRouter() {
return GoRouter(
errorBuilder: (context, state) => const MapflowShell(),
routes: [
GoRoute(
path: MapflowRoutes.home,
builder: (context, state) => const MapflowShell(),
),
GoRoute(
path: MapflowRoutes.addExperience,
pageBuilder: (context, state) {
final queryParameters = state.uri.queryParameters;
return CustomTransitionPage<void>(
fullscreenDialog: true,
key: state.pageKey,
child: AddExperienceFlow(
coordinate: _coordinateFromQuery(queryParameters),
hasTelegramAuth: queryParameters['telegramAuth'] != '0',
),
transitionsBuilder: (context, animation, _, child) {
return SlideTransition(
position: Tween<Offset>(
begin: const Offset(0, 1),
end: Offset.zero,
).animate(animation),
child: child,
);
},
);
},
),
GoRoute(
path: MapflowRoutes.adminReviews,
builder: (context, state) => const AdminVoiceExperiencesScreen(),
),
],
);
}
LatLng? _coordinateFromQuery(Map<String, String> queryParameters) {
final lat = queryParameters['lat'];
final lng = queryParameters['lng'];
if (lat == null && lng == null) {
return null;
}
if (lat == null || lng == null) {
throw StateError('Both lat and lng query parameters are required.');
}
final latitude = double.parse(lat);
final longitude = double.parse(lng);
if (!latitude.isFinite || !longitude.isFinite) {
throw StateError('Review coordinate query parameters must be finite.');
}
return LatLng(latitude, longitude);
}