128 lines
3.7 KiB
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);
|
|
},
|
|
),
|
|
],
|
|
);
|
|
});
|