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')),
);
}
}
''');
}
}