86 lines
2.2 KiB
Dart
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),
|
|
);
|
|
}
|