Files
zhinian_manage/lib/router.dart

128 lines
3.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'providers/auth_provider.dart';
import 'pages/login_page.dart';
import 'pages/home_page.dart';
import 'pages/event_publish_page.dart';
import 'pages/event_list_page.dart';
import 'pages/order_work_page.dart';
import 'pages/work_order_detail_page.dart';
import 'pages/order_detail_page.dart';
import 'pages/scan_result_page.dart';
import 'pages/settings_page.dart';
import 'pages/employee_page.dart';
import 'pages/store_page.dart';
import 'pages/report_page.dart';
import 'pages/app_market_page.dart';
import 'pages/help_page.dart';
import 'pages/about_page.dart';
import 'pages/policy_page.dart';
import 'pages/system_messages_page.dart';
final routerProvider = Provider<GoRouter>((ref) {
final authState = ref.watch(authProvider);
return GoRouter(
initialLocation: '/login',
redirect: (context, state) {
final isLoggedIn = authState.isLoggedIn;
final loc = state.matchedLocation;
final isPublicRoute = loc == '/login' || loc == '/settings/policy';
if (!isLoggedIn && !isPublicRoute) {
return '/login';
}
if (isLoggedIn && loc == '/login') {
return '/home';
}
return null;
},
routes: [
GoRoute(
path: '/login',
builder: (context, state) => const LoginPage(),
),
GoRoute(
path: '/home',
builder: (context, state) => const HomePage(),
),
GoRoute(
path: '/event/publish',
builder: (context, state) => const EventPublishPage(),
),
GoRoute(
path: '/event/list',
builder: (context, state) => const EventListPage(),
),
GoRoute(
path: '/order-work',
builder: (context, state) {
final tab = state.uri.queryParameters['tab'] ?? 'work';
return OrderWorkPage(initialTab: tab);
},
),
GoRoute(
path: '/work-order/:id',
builder: (context, state) {
final id = state.pathParameters['id']!;
return WorkOrderDetailPage(orderId: id);
},
),
GoRoute(
path: '/order/:id',
builder: (context, state) {
final id = state.pathParameters['id']!;
return OrderDetailPage(orderId: id);
},
),
GoRoute(
path: '/scan-result',
builder: (context, state) {
final code = state.uri.queryParameters['code'] ?? '';
return ScanResultPage(scanCode: code);
},
),
GoRoute(
path: '/messages',
builder: (context, state) => const SystemMessagesPage(),
),
GoRoute(
path: '/settings',
builder: (context, state) => const SettingsPage(),
),
GoRoute(
path: '/settings/employees',
builder: (context, state) => const EmployeePage(),
),
GoRoute(
path: '/settings/store',
builder: (context, state) => const StorePage(),
),
GoRoute(
path: '/settings/report',
builder: (context, state) => const ReportPage(),
),
GoRoute(
path: '/settings/app-market',
builder: (context, state) => const AppMarketPage(),
),
GoRoute(
path: '/settings/help',
builder: (context, state) => const HelpPage(),
),
GoRoute(
path: '/settings/about',
builder: (context, state) => const AboutPage(),
),
GoRoute(
path: '/settings/policy',
builder: (context, state) {
final type = state.uri.queryParameters['type'] ?? 'agreement';
return PolicyPage(type: type);
},
),
],
);
});