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 File and Uint8List
  • 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 = FieldCubit<String>(
  initialValue: 'Default',
  validator: RequiredValidator(),
);

// Use with AppTextField
AppTextField(cubit: textFieldCubit);

// Toggle field example
final toggleCubit = ToggleCubit(initialValue: false);
AppSwitch(cubit: toggleCubit);

Available Form Widgets

  • AppCheckbox - Checkbox with label and validation
  • AppDatePicker - Date selection field
  • AppDropdown - Custom dropdown field
  • AppFilePicker - File selection widget
  • AppRadioGroup - Radio button group
  • AppRangeSlider - Range slider input
  • AppSlider - Slider input
  • AppSwitch - Toggle switch
  • AppTextField - Text input field
  • AppTimePicker - Time selection field
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 validation
  • ToggleCubit - Specialized cubit for boolean toggle fields
  • DateTimeCubit - Manages date selection
  • ImageCrudCubit - Handles image pick logic and validation
  • EnumOptionCubit<T> - Dropdown Selection with Generic enum
  • SwitchCubit - Toggle logic
  • TextFieldCubit - 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/text_field_cubit/text_field_state
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
views/widgets/enum_option_drop_down_menu_form_field