createAppRouterCode function

void createAppRouterCode()

Implementation

void createAppRouterCode() {
  // Create app_router.dart in lib/routes
  final routerFile = File('lib/routes/app_router.dart');
  if (!routerFile.existsSync()) {
    routerFile.writeAsStringSync('''
import 'package:flutter/material.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:go_router/go_router.dart';

/// Main GoRouter instance
class AppRouter {
  static final rootNavigatorKey = GlobalKey<NavigatorState>();

  static final GoRouter routers = GoRouter(
    initialLocation: OnboardingScreen.id,
    navigatorKey: rootNavigatorKey,
    errorPageBuilder: (context, state) {
      return const MaterialPage(
        child: FallbackScreen(), // Redirect to your fallback screen
      );
    },
    routes: [
      GoRoute(
        path: OnboardingScreen.id,
        name: OnboardingScreen.id,
        builder: (context, state) => const OnboardingScreen(),
        redirect: (context, state) async => _onAppStartupRedirect(),
      ),
    ],
  );

  /// Called once at app startup → remove splash + do checks
  static Future<String?> _onAppStartupRedirect() async {
    FlutterNativeSplash.remove();

    // Example: Add session/login check
    // bool loggedIn = await AuthService.isLoggedIn();
    // return loggedIn ? HomeScreen.id : null;

    return null;
  }
}

class OnboardingScreen extends StatelessWidget {
  static const id = '/onboarding';
  const OnboardingScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Center(child: Text('Onboarding')),
    );
  }
}

class FallbackScreen extends StatelessWidget {
  const FallbackScreen({super.key});

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Center(child: Text('Something went wrong')),
    );
  }
}
''');
  }
}