feat: deploy infrastructure + disk/drive, calendar, presentation, workspaces, onboarding, demo user
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import '../../features/auth/screens/login_screen.dart';
|
||||
import '../../features/auth/screens/register_screen.dart';
|
||||
import '../../features/auth/screens/two_factor_screen.dart';
|
||||
import '../../features/auth/screens/forgot_password_screen.dart';
|
||||
import '../../features/auth/screens/reset_password_screen.dart';
|
||||
import '../../features/dashboard/dashboard_screen.dart';
|
||||
import '../../features/ideas/screens/idea_list_screen.dart';
|
||||
import '../../features/ideas/screens/idea_view_screen.dart';
|
||||
import '../../features/ideas/screens/idea_create_screen.dart';
|
||||
import '../../features/ideas/screens/idea_edit_screen.dart';
|
||||
import '../../features/voice/screens/voice_input_screen.dart';
|
||||
import '../../features/voice/screens/voice_sessions_screen.dart';
|
||||
import '../../features/workspaces/screens/workspace_list_screen.dart';
|
||||
import '../../features/workspaces/screens/workspace_detail_screen.dart';
|
||||
import '../../features/notifications/notifications_screen.dart';
|
||||
import '../../features/settings/screens/settings_screen.dart';
|
||||
import '../../features/admin/screens/admin_screen.dart';
|
||||
import '../../features/onboarding/onboarding_screen.dart';
|
||||
import '../../widgets/shell.dart';
|
||||
import '../api/client.dart';
|
||||
import '../constants/app_constants.dart';
|
||||
|
||||
final _storage = FlutterSecureStorage();
|
||||
|
||||
final routerProvider = Provider<GoRouter>((ref) {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
return GoRouter(
|
||||
initialLocation: '/',
|
||||
redirect: (context, state) async {
|
||||
final token = await apiClient.getAccessToken();
|
||||
final onboardingSeen =
|
||||
await _storage.read(key: AppConstants.onboardingSeenKey);
|
||||
final isAuthRoute = state.matchedLocation.startsWith('/auth') ||
|
||||
state.matchedLocation == '/onboarding';
|
||||
if (token == null && !isAuthRoute) {
|
||||
if (onboardingSeen == null) return '/onboarding';
|
||||
return '/auth/login';
|
||||
}
|
||||
if (token != null && isAuthRoute) return '/';
|
||||
return null;
|
||||
},
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: '/onboarding',
|
||||
builder: (_, __) => const OnboardingScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/auth/login',
|
||||
builder: (_, __) => const LoginScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/auth/register',
|
||||
builder: (_, __) => const RegisterScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/auth/2fa',
|
||||
builder: (_, __) => const TwoFactorScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/auth/forgot-password',
|
||||
builder: (_, __) => const ForgotPasswordScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/auth/reset-password',
|
||||
builder: (_, __) => const ResetPasswordScreen(),
|
||||
),
|
||||
ShellRoute(
|
||||
builder: (_, __, child) => Shell(child: child),
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: '/',
|
||||
builder: (_, __) => const DashboardScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/ideas',
|
||||
builder: (_, __) => const IdeaListScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/ideas/create',
|
||||
builder: (_, __) => const IdeaCreateScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/ideas/:id',
|
||||
builder: (_, state) =>
|
||||
IdeaViewScreen(id: state.pathParameters['id']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/ideas/:id/edit',
|
||||
builder: (_, state) =>
|
||||
IdeaEditScreen(id: state.pathParameters['id']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/voice',
|
||||
builder: (_, __) => const VoiceInputScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/voice/sessions',
|
||||
builder: (_, __) => const VoiceSessionsScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/workspaces',
|
||||
builder: (_, __) => const WorkspaceListScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/workspaces/:id',
|
||||
builder: (_, state) =>
|
||||
WorkspaceDetailScreen(id: state.pathParameters['id']!),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/notifications',
|
||||
builder: (_, __) => const NotificationsScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/settings',
|
||||
builder: (_, __) => const SettingsScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/admin',
|
||||
builder: (_, __) => const AdminScreen(),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user