🚀 snippet_gen
A lightweight Dart CLI tool to quickly generate:
- ✅ Provider architecture (Controller + Provider + Repository + Models)
- ✅ BLoC architecture (Bloc + Event + State + Repository + Models)
- ✅ Dart models from JSON (with nested class support + safe parsing)
✨ Features
- 🔹 Generate full Provider-based backend structure
- 🔹 Generate full BLoC-based architecture
- 🔹 Generate Dart models from JSON
- 🔹 Supports nested objects → nested classes
- 🔹 Built-in support for safe parsing (ParsingHelper)
- 🔹 Optional abstract repository generation
- 🔹 Clean folder structure aligned with scalable apps
📦 Installation
Add it locally or run directly:
dart run snippet_gen <command>
⚙️ Usage
1️⃣ Generate Provider Resource
dart run snippet_gen generate provider <EntityName>
Example:
dart run snippet_gen generate provider User
2️⃣ Generate Provider Resource with Abstract Repository
dart run snippet_gen generate provider <EntityName> --abstract
Example:
dart run snippet_gen generate provider User --abstract
✔ Generates repository methods with TODOs instead of API implementation
3️⃣ Generate BLoC Resource
dart run snippet_gen generate bloc <EntityName>
Example:
dart run snippet_gen generate bloc User
4️⃣ Generate BLoC Resource with Abstract Repository
dart run snippet_gen generate bloc <EntityName> --abstract
5️⃣ Generate Model from JSON
dart run snippet_gen model <json_file_path> <ClassName>
Example:
dart run snippet_gen model lib/model/user.json User
✔ Output:
- Generates
.dartfile next to JSON file - Supports nested objects → multiple classes
- Uses safe parsing via
ParsingHelper
🧠 Example JSON
{
"user_id": "123",
"phone": "999999999",
"is_active": true,
"hobbies": {
"music": ["listening", "singing"]
}
}
✅ Generated Output (Simplified)
class User {
final String? userId;
final bool? isActive;
final Hobbies? hobbies;
}
class Hobbies {
final List<String>? music;
}
⚠️ Important Notes
🔸 Argument Order Matters
Correct:
dart run snippet_gen generate provider User --abstract
Incorrect:
dart run snippet_gen generate provider --abstract User ❌
🔸 ParsingHelper Dependency
Generated models rely on your parsing helper:
import 'package:your_project/utils/parsing_helper.dart';
Make sure:
- The file exists
intlpackage is added (if using DateTime parsing)
dependencies:
intl: ^0.19.0
📁 Generated Structure
Provider
lib/backend/user/
├── user_controller.dart
├── user_provider.dart
├── user_repository.dart
Provider Models
lib/backend/user/model
├── user_model.dart
├── create_user_request_dto.dart
├── update_user_request_dto.dart
├── user_response_dto.dart
BLoC
lib/blocs/user/
├── user_bloc.dart
├── user_event.dart
├── user_state.dart
├── user_repository.dart
Bloc Models
lib/bloc/user/model
├── user_model.dart
├── create_user_request_dto.dart
├── update_user_request_dto.dart
├── user_response_dto.dart
💬 Contributing
PRs are welcome. Keep it simple, readable, and scalable.
📄 License
MIT License
Libraries
- generate_bloc_resource
- generate_model
- generate_provider_resource
- model/app_error_model
- model/data_response_model
- model/event_multipart_file_model
- my_print
- parsing_helper
- snippet_gen
- templates/bloc/bloc
- templates/bloc/event
- templates/bloc/state
- templates/common/generate_model
- templates/common/repository
- templates/provider/controller
- templates/provider/provider