router.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import 'package:appflowy/startup/startup.dart';
  2. import 'package:appflowy/user/application/auth/auth_service.dart';
  3. import 'package:appflowy/user/presentation/sign_in_screen.dart';
  4. import 'package:appflowy/user/presentation/sign_up_screen.dart';
  5. import 'package:appflowy/user/presentation/skip_log_in_screen.dart';
  6. import 'package:appflowy/user/presentation/welcome_screen.dart';
  7. import 'package:appflowy/workspace/presentation/home/home_screen.dart';
  8. import 'package:appflowy_backend/dispatch/dispatch.dart';
  9. import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
  10. import 'package:flowy_infra/time/duration.dart';
  11. import 'package:flowy_infra_ui/widget/route/animation.dart';
  12. import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'
  13. show UserProfilePB;
  14. import 'package:appflowy_backend/protobuf/flowy-folder2/protobuf.dart';
  15. import 'package:flutter/material.dart';
  16. import 'encrypt_secret_screen.dart';
  17. import 'workspace_error_screen.dart';
  18. const routerNameRoot = '/';
  19. const routerNameSignUp = '/signUp';
  20. const routerNameSignIn = '/signIn';
  21. const routerNameSkipLogIn = '/skipLogIn';
  22. const routerNameWelcome = '/welcome';
  23. const routerNameHome = '/home';
  24. class AuthRouter {
  25. void pushForgetPasswordScreen(BuildContext context) {}
  26. void pushWelcomeScreen(BuildContext context, UserProfilePB userProfile) {
  27. getIt<SplashRoute>().pushWelcomeScreen(context, userProfile);
  28. }
  29. void pushSignUpScreen(BuildContext context) {
  30. Navigator.of(context).push(
  31. PageRoutes.fade(
  32. () => SignUpScreen(router: getIt<AuthRouter>()),
  33. const RouteSettings(name: routerNameSignUp),
  34. ),
  35. );
  36. }
  37. void pushHomeScreenWithWorkSpace(
  38. BuildContext context,
  39. UserProfilePB profile,
  40. WorkspaceSettingPB workspaceSetting,
  41. ) {
  42. Navigator.push(
  43. context,
  44. PageRoutes.fade(
  45. () => HomeScreen(
  46. profile,
  47. workspaceSetting,
  48. key: ValueKey(profile.id),
  49. ),
  50. const RouteSettings(name: routerNameHome),
  51. RouteDurations.slow.inMilliseconds * .001,
  52. ),
  53. );
  54. }
  55. Future<void> pushHomeScreen(
  56. BuildContext context,
  57. UserProfilePB userProfile,
  58. ) async {
  59. final result = await FolderEventGetCurrentWorkspace().send();
  60. result.fold(
  61. (workspaceSettingPB) => pushHomeScreenWithWorkSpace(
  62. context,
  63. userProfile,
  64. workspaceSettingPB,
  65. ),
  66. (r) => pushWelcomeScreen(context, userProfile),
  67. );
  68. }
  69. Future<void> pushEncryptionScreen(
  70. BuildContext context,
  71. UserProfilePB userProfile,
  72. ) async {
  73. Navigator.push(
  74. context,
  75. PageRoutes.fade(
  76. () => EncryptSecretScreen(
  77. user: userProfile,
  78. key: ValueKey(userProfile.id),
  79. ),
  80. const RouteSettings(name: routerNameWelcome),
  81. RouteDurations.slow.inMilliseconds * .001,
  82. ),
  83. );
  84. }
  85. Future<void> pushWorkspaceErrorScreen(
  86. BuildContext context,
  87. UserFolderPB userFolder,
  88. FlowyError error,
  89. ) async {
  90. final screen = WorkspaceErrorScreen(
  91. userFolder: userFolder,
  92. error: error,
  93. );
  94. await Navigator.of(context).push(
  95. PageRoutes.fade(
  96. () => screen,
  97. const RouteSettings(name: routerNameWelcome),
  98. RouteDurations.slow.inMilliseconds * .001,
  99. ),
  100. );
  101. }
  102. }
  103. class SplashRoute {
  104. Future<void> pushWelcomeScreen(
  105. BuildContext context,
  106. UserProfilePB userProfile,
  107. ) async {
  108. final screen = WelcomeScreen(userProfile: userProfile);
  109. await Navigator.of(context).push(
  110. PageRoutes.fade(
  111. () => screen,
  112. const RouteSettings(name: routerNameWelcome),
  113. RouteDurations.slow.inMilliseconds * .001,
  114. ),
  115. );
  116. FolderEventGetCurrentWorkspace().send().then((result) {
  117. result.fold(
  118. (workspaceSettingPB) =>
  119. pushHomeScreen(context, userProfile, workspaceSettingPB),
  120. (r) => null,
  121. );
  122. });
  123. }
  124. void pushHomeScreen(
  125. BuildContext context,
  126. UserProfilePB userProfile,
  127. WorkspaceSettingPB workspaceSetting,
  128. ) {
  129. Navigator.push(
  130. context,
  131. PageRoutes.fade(
  132. () => HomeScreen(
  133. userProfile,
  134. workspaceSetting,
  135. key: ValueKey(userProfile.id),
  136. ),
  137. const RouteSettings(name: routerNameWelcome),
  138. RouteDurations.slow.inMilliseconds * .001,
  139. ),
  140. );
  141. }
  142. void pushSignInScreen(BuildContext context) {
  143. Navigator.push(
  144. context,
  145. PageRoutes.fade(
  146. () => SignInScreen(router: getIt<AuthRouter>()),
  147. const RouteSettings(name: routerNameSignIn),
  148. RouteDurations.slow.inMilliseconds * .001,
  149. ),
  150. );
  151. }
  152. void pushSkipLoginScreen(BuildContext context) {
  153. Navigator.push(
  154. context,
  155. PageRoutes.fade(
  156. () => SkipLogInScreen(
  157. router: getIt<AuthRouter>(),
  158. authService: getIt<AuthService>(),
  159. ),
  160. const RouteSettings(name: routerNameSkipLogIn),
  161. RouteDurations.slow.inMilliseconds * .001,
  162. ),
  163. );
  164. }
  165. }