makdumanarchitect 1.0.2
makdumanarchitect: ^1.0.2 copied to clipboard
You can create a clean structure and benefit from its features
MakdumanArchitect #
A powerful Flutter package that implements Clean Architecture principles, providing a robust and scalable project structure with essential features out of the box.
Features 🚀 #
- ✅ Clean Architecture folder structure
- ✅ Pre-configured state management with Provider
- ✅ Network handling with Dio
- ✅ Local storage with Hive
- ✅ Internet connectivity management
- ✅ Firebase integration (Remote Config, Analytics, Crashlytics)
- ✅ Push notifications (Firebase Messaging & Awesome Notifications)
- ✅ Internationalization support with easy_localization
- ✅ In-app review integration
- ✅ Responsive design utilities with flutter_screenutil
- ✅ SVG support with flutter_svg
- ✅ Loading indicators with flutter_easyloading
Installation 📦 #
Add makdumanarchitect
to your pubspec.yaml
:
dev_dependencies:
makdumanarchitect: ^1.0.0
Run:
flutter pub get
Quick Start 🏃♂️ #
Generate the project structure:
flutter pub run makdumanarchitect:main
Project Structure 📁 #
The package creates a well-organized project structure following Clean Architecture principles:
│ ├── scripts
│ │ └── build_sh.dart (<1 KB)
│ └── src
│ ├── core
│ │ ├── base
│ │ │ ├── model
│ │ │ │ └── base_model.dart (<1 KB)
│ │ │ ├── view
│ │ │ │ └── base_view.dart (1 KB)
│ │ │ └── viewModel
│ │ │ └── base_view_model.dart (<1 KB)
│ │ ├── constants
│ │ │ ├── app
│ │ │ │ └── app_constants.dart (<1 KB)
│ │ │ ├── colors
│ │ │ │ └── color_constants.dart (<1 KB)
│ │ │ ├── endPoints
│ │ │ │ └── end_point_constants.dart (<1 KB)
│ │ │ ├── enums
│ │ │ │ ├── app_themes_enums.dart (<1 KB)
│ │ │ │ ├── http_types_enums.dart (<1 KB)
│ │ │ │ └── network_results_enums.dart (<1 KB)
│ │ │ ├── local
│ │ │ │ └── local_constants.dart (<1 KB)
│ │ │ ├── navigation
│ │ │ │ └── navigation_constants.dart (<1 KB)
│ │ │ ├── notification
│ │ │ │ └── notification_constants.dart (<1 KB)
│ │ │ ├── textStyles
│ │ │ │ └── text_style_constants.dart (3 KB)
│ │ │ └── theme
│ │ │ └── theme_constants.dart (<1 KB)
│ │ ├── exports
│ │ │ └── constants_exports.dart (<1 KB)
│ │ ├── extensions
│ │ │ ├── context_extension.dart (2 KB)
│ │ │ └── sized_box_extension.dart (<1 KB)
│ │ ├── mixins
│ │ │ ├── device_orientation.dart (<1 KB)
│ │ │ └── show_bar.dart (1 KB)
│ │ └── services
│ │ ├── analytics
│ │ │ └── analytics_service.dart (2 KB)
│ │ ├── local
│ │ │ └── local_service.dart (1 KB)
│ │ ├── navigation
│ │ │ ├── navigation_route.dart (<1 KB)
│ │ │ └── navigation_service.dart (1 KB)
│ │ ├── network
│ │ │ ├── network_exception.dart (2 KB)
│ │ │ ├── network_service.dart (3 KB)
│ │ │ └── response_parser.dart (<1 KB)
│ │ ├── purchase
│ │ │ └── purchase_manager.dart (5 KB)
│ │ ├── remote_config
│ │ │ └── remote_config_service.dart (1 KB)
│ │ ├── size
│ │ │ └── size_service.dart (<1 KB)
│ │ └── theme
│ │ └── theme_service.dart (<1 KB)
│ └── pages
│ └── home
│ ├── model
│ │ ├── post_model.dart (<1 KB)
│ │ └── post_model.g.dart (<1 KB)
│ ├── view
│ │ └── home_view.dart (1 KB)
│ ├── viewModel
│ │ └── home_view_model.dart (1 KB)
│ └── widget
│ └── one_item.dart (<1 KB)
├── pubspec.yaml (2 KB)
└── scripts
└── build.sh (<1 KB)
Total compressed archive size: 71 KB
Core Features Breakdown 🛠 #
Base Classes
BaseModel
- Foundation for all models with JSON serializationBaseView
- Template for all views with lifecycle managementBaseViewModel
- Base for all ViewModels with state management
Services
- Network Service - Dio-based HTTP client with interceptors
- Local Storage - Hive implementation for persistent storage
- Navigation Service - Clean navigation management
- Analytics Service - Firebase Analytics integration
- Remote Config - Firebase Remote Config setup
- Purchase Manager - In-app purchase handling
- Notification Service - Push notification management
Utils
- Context extensions for responsive design
- SizedBox extensions for cleaner spacing
- Device orientation utilities
- Snackbar and dialog mixins
Usage Examples 💡 #
Creating a New Page #
class HomeView extends BaseView<HomeViewModel> {
@override
Widget build(BuildContext context) {
return BuilderWidget<HomeViewModel>(
viewModel: viewModel,
builder: () => Scaffold(
// Your widget tree
),
);
}
}
Using Network Service #
class ApiService {
Future<ResponseModel> fetchData() async {
return await NetworkService.instance.get<ResponseModel>(
EndPointConstants.endpoint,
model: ResponseModel(),
);
}
}
Local Storage #
await LocalService.instance.setValue('key', 'value');
final value = await LocalService.instance.getValue('key');
Contributing 🤝 #
Contributions are welcome! Please feel free to submit a Pull Request.
License 📄 #
This project is licensed under the MIT License - see the LICENSE file for details.
Author ✍️ #
Mehmet Akduman - GitHub
If you find this package helpful, please give it a ⭐️ on GitHub!