fix:优化使用常用技术框架
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
import '../data/providers.dart';
|
||||
import '../features/detail/report_detail_page.dart';
|
||||
import '../features/feed/feed_page.dart';
|
||||
import '../features/institutions/institution_detail_page.dart';
|
||||
import '../features/institutions/institutions_page.dart';
|
||||
import '../features/listen/listen_page.dart';
|
||||
import '../features/profile/profile_page.dart';
|
||||
import '../features/reports/reports_page.dart';
|
||||
import '../features/shell_page.dart';
|
||||
import '../theme/wise_tokens.dart';
|
||||
import 'app_routes.dart';
|
||||
|
||||
final routerProvider = Provider<GoRouter>((ref) {
|
||||
final dataSource = ref.read(reportDataSourceProvider);
|
||||
|
||||
return GoRouter(
|
||||
initialLocation: AppRoutes.home,
|
||||
routes: [
|
||||
ShellRoute(
|
||||
builder: (context, state, child) =>
|
||||
ShellPage(currentPath: state.matchedLocation, child: child),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: AppRoutes.home,
|
||||
builder: (context, state) => _TabSurface(
|
||||
child: Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final player = ref.watch(audioPlayerControllerProvider);
|
||||
final controller = ref.read(
|
||||
audioPlayerControllerProvider.notifier,
|
||||
);
|
||||
return FeedPage(
|
||||
dataSource: dataSource,
|
||||
onPlay: controller.startFromItem,
|
||||
player: player,
|
||||
onStartModuleAudio: controller.startModuleAudio,
|
||||
onToggleAudio: controller.toggleAudio,
|
||||
onSeekAudio: controller.seekAudio,
|
||||
onSpeed: controller.cycleSpeed,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.reports,
|
||||
builder: (context, state) => _TabSurface(
|
||||
child: Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final player = ref.watch(audioPlayerControllerProvider);
|
||||
final controller = ref.read(
|
||||
audioPlayerControllerProvider.notifier,
|
||||
);
|
||||
return ReportsPage(
|
||||
dataSource: dataSource,
|
||||
onPlay: controller.startFromItem,
|
||||
player: player,
|
||||
onStartModuleAudio: controller.startModuleAudio,
|
||||
onToggleAudio: controller.toggleAudio,
|
||||
onSeekAudio: controller.seekAudio,
|
||||
onSpeed: controller.cycleSpeed,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.institutions,
|
||||
builder: (context, state) =>
|
||||
_TabSurface(child: InstitutionsPage(dataSource: dataSource)),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.listen,
|
||||
builder: (context, state) => _TabSurface(
|
||||
child: Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final controller = ref.read(
|
||||
audioPlayerControllerProvider.notifier,
|
||||
);
|
||||
return ListenPage(
|
||||
dataSource: dataSource,
|
||||
onPlay: controller.startFromItem,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.profile,
|
||||
builder: (context, state) =>
|
||||
_TabSurface(child: ProfilePage(dataSource: dataSource)),
|
||||
),
|
||||
],
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.reportDetail,
|
||||
builder: (context, state) {
|
||||
final id = state.pathParameters['id'] ?? '';
|
||||
final args = state.extra as ReportDetailRouteArgs?;
|
||||
return Consumer(
|
||||
builder: (context, ref, _) {
|
||||
final player = ref.watch(audioPlayerControllerProvider);
|
||||
final controller = ref.read(
|
||||
audioPlayerControllerProvider.notifier,
|
||||
);
|
||||
return ReportDetailPage(
|
||||
reportId: id,
|
||||
dataSource: args?.dataSource ?? dataSource,
|
||||
player: player,
|
||||
onStartAudio: args?.onStartAudio ?? controller.startModuleAudio,
|
||||
onToggleAudio: args?.onToggleAudio ?? controller.toggleAudio,
|
||||
onSeekAudio: args?.onSeekAudio ?? controller.seekAudio,
|
||||
onSpeed: args?.onSpeed ?? controller.cycleSpeed,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
GoRoute(
|
||||
path: AppRoutes.institutionDetail,
|
||||
builder: (context, state) {
|
||||
final id = state.pathParameters['id'] ?? '';
|
||||
final args = state.extra as InstitutionDetailRouteArgs?;
|
||||
return InstitutionDetailPage(
|
||||
institutionId: id,
|
||||
dataSource: args?.dataSource ?? dataSource,
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
class _TabSurface extends StatelessWidget {
|
||||
const _TabSurface({required this.child});
|
||||
|
||||
final Widget child;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ColoredBox(color: WiseColors.canvas, child: child);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user