Files
yanting/lib/routing/app_routes.dart
T
2026-06-05 15:04:39 +08:00

86 lines
2.2 KiB
Dart

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 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),
);
}