- Features
- Screenshots
- Architecture
- Tech Stack
- Getting Started
- Project Structure
- Key Components
- API Integration
- State Management
- Contributing
- License
- π Job Posting: Create and manage job postings with detailed requirements
- π₯ Candidate Management: Review and manage job applications
- π Excel Integration: Bulk upload tasks via Excel files
- πΌ Contract Management: Create, sign, and track contracts
- π° Payment System: Secure payment processing with balance management
- π Progress Tracking: Monitor project progress with visual indicators
- π Job Search: Advanced search and filtering capabilities
- π CV Management: Upload and manage multiple CVs
- β Bookmark Jobs: Save interesting job opportunities
- π¬ Real-time Chat: Communicate with employers
- ποΈ Voice Messages: Send voice recordings in chat
- π± Identity Verification: AI-powered ID and face verification
- π Multi-language Support: Vietnamese and English localization
- π Secure Authentication: OAuth integration with Google Sign-In
- π² Push Notifications: Real-time notifications via Firebase
- π¨ Modern UI/UX: Material Design with custom theming
- π± Cross-platform: Native iOS and Android support
WFlow follows Clean Architecture principles with BLoC Pattern for state management:
lib/
βββ π― core/ # Core utilities and shared components
βββ π common/ # Common services (DI, localization, etc.)
βββ βοΈ configuration/ # App configuration and constants
βββ π§© modules/ # Feature modules
β βββ π auth/ # Authentication module
β βββ π introduction/ # Onboarding module
β βββ π main/ # Main app features
β βββ π‘ data/ # Data layer (repositories, models)
β βββ π― domain/ # Business logic (entities, use cases)
β βββ π¨ presentation/ # UI layer (screens, widgets, BLoC)
- Flutter 3.x - Cross-platform UI framework
- Dart - Programming language
- BLoC Pattern - State management
- Get_It - Dependency injection
- Auto Route - Navigation management
- HTTP/REST APIs - Backend communication
- Firebase - Authentication & Push notifications
- Stringee - Video/Voice calling integration
dependencies:
flutter_bloc: ^8.1.3 # State management
get_it: ^7.6.4 # Dependency injection
cached_network_image: ^3.3.0 # Image caching
file_picker: ^6.1.1 # File selection
flutter_screenutil: ^5.9.0 # Responsive design
voice_message_package: ^2.1.3 # Voice messaging
stringee_flutter_plugin: ^0.8.8 # Video calls- Flutter SDK (3.0.0 or higher)
- Dart SDK (2.17.0 or higher)
- Android Studio / VS Code
- iOS development setup (for iOS builds)
-
Clone the repository
git clone https://github.com/username/wflow.git cd wflow -
Install FVM (Flutter Version Management)
dart pub global activate fvm fvm install fvm use
-
Install dependencies
fvm flutter pub get
-
Setup environment
cp .env.example .env # Edit .env with your configuration -
Run the application
# Development fvm flutter run --flavor dev # Production fvm flutter run --flavor prod
# Android APK
make build-apk
# Android Bundle
make build-appbundle
# iOS
make build-ioswflow/
βββ π± android/ # Android-specific code
βββ π ios/ # iOS-specific code
βββ π§ linux/ # Linux desktop support
βββ πͺ windows/ # Windows desktop support
βββ π₯οΈ macos/ # macOS desktop support
βββ π¦ assets/ # Static assets
β βββ π¨ icons/ # App icons
β βββ π languages/ # Localization files
β βββ π¬ anim/ # Lottie animations
βββ βοΈ configs/ # Configuration files
βββ π scripts/ # Build and deployment scripts
βββ π lib/ # Main application code
PostUseCase- Job posting operationsContractUseCase- Contract managementUpPostBloc- Job posting state management
AuthenticationsBloc- ID verification logicAuthenticationUseCase- Verification business logic
// lib/common/injection.dart
final GetIt instance = GetIt.instance;// lib/common/localization.dart
AppLocalization localization = instance.get<AppLocalization>();
String text = localization.translate('key');// Base URL configuration
const String baseUrl = 'https://api.wflow.com';
// Request/Response models
class UpgradeBusinessRequest {
final String email;
final String phone;
final String name;
// ... other fields
}// File upload for business logos, CVs, etc.
final response = await fileUseCase.uploadFile(
request: UploadFileRequest(
folder: 'Business',
file: selectedFile,
),
);// Example: Job posting BLoC
class UpPostBloc extends Bloc<UpPostEvent, UpPostState> {
final PostUseCase postUseCase;
UpPostBloc({required this.postUseCase}) : super(UpPostState()) {
on<UpPostAddTaskEvent>(_addTask);
on<UpPostSubmitEvent>(_submitPost);
}
Future<void> _addTask(UpPostAddTaskEvent event, Emitter emit) async {
// Task addition logic
}
}class UpPostState {
final List<String> tasks;
final bool isLoading;
final String? error;
const UpPostState({
this.tasks = const [],
this.isLoading = false,
this.error,
});
}- π JWT Token Management - Secure authentication
- π± Device Token Verification - Device-based security
- π AI-powered ID Verification - Face matching and document validation
- π Secure Storage - Encrypted local data storage
- π»π³ Vietnamese (vi)
- πΊπΈ English (en)
Text(instance.get<AppLocalization>().translate('welcome') ?? 'Welcome')# Run unit tests
flutter test
# Run integration tests
flutter test integration_test/
# Generate coverage report
flutter test --coverage| Platform | Status | Version |
|---|---|---|
| π€ Android | β Supported | API 21+ |
| π iOS | β Supported | iOS 11+ |
| π§ Linux | π§ In Development | - |
| πͺ Windows | π§ In Development | - |
| π₯οΈ macOS | π§ In Development | - |
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- π§ Email: support@wflow.com
- π Website: wflow.site
- π Documentation: docs.wflow.com



