createBaseFiles method

void createBaseFiles(
  1. String projectDir
)

Implementation

void createBaseFiles(String projectDir) {
  print('📝 Creating base files...');

  final libDir = path.join(projectDir, 'lib');

  // Create dependency injection setup
  final diFile = File(path.join(
      libDir, 'core', 'dependency_injection', 'injection_container.dart'));
  diFile.writeAsStringSync('''
import 'package:get_it/get_it.dart';

final sl = GetIt.instance;

Future<void> init() async {
// Register services

// Register blocs

// Register repositories

// Register data sources
}
''');

  // Create error handler
  final errorFile = File(path.join(libDir, 'core', 'error', 'failures.dart'));
  errorFile.writeAsStringSync('''
import 'package:equatable/equatable.dart';

abstract class Failure extends Equatable {
final String message;

const Failure({required this.message});

@override
List<Object> get props => [message];
}

class ServerFailure extends Failure {
const ServerFailure({required super.message});
}

class CacheFailure extends Failure {
const CacheFailure({required super.message});
}

class NetworkFailure extends Failure {
const NetworkFailure({required super.message});
}
''');

  // Create route configuration
  final routeFile = File(path.join(libDir, 'routes', 'app_pages.dart'));
  routeFile.writeAsStringSync('''
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'app_routes.dart';


final router = GoRouter(
initialLocation: '/home',
navigatorKey: GlobalNavigation.instance.navigatorKey,
routes: [

],
);

class GlobalNavigation {
static final GlobalNavigation instance = GlobalNavigation._internal();
GlobalNavigation._internal();

final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
}

''');

  // Create route configuration
  final pageFile = File(path.join(libDir, 'routes', 'app_routes.dart'));
  pageFile.writeAsStringSync('''
abstract class Routes {
Routes._();
}

abstract class _Paths {
_Paths._();
}

abstract class _Names {
_Names._();
}

abstract class Names {
Names._();
}
''');

  // Create themes setup
  final themeFile =
      File(path.join(libDir, 'core', 'themes', 'app_theme.dart'));
  themeFile.writeAsStringSync('''
import 'package:flutter/material.dart';

class AppTheme {
static ThemeData get lightTheme {
  return ThemeData(
    primarySwatch: Colors.blue,
    brightness: Brightness.light,
    appBarTheme: const AppBarTheme(
      backgroundColor: Colors.blue,
      foregroundColor: Colors.white,
    ),
  );
}

static ThemeData get darkTheme {
  return ThemeData(
    primarySwatch: Colors.blue,
    brightness: Brightness.dark,
    appBarTheme: const AppBarTheme(
      backgroundColor: Colors.blueGrey,
      foregroundColor: Colors.white,
    ),
  );
}
}
''');

  // Update main.dart file
  final mainFile = File(path.join(libDir, 'main.dart'));
  if (mainFile.existsSync()) {
    mainFile.writeAsStringSync('''
import 'app.dart';
import 'package:flutter/material.dart';
import 'core/dependency_injection/injection_container.dart' as di;

void main() async {
WidgetsFlutterBinding.ensureInitialized();
await di.init();
runApp(const MyApp());
}
''');
  }

  // Create app.dart file (not checking if exists)
  final appFile = File(path.join(libDir, 'app.dart'));
  appFile.writeAsStringSync('''
import 'core/themes/app_theme.dart';
import 'routes/app_pages.dart';
import 'package:flutter/material.dart';

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

@override
Widget build(BuildContext context) {
  return MaterialApp.router(
    title: 'Flutter App',
    theme: AppTheme.lightTheme,
    darkTheme: AppTheme.darkTheme,
    themeMode: ThemeMode.system,
    routerConfig: router,
  );
}
}
''');
}