đ First Project Setup
FLX CLI āĻĻāĻŋāϝāĻŧā§ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻĨāĻŽ Clean Architecture Flutter project āϤā§āϰāĻŋ āĻāϰā§āύ!
đ¯ Project Structure Setupâ
1. Flutter Project āϤā§āϰāĻŋ āĻāϰā§āύâ
# āύāϤā§āύ Flutter project āϤā§āϰāĻŋ āĻāϰā§āύ
flutter create my_flx_app
cd my_flx_app
2. FLX CLI Configurationâ
# Global config check āĻāϰā§āύ
flx config --list
# Project-specific config set āĻāϰā§āύ (optional)
flx config --state getx --local
3. Dependencies āϝā§āĻ āĻāϰā§āύâ
pubspec.yaml āĻ āĻāĻ dependencies āĻā§āϞ⧠āϝā§āĻ āĻāϰā§āύ:
GetX āĻĒā§āϰā§āĻā§āĻā§āĻā§āϰ āĻāύā§āϝ:
dependencies:
flutter:
sdk: flutter
get: ^4.6.6
dartz: ^0.10.1
equatable: ^2.0.5
dio: ^5.3.2
hive: ^2.2.3
hive_flutter: ^1.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
hive_generator: ^2.0.1
build_runner: ^2.4.7
mockito: ^5.4.2
BLoC āĻĒā§āϰā§āĻā§āĻā§āĻā§āϰ āĻāύā§āϝ:
dependencies:
flutter:
sdk: flutter
flutter_bloc: ^8.1.3
bloc: ^8.1.2
dartz: ^0.10.1
equatable: ^2.0.5
dio: ^5.3.2
hive: ^2.2.3
hive_flutter: ^1.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.0
bloc_test: ^9.1.4
hive_generator: ^2.0.1
build_runner: ^2.4.7
mockito: ^5.4.2
4. Dependencies Install āĻāϰā§āύâ
flutter pub get
đ Folder Structure Setupâ
Core Structure āϤā§āϰāĻŋ āĻāϰā§āύâ
# Core directories manually āϤā§āϰāĻŋ āĻāϰā§āύ
mkdir -p lib/core/error
mkdir -p lib/core/network
mkdir -p lib/core/usecases
mkdir -p lib/core/utils
mkdir -p lib/features
Core Files āϤā§āϰāĻŋ āĻāϰā§āύâ
lib/core/error/failures.dart:
import 'package:equatable/equatable.dart';
abstract class Failure extends Equatable {
final String message;
const Failure([this.message = 'An unexpected error occurred']);
List<Object> get props => [message];
}
class ServerFailure extends Failure {
const ServerFailure([super.message = 'Server error occurred']);
}
class NetworkFailure extends Failure {
const NetworkFailure([super.message = 'Network error occurred']);
}
class CacheFailure extends Failure {
const CacheFailure([super.message = 'Cache error occurred']);
}
class ValidationFailure extends Failure {
const ValidationFailure(String message) : super(message);
}
lib/core/usecases/usecase.dart:
import 'package:dartz/dartz.dart';
import '../error/failures.dart';
abstract class UseCase<Type, Params> {
Future<Either<Failure, Type>> call(Params params);
}
class NoParams {
const NoParams();
}
5. Network Setup (Optional)â
lib/core/network/network_info.dart:
abstract class NetworkInfo {
Future<bool> get isConnected;
}
đ¯ Project Ready!â
āĻāĻāύ āĻāĻĒāύāĻžāϰ project Clean Architecture structure āĻāϰ āĻāύā§āϝ ready!
â Project Structureâ
my_flx_app/
âââ lib/
â âââ core/
â â âââ error/
â â â âââ failures.dart
â â âââ network/
â â â âââ network_info.dart
â â âââ usecases/
â â â âââ usecase.dart
â â âââ utils/
â âââ features/
â â âââ (āĻāĻāĻžāύ⧠FLX CLI āĻĻāĻŋāϝāĻŧā§ features āϤā§āϰāĻŋ āĻšāĻŦā§)
â âââ main.dart
âââ pubspec.yaml
đą GetX App Setup (Optional)â
main.dart āĻ GetX setup:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'FLX Clean App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('FLX Clean App'),
),
body: const Center(
child: Text(
'Ready to build features with FLX CLI!',
style: TextStyle(fontSize: 18),
),
),
);
}
}
đ Next Stepsâ
āĻāĻĒāύāĻžāϰ project āĻāĻāύ ready! āĻāϰāĻĒāϰ:
Setup time: ~5 minutes âąī¸