1
0

routes.dart 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. import 'dart:developer';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_riverpod/flutter_riverpod.dart';
  4. import 'package:go_router/go_router.dart';
  5. import 'package:hive_flutter/hive_flutter.dart';
  6. import 'package:jiffy/jiffy.dart';
  7. import 'package:tp5/authpages/auth_magiclink.dart';
  8. import 'package:tp5/authpages/login_otp.dart';
  9. import 'package:tp5/core/basic_page.dart';
  10. import 'package:tp5/core/utils.dart';
  11. import 'package:tp5/flightslist/flightslist_page.dart';
  12. import 'package:tp5/fltinfo/view/dutyinfo_page.dart';
  13. import 'package:tp5/fltinfo/view/fltinfo_page.dart';
  14. import 'package:tp5/ftl/view/ftl_page.dart';
  15. import 'package:tp5/lido/view/lido_form.dart';
  16. import 'package:tp5/lido/view/lidolist_page.dart';
  17. import 'package:tp5/lido/view/lidoofp_page.dart';
  18. import 'package:tp5/onboarding/onboarding.dart';
  19. import 'package:tp5/pdf/pdf_page.dart';
  20. import 'package:tp5/roster/view/crewlink_form.dart';
  21. import 'package:tp5/roster/view/crewlist_page.dart';
  22. import 'package:tp5/roster/view/roster_page.dart';
  23. import 'package:tp5/rosters/rosters_page.dart';
  24. import 'package:supabase_flutter/supabase_flutter.dart';
  25. import 'package:tp5/settings/settings_page.dart';
  26. final routeProvider = Provider<RouterConfig<Object>?>((ref) {
  27. return _routes;
  28. });
  29. final _routes = GoRouter(
  30. debugLogDiagnostics: false,
  31. redirect: (context, state) {
  32. log("${state.fullPath} | ${state.extra.runtimeType.toString()}",
  33. name: "routes");
  34. // Check app expiration
  35. if (DateTime.now().isAfter(DateTime(2025, 2, 29))) {
  36. return "/expired";
  37. }
  38. // Get current auth state
  39. final session = Supabase.instance.client.auth.currentSession;
  40. final isLoggedIn = session != null;
  41. // List of paths that don't require authentication
  42. final publicPaths = ['/auth/login-otp', '/magic-link', '/auth/signup'];
  43. final isPublicPath = publicPaths.contains(state.fullPath);
  44. // Redirect to login if not authenticated and trying to access protected route
  45. if (!isLoggedIn && !isPublicPath) {
  46. return '/auth/login-otp';
  47. }
  48. // Allow access to public paths even when logged out
  49. if (isPublicPath) {
  50. return null;
  51. }
  52. return null;
  53. },
  54. // initialLocation: '/test',
  55. // initialLocation: '/auth/magiclink',
  56. initialLocation: '/home',
  57. routes: [
  58. GoRoute(
  59. path: '/magic-link',
  60. builder: (BuildContext context, GoRouterState state) {
  61. // Access query parameters here
  62. final token = state.uri.queryParameters['token'];
  63. return AuthMagiclink(token: token);
  64. }),
  65. GoRoute(
  66. path: '/test',
  67. builder: (context, state) => Text("test"),
  68. ),
  69. GoRoute(
  70. path: "/auth",
  71. redirect: (_, state) {
  72. // if
  73. // (state.fullPath != "/crewlink/settings" &&
  74. // (((Hive.box("settings").get("crewlink_user") ?? "") == "") ||
  75. // ((Hive.box("settings").get("crewlink_pass") ?? "") ==
  76. // ""))) {
  77. // return "/crewlink/settings";
  78. // }
  79. return null;
  80. },
  81. routes: [
  82. GoRoute(
  83. path: '/signup',
  84. builder: (BuildContext context, GoRouterState state) {
  85. // Access query parameters here
  86. return Text("signup");
  87. }),
  88. GoRoute(
  89. path: '/login-otp',
  90. builder: (BuildContext context, GoRouterState state) {
  91. // Access query parameters here
  92. final token = state.uri.queryParameters['token'];
  93. return LoginOtp();
  94. }),
  95. ]),
  96. GoRoute(
  97. path: '/expired',
  98. builder: (context, state) => BasicPage(
  99. appBar: AppBar(
  100. automaticallyImplyLeading: false,
  101. title: const Text("TAR Pilot v5"),
  102. ),
  103. drawer: ListView(),
  104. body: const Text("App is Expired please Update")),
  105. ),
  106. GoRoute(
  107. path: '/home',
  108. // redirect: (context, state) => '/crewlink/roster',
  109. redirect: (context, state) => '/crewlink/roster',
  110. ),
  111. GoRoute(
  112. path: '/settings',
  113. builder: (context, state) {
  114. final params = (state.extra as SettingsParams?) ?? SettingsParams();
  115. return SettingsPage(params: params);
  116. },
  117. ),
  118. GoRoute(
  119. path: '/pdf',
  120. builder: (context, state) {
  121. final params = state.extra as PdfPageParams;
  122. return PdfPage(params: params);
  123. },
  124. ),
  125. GoRoute(
  126. path: '/rosters',
  127. builder: (context, state) {
  128. return const RostersPage();
  129. },
  130. ),
  131. GoRoute(
  132. path: '/flightslist',
  133. builder: (context, state) {
  134. return const FlightslistPage();
  135. },
  136. ),
  137. GoRoute(
  138. path: '/ftl',
  139. builder: (context, state) {
  140. final params = (state.extra as FtlPageParams?) ?? const FtlPageParams();
  141. return FtlPage(params: params);
  142. },
  143. ),
  144. GoRoute(
  145. path: '/fltinfo',
  146. builder: (context, state) {
  147. final params = (state.extra as FltinfoParams?) ?? const FltinfoParams();
  148. return FltinfoPage(params: params);
  149. },
  150. ),
  151. GoRoute(
  152. path: '/dutyinfo',
  153. builder: (context, state) {
  154. final params =
  155. (state.extra as DutyinfoParams?) ?? const DutyinfoParams();
  156. return DutyinfoPage(params: params);
  157. },
  158. ),
  159. GoRoute(
  160. path: "/lido",
  161. redirect: (_, state) {
  162. // log(state.fullPath.toString());
  163. if
  164. // (["/crewlink/roster"].contains(state.uri.toString())&&
  165. (state.fullPath != "/lido/settings" &&
  166. (((Hive.box("settings").get("lido_user") ?? "") == "") ||
  167. ((Hive.box("settings").get("lido_pass") ?? "") == ""))) {
  168. return "/lido/settings";
  169. }
  170. return null;
  171. },
  172. routes: [
  173. GoRoute(
  174. name: "lido.list",
  175. path: 'list',
  176. builder: (context, state) {
  177. final params = (state.extra as LidolistPageParams?) ??
  178. const LidolistPageParams();
  179. return LidolistPage(params: params);
  180. }),
  181. GoRoute(
  182. name: "lido.ofp",
  183. path: 'ofp',
  184. builder: (context, state) {
  185. final params = (state.extra as LidoofpPageParams?) ??
  186. const LidoofpPageParams();
  187. return LidoofpPage(params: params);
  188. }),
  189. GoRoute(
  190. path: 'settings', builder: (context, state) => const LidoForm()),
  191. ]),
  192. GoRoute(
  193. path: "/crewlink",
  194. redirect: (_, state) {
  195. // log(state.fullPath.toString());
  196. if
  197. // (["/crewlink/roster"].contains(state.uri.toString())&&
  198. (state.fullPath != "/crewlink/settings" &&
  199. (((Hive.box("settings").get("crewlink_user") ?? "") == "") ||
  200. ((Hive.box("settings").get("crewlink_pass") ?? "") ==
  201. ""))) {
  202. return "/crewlink/settings";
  203. }
  204. return null;
  205. },
  206. routes: [
  207. GoRoute(
  208. name: "crewlink.roster",
  209. path: 'roster',
  210. builder: (context, state) {
  211. final params = (state.extra as RosterPageParams?) ??
  212. const RosterPageParams();
  213. return RosterPage(
  214. params: RosterPageParams(
  215. datestart: params.datestart ??
  216. Jiffy.now()
  217. .toUtc()
  218. .startOf(Unit.month)
  219. // .subtract(days: 30)
  220. .format(pattern: "ddMMMyy"),
  221. dateend: params.dateend ??
  222. Jiffy.now()
  223. .toUtc()
  224. .endOf(Unit.month)
  225. .format(pattern: "ddMMMyy"),
  226. crewlinkuser: params.crewlinkuser ??
  227. Hive.box("settings").get("crewlink_user") ??
  228. "",
  229. crewlinkpass: params.crewlinkpass ??
  230. Hive.box("settings").get("crewlink_pass") ??
  231. ""),
  232. );
  233. }),
  234. GoRoute(
  235. name: "crewlink.crewlist",
  236. path: 'crewlist',
  237. builder: (context, state) {
  238. final params = (state.extra as CrewlistPageParams?) ??
  239. const CrewlistPageParams();
  240. print(
  241. "${params.datestart} ${params.dateend} ${params.al} ${params.fnum} ${params.dep} ${params.des}");
  242. return CrewlistPage(
  243. params: CrewlistPageParams(
  244. datestart: params.datestart ?? //"04Dec23",
  245. Jiffy.now()
  246. .toUtc()
  247. //.subtract(days: 1)
  248. .format(pattern: "ddMMMyy"),
  249. dateend: params.dateend ?? //"05Dec23",
  250. params.datestart ??
  251. Jiffy.now().toUtc().format(pattern: "ddMMMyy"),
  252. al: params.al ?? "",
  253. fnum: params.fnum ?? "",
  254. dep: params.dep ?? "",
  255. des: params.des ?? "",
  256. crewlinkuser: params.crewlinkuser ??
  257. Hive.box("settings").get("crewlink_user") ??
  258. "",
  259. crewlinkpass: params.crewlinkpass ??
  260. Hive.box("settings").get("crewlink_pass") ??
  261. ""),
  262. );
  263. }),
  264. GoRoute(
  265. path: 'settings',
  266. builder: (context, state) => const CrewlinkForm()),
  267. ])
  268. ],
  269. );