2023-09-12 02:32:26 +00:00
|
|
|
import 'package:appflowy/mobile/presentation/mobile_home_page.dart';
|
2023-02-26 08:27:17 +00:00
|
|
|
import 'package:appflowy/startup/startup.dart';
|
2023-05-21 10:53:59 +00:00
|
|
|
import 'package:appflowy/user/application/auth/auth_service.dart';
|
2023-09-12 02:32:26 +00:00
|
|
|
import 'package:appflowy/user/presentation/screens/screens.dart';
|
|
|
|
import 'package:appflowy/user/presentation/screens/workspace_start_screen/workspace_start_screen.dart';
|
2023-02-26 08:27:17 +00:00
|
|
|
import 'package:appflowy/workspace/presentation/home/home_screen.dart';
|
2023-01-12 14:31:39 +00:00
|
|
|
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
2023-08-21 16:19:15 +00:00
|
|
|
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
|
2021-11-08 11:19:02 +00:00
|
|
|
import 'package:flowy_infra/time/duration.dart';
|
2021-07-25 14:09:52 +00:00
|
|
|
import 'package:flowy_infra_ui/widget/route/animation.dart';
|
2023-01-08 04:10:53 +00:00
|
|
|
import 'package:appflowy_backend/protobuf/flowy-user/protobuf.dart'
|
|
|
|
show UserProfilePB;
|
2023-04-04 00:41:16 +00:00
|
|
|
import 'package:appflowy_backend/protobuf/flowy-folder2/protobuf.dart';
|
2021-07-25 10:04:16 +00:00
|
|
|
import 'package:flutter/material.dart';
|
2023-09-12 02:32:26 +00:00
|
|
|
import 'package:appflowy/util/platform_extension.dart';
|
2023-08-07 14:24:04 +00:00
|
|
|
|
2022-01-31 00:15:49 +00:00
|
|
|
class AuthRouter {
|
2022-11-09 03:07:29 +00:00
|
|
|
void pushForgetPasswordScreen(BuildContext context) {}
|
2021-07-25 10:04:16 +00:00
|
|
|
|
2023-09-12 02:32:26 +00:00
|
|
|
void pushWorkspaceStartScreen(
|
|
|
|
BuildContext context,
|
|
|
|
UserProfilePB userProfile,
|
|
|
|
) {
|
|
|
|
getIt<SplashRouter>().pushWorkspaceStartScreen(context, userProfile);
|
2021-07-25 10:04:16 +00:00
|
|
|
}
|
|
|
|
|
2021-09-06 08:18:34 +00:00
|
|
|
void pushSignUpScreen(BuildContext context) {
|
2021-09-05 14:52:20 +00:00
|
|
|
Navigator.of(context).push(
|
|
|
|
PageRoutes.fade(
|
2022-01-31 00:15:49 +00:00
|
|
|
() => SignUpScreen(router: getIt<AuthRouter>()),
|
2023-09-12 02:32:26 +00:00
|
|
|
const RouteSettings(name: SignUpScreen.routeName),
|
2023-04-10 07:10:42 +00:00
|
|
|
),
|
2021-11-08 11:19:02 +00:00
|
|
|
);
|
|
|
|
}
|
2023-05-21 10:53:59 +00:00
|
|
|
|
2023-09-12 02:32:26 +00:00
|
|
|
/// Navigates to the home screen based on the current workspace and platform.
|
|
|
|
///
|
|
|
|
/// This function takes in a [BuildContext] and a [UserProfilePB] object to
|
|
|
|
/// determine the user's settings and then navigate to the appropriate home screen
|
|
|
|
/// (`MobileHomeScreen` for mobile platforms, `DesktopHomeScreen` for others).
|
|
|
|
///
|
|
|
|
/// It first fetches the current workspace settings using [FolderEventGetCurrentWorkspace].
|
|
|
|
/// If the workspace settings are successfully fetched, it navigates to the home screen.
|
|
|
|
/// If there's an error, it defaults to the workspace start screen.
|
|
|
|
///
|
|
|
|
/// @param [context] BuildContext for navigating to the appropriate screen.
|
|
|
|
/// @param [userProfile] UserProfilePB object containing the details of the current user.
|
|
|
|
///
|
2023-05-21 10:53:59 +00:00
|
|
|
Future<void> pushHomeScreen(
|
|
|
|
BuildContext context,
|
|
|
|
UserProfilePB userProfile,
|
|
|
|
) async {
|
2023-06-05 05:10:14 +00:00
|
|
|
final result = await FolderEventGetCurrentWorkspace().send();
|
2023-05-21 10:53:59 +00:00
|
|
|
result.fold(
|
2023-09-12 02:32:26 +00:00
|
|
|
(workspaceSetting) {
|
|
|
|
if (PlatformExtension.isMobile) {
|
|
|
|
Navigator.of(context).pushAndRemoveUntil(
|
|
|
|
MaterialPageRoute<void>(
|
|
|
|
builder: (BuildContext context) => MobileHomeScreen(
|
|
|
|
key: ValueKey(userProfile.id),
|
|
|
|
userProfile: userProfile,
|
|
|
|
workspaceSetting: workspaceSetting,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
// pop up all the pages until [SplashScreen]
|
|
|
|
(route) => route.settings.name == SplashScreen.routeName,
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
Navigator.push(
|
|
|
|
context,
|
|
|
|
PageRoutes.fade(
|
|
|
|
() => DesktopHomeScreen(
|
|
|
|
key: ValueKey(userProfile.id),
|
|
|
|
userProfile: userProfile,
|
|
|
|
workspaceSetting: workspaceSetting,
|
|
|
|
),
|
|
|
|
const RouteSettings(
|
|
|
|
name: DesktopHomeScreen.routeName,
|
|
|
|
),
|
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
(error) => pushWorkspaceStartScreen(context, userProfile),
|
2023-05-21 10:53:59 +00:00
|
|
|
);
|
|
|
|
}
|
2023-08-17 15:46:39 +00:00
|
|
|
|
|
|
|
Future<void> pushEncryptionScreen(
|
|
|
|
BuildContext context,
|
|
|
|
UserProfilePB userProfile,
|
|
|
|
) async {
|
|
|
|
Navigator.push(
|
|
|
|
context,
|
|
|
|
PageRoutes.fade(
|
|
|
|
() => EncryptSecretScreen(
|
|
|
|
user: userProfile,
|
|
|
|
key: ValueKey(userProfile.id),
|
|
|
|
),
|
2023-09-12 02:32:26 +00:00
|
|
|
const RouteSettings(name: EncryptSecretScreen.routeName),
|
2023-08-17 15:46:39 +00:00
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
2023-08-21 16:19:15 +00:00
|
|
|
|
|
|
|
Future<void> pushWorkspaceErrorScreen(
|
|
|
|
BuildContext context,
|
|
|
|
UserFolderPB userFolder,
|
|
|
|
FlowyError error,
|
|
|
|
) async {
|
|
|
|
final screen = WorkspaceErrorScreen(
|
|
|
|
userFolder: userFolder,
|
|
|
|
error: error,
|
|
|
|
);
|
|
|
|
await Navigator.of(context).push(
|
|
|
|
PageRoutes.fade(
|
|
|
|
() => screen,
|
2023-09-12 02:32:26 +00:00
|
|
|
const RouteSettings(name: WorkspaceErrorScreen.routeName),
|
2023-08-21 16:19:15 +00:00
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
2021-07-25 10:04:16 +00:00
|
|
|
}
|
2022-01-31 00:24:29 +00:00
|
|
|
|
2023-09-12 02:32:26 +00:00
|
|
|
class SplashRouter {
|
|
|
|
Future<void> pushWorkspaceStartScreen(
|
2023-01-12 14:31:39 +00:00
|
|
|
BuildContext context,
|
|
|
|
UserProfilePB userProfile,
|
|
|
|
) async {
|
2023-09-12 02:32:26 +00:00
|
|
|
final screen = WorkspaceStartScreen(userProfile: userProfile);
|
2023-01-12 14:31:39 +00:00
|
|
|
await Navigator.of(context).push(
|
2022-01-31 00:24:29 +00:00
|
|
|
PageRoutes.fade(
|
|
|
|
() => screen,
|
2023-09-12 02:32:26 +00:00
|
|
|
const RouteSettings(name: WorkspaceStartScreen.routeName),
|
2022-01-31 00:24:29 +00:00
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2023-06-05 05:10:14 +00:00
|
|
|
FolderEventGetCurrentWorkspace().send().then((result) {
|
2023-01-12 14:31:39 +00:00
|
|
|
result.fold(
|
|
|
|
(workspaceSettingPB) =>
|
|
|
|
pushHomeScreen(context, userProfile, workspaceSettingPB),
|
|
|
|
(r) => null,
|
|
|
|
);
|
|
|
|
});
|
2022-01-31 00:24:29 +00:00
|
|
|
}
|
|
|
|
|
2023-01-12 14:31:39 +00:00
|
|
|
void pushHomeScreen(
|
|
|
|
BuildContext context,
|
|
|
|
UserProfilePB userProfile,
|
|
|
|
WorkspaceSettingPB workspaceSetting,
|
|
|
|
) {
|
2023-09-12 02:32:26 +00:00
|
|
|
if (PlatformExtension.isMobile) {
|
|
|
|
Navigator.pushAndRemoveUntil<void>(
|
|
|
|
context,
|
|
|
|
MaterialPageRoute<void>(
|
|
|
|
builder: (BuildContext context) => MobileHomeScreen(
|
|
|
|
key: ValueKey(userProfile.id),
|
|
|
|
userProfile: userProfile,
|
|
|
|
workspaceSetting: workspaceSetting,
|
|
|
|
),
|
2023-04-10 07:10:42 +00:00
|
|
|
),
|
2023-09-12 02:32:26 +00:00
|
|
|
// pop up all the pages until [SplashScreen]
|
|
|
|
(route) => route.settings.name == SplashScreen.routeName,
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
Navigator.push(
|
|
|
|
context,
|
|
|
|
PageRoutes.fade(
|
|
|
|
() => DesktopHomeScreen(
|
|
|
|
userProfile: userProfile,
|
|
|
|
workspaceSetting: workspaceSetting,
|
|
|
|
key: ValueKey(userProfile.id),
|
|
|
|
),
|
|
|
|
const RouteSettings(
|
|
|
|
name: DesktopHomeScreen.routeName,
|
|
|
|
),
|
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
2022-01-31 00:24:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void pushSignInScreen(BuildContext context) {
|
|
|
|
Navigator.push(
|
|
|
|
context,
|
2023-04-10 07:10:42 +00:00
|
|
|
PageRoutes.fade(
|
|
|
|
() => SignInScreen(router: getIt<AuthRouter>()),
|
2023-09-12 02:32:26 +00:00
|
|
|
const RouteSettings(name: SignInScreen.routeName),
|
2023-04-10 07:10:42 +00:00
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
2022-01-31 00:24:29 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
void pushSkipLoginScreen(BuildContext context) {
|
|
|
|
Navigator.push(
|
|
|
|
context,
|
|
|
|
PageRoutes.fade(
|
2023-04-10 07:10:42 +00:00
|
|
|
() => SkipLogInScreen(
|
|
|
|
router: getIt<AuthRouter>(),
|
|
|
|
authService: getIt<AuthService>(),
|
|
|
|
),
|
2023-09-12 02:32:26 +00:00
|
|
|
const RouteSettings(name: SkipLogInScreen.routeName),
|
2023-04-10 07:10:42 +00:00
|
|
|
RouteDurations.slow.inMilliseconds * .001,
|
|
|
|
),
|
2022-01-31 00:24:29 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|