reusable_editor
A flexible and modular file management and form handling package for Flutter, supporting both Firestore and REST API-based storage systems along with comprehensive form field management. This package includes file operations, form state management using Cubits, and a collection of reusable form field widgets.
Features
- Abstract interfaces for clean architecture
 - Cubits for managing form states (e.g., image, switch, dropdown, text field)
 - Complete set of reusable form field widgets
 - Extensions for asset loading as 
FileandUint8List - Enum-based dropdown with icon and label support
 
Getting Started
Installation
Add the following to your pubspec.yaml:
dependencies:
  reusable_editor: <latest_version>
Import
import 'package:reusable_editor/reusable_editor.dart';
📘 Documentation
Full usage guides available at: 👉 https://geniecodersrc.github.io/reusable_editor
Usage
Form Field Management
// Create cubit for a field
final textFieldCubit = TextFieldCubit(
  initialValue: 'Default',
  validator: RequiredValidator(),
);
// Use with AppTextField
AppTextField(cubit: textFieldCubit, label: 'Name');
// Toggle field example
final toggleCubit = ToggleCubit(initialValue: false);
AppSwitch(cubit: toggleCubit);
Available Form Widgets
AppCheckbox- Checkbox with label and validationAppDatePicker- Date selection fieldAppDropdown- Custom dropdown fieldAppFilePicker- File selection widgetAppRadioGroup- Radio button groupAppRangeSlider- Range slider inputAppSlider- Slider inputAppSwitch- Toggle switchAppTimePicker- Time selection fieldAppTextField- Text input field
Dropdown with Enum
enum FileSourceType { firebase, server }
final dropdown = EnumOptionDropDownMenuFormField<FileSourceType>(
  selectedValue: selectedOption,
  onChanged: (value) => print(value?.type),
  hint: 'Select file source',
  dropdownItems: [
    EnumOptionEntity(type: FileSourceType.firebase, icon: Icons.cloud, label: 'Firebase'),
    EnumOptionEntity(type: FileSourceType.server, icon: Icons.storage, label: 'Server'),
  ],
);
Load Asset as File
final file = await 'assets/image.png'.loadAsFile();
Load Asset as Bytes
final bytes = await 'assets/image.png'.loadAssetImage();
State Management Cubits
FieldCubit<T>- Generic form field management with validationToggleCubit- Specialized cubit for boolean toggle fieldsDateTimeCubit- Manages date selectionImageCrudCubit- Handles image pick logic and validationEnumOptionCubit<T>- Dropdown Selection with Generic enumSwitchCubit- Toggle logicTextFieldCubit- Text field validation
Contributions
Feel free to open issues or pull requests.
License
© MIT License. Developed with ❤️ by Shohidul Islam
Libraries
- application/manager/image_form_manager
 - config/bloc_provider/register_reusable_editor_bloc_provider
 - config/dependency_injection/register_input_fields_get_it_di
 - domain/entities/enum_option_entity
 - enums/file_data_source_type
 - extensions/asset_image_to_file
 - extensions/asset_to_xfile_extension
 - extensions/image_loader
 - reusable_editor
 - styles/app_form_text_styles
 - styles/form_input_styles
 - type_defs/type_defs
 - view_models/base_bloc/base_bloc
 - view_models/base_bloc/base_state
 - view_models/field_cubits/date_time_cubit/date_time_cubit
 - view_models/field_cubits/enum_option_cubit/enum_option_cubit
 - view_models/field_cubits/field_cubit/field_cubit
 - view_models/field_cubits/image_field_cubit/image_field_cubit
 - view_models/field_cubits/switch_cubit/switch_cubit
 - view_models/field_cubits/text_field_cubit/text_field_cubit
 - view_models/field_cubits/toggle_cubit/toggle_cubit
 - view_models/form_submission/form_submission_status
 - view_models/loading_cubit/loading_cubit
 - view_models/loading_cubit/loading_state
 - views/widgets/app_input_fields/app_checkbox
 - views/widgets/app_input_fields/app_date_picker
 - views/widgets/app_input_fields/app_dropdown
 - views/widgets/app_input_fields/app_file_picker
 - views/widgets/app_input_fields/app_radio_group
 - views/widgets/app_input_fields/app_range_slider
 - views/widgets/app_input_fields/app_slider
 - views/widgets/app_input_fields/app_switch
 - views/widgets/app_input_fields/app_text_field
 - views/widgets/app_input_fields/app_time_picker
 - views/widgets/app_input_fields/generic_text_field