createBaseFiles method
void
createBaseFiles(
- 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,
);
}
}
''');
}