āĻ¸ā§āĻ•āĻŋāĻĒ āĻ•āϰ⧇ āĻŽā§‚āϞ āĻ•āĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āĻ āϝāĻžāύ

📝 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! āĻāϰāĻĒāϰ:

  1. 🛠 Basic Commands āĻļāĻŋāϖ⧁āύ
  2. đŸŽ¯ First Feature āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

Setup time: ~5 minutes âąī¸