Form Upload

Estimated reading: 5 minutes 25 views

FlutKit provides a set of flexible and reusable file upload components designed to handle common upload scenarios such as drag-and-drop uploads, form-based file selection, preview uploads, and avatar uploads.
Each component is optimized for clarity, validation, and ease of integration into form workflows.

Drag & Drop Upload

DragDropUpload is designed for modern drag-and-drop file uploads, especially suitable for dashboard and web-based interfaces.

Constructor

Dart
DragDropUpload({
  Key? key,
  void Function(List<String>, List<Map<String, dynamic>>)? onFilesChanged,
  String? instructionText,
  IconData? icon,
  String? Function(List<String>, List<Map<String, dynamic>>)? validator,
})

ParameterDescription
keyWidget key untuk Flutter tree management.
onFilesChangedCallback yang dipanggil setiap kali file ditambahkan atau dihapus. Mengembalikan fileNames dan webFiles (metadata file untuk Web).
instructionTextTeks instruksi yang ditampilkan pada area upload (misalnya: “Drag files here or click to upload”).
iconIcon opsional yang ditampilkan di area upload untuk meningkatkan visual cue.
validatorFungsi validasi kustom untuk memeriksa file sebelum dianggap valid (misalnya ukuran atau tipe file).

Example

Dart
DragDropUpload(
  onFilesChanged: (fileNames, webFiles) {
    // handle uploaded files
  },
),

Use cases

  • Drag-and-drop document upload
  • Media uploads with validation
  • Web-based file handling

File Upload Form

FileUploadForm is a form-integrated file picker that supports single and multiple file uploads, validation, and size variants.

Constructor

Dart
FileUploadForm({
  Key? key,
  bool allowMultiple = false,
  bool enabled = true,
  FormSize size = FormSize.medium,
  String? buttonText,
  String? fieldText,
  String? Function(List<PlatformFile>?)? validator,
  void Function(List<PlatformFile>?)? onSaved,
  dynamic Function(List<PlatformFile>)? onFilesSelected,
  List<PlatformFile>? initialValue,
  String? successMessage,
})

ParameterDescription
keyWidget identifier dalam Flutter widget tree.
allowMultipleMenentukan apakah pengguna boleh memilih lebih dari satu file.
enabledJika false, tombol upload akan dinonaktifkan.
sizeMengontrol ukuran UI komponen (small, medium, large).
buttonTextTeks pada tombol upload.
fieldTextPlaceholder atau label pada field upload.
validatorFungsi validasi form untuk memeriksa file yang dipilih.
onSavedCallback yang dipanggil saat form disimpan (FormState.save()).
onFilesSelectedCallback utama saat file berhasil dipilih oleh user.
initialValueFile awal yang sudah terpilih (misalnya saat edit form).
successMessagePesan sukses yang ditampilkan setelah upload berhasil.

Single File Upload

Dart
FileUploadForm(
  onFilesSelected: (files) {
    for (var file in files) {
      // handle file
    }
  },
),

Multiple Files Upload

Dart
FileUploadForm(
  allowMultiple: true,
  onFilesSelected: (files) {
    for (var file in files) {
      // handle files
    }
  },
),

Custom Text

Dart
FileUploadForm(
  buttonText: 'Upload File',
  fieldText: 'Select document',
  onFilesSelected: (files) {
    for (var file in files) {
      // handle file
    }
  },
),

Disabled State

Dart
FileUploadForm(
  enabled: false,
  onFilesSelected: (files) {
    for (var file in files) {
      // disabled upload
    }
  },
),

Size Variants

Small

Dart
FileUploadForm(
  size: FormSize.small,
  onFilesSelected: (files) {},
),

Medium

Dart
FileUploadForm(
  size: FormSize.medium,
  onFilesSelected: (files) {},
),

Large

Dart
FileUploadForm(
  size: FormSize.large,
  onFilesSelected: (files) {},
),

Upload with Preview

UploadPreview extends the drag-and-drop experience by displaying a preview of uploaded files.

Constructor

Dart
UploadPreview({
  Key? key,
  void Function(List<String>, List<Map<String, dynamic>>)? onFilesChanged,
  String? instructionText,
  IconData? icon,
  String? Function(List<String>, List<Map<String, dynamic>>)? validator,
})

ParameterDescription
keyWidget key untuk kontrol widget tree.
onFilesChangedCallback untuk mengelola file dan preview-nya.
instructionTextInstruksi teks pada area upload.
iconIcon visual pendukung pada UI.
validatorValidasi custom terhadap file sebelum ditampilkan sebagai preview.

Example

Dart
UploadPreview(
  onFilesChanged: (fileNames, webFiles) {
    // handle preview files
  },
),

Use cases

  • Image uploads
  • Media previews before submission
  • UX-focused upload flows

Avatar Upload

AvatarUpload is optimized for profile image uploads with built-in size and file type validation.

Constructor

Dart
AvatarUpload({
  Key? key,
  required double maxSizeBytes,
  required List<String> allowedExtensions,
  required void Function(PlatformFile?) onChanged,
  String? instructionText,
  String? disableText,
  bool enabled = true,
  double radius = 80,
})

ParameterDescription
keyWidget identifier.
maxSizeBytesUkuran maksimum file dalam bytes (misalnya 2 MB).
allowedExtensionsDaftar ekstensi file yang diizinkan (jpg, png, dll).
onChangedCallback saat file dipilih atau dihapus (null jika dihapus).
instructionTextTeks instruksi upload avatar.
disableTextTeks yang ditampilkan saat komponen dalam keadaan disabled.
enabledMengaktifkan atau menonaktifkan upload.
radiusRadius avatar (mengontrol ukuran visual avatar).

Example

Dart
AvatarUpload(
  instructionText: "Drop or browse image (JPG, PNG)",
  maxSizeBytes: 2 * 1024 * 1024, // 2 MB
  allowedExtensions: ['jpg', 'jpeg', 'png'],
  radius: 80,
  enabled: true,
  onChanged: (file) {
    if (file != null) {
      debugPrint("Selected file: ${file.name}");
    } else {
      debugPrint("File removed");
    }
  },
),

Use cases

  • Profile picture upload
  • User account settings
  • Avatar replacement with validation

Demo

To see this component in action, please refer to the demo available under Forms → File Upload

Share this Doc

Form Upload

Or copy link

CONTENTS