import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../data/api/report_data_source.dart'; import '../data/models/models.dart'; import '../widgets/mini_player.dart'; abstract final class AppRoutes { static const home = '/'; static const homeFeed = '/feed'; static const reports = '/reports'; static const institutions = '/institutions'; static const listen = '/listen'; static const profile = '/profile'; static const login = '/login'; static const settings = '/settings'; static const reportDetail = '/reports/:id'; static const institutionDetail = '/institutions/:id'; static String reportDetailPath(String id) => '/reports/$id'; static String institutionDetailPath(String id) => '/institutions/$id'; } class ReportDetailRouteArgs { const ReportDetailRouteArgs({ required this.dataSource, required this.player, required this.onStartAudio, required this.onToggleAudio, required this.onSeekAudio, required this.onSpeed, }); final ReportDataSource dataSource; final PlayerStateModel player; final void Function( String audioId, String reportId, String title, int durationSec, )? onStartAudio; final VoidCallback? onToggleAudio; final void Function(int delta)? onSeekAudio; final VoidCallback? onSpeed; } class InstitutionDetailRouteArgs { const InstitutionDetailRouteArgs({required this.dataSource}); final ReportDataSource dataSource; } void openReportDetail( BuildContext context, ReportDataSource dataSource, ReportCardModel report, { PlayerStateModel player = const PlayerStateModel(), void Function(String audioId, String reportId, String title, int durationSec)? onStartAudio, VoidCallback? onToggleAudio, void Function(int delta)? onSeekAudio, VoidCallback? onSpeed, }) { context.push( AppRoutes.reportDetailPath(report.id), extra: ReportDetailRouteArgs( dataSource: dataSource, player: player, onStartAudio: onStartAudio, onToggleAudio: onToggleAudio, onSeekAudio: onSeekAudio, onSpeed: onSpeed, ), ); } void openInstitutionDetail( BuildContext context, ReportDataSource dataSource, String institutionId, ) { context.push( AppRoutes.institutionDetailPath(institutionId), extra: InstitutionDetailRouteArgs(dataSource: dataSource), ); }