import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import '../../../config/app_config.dart'; class EditorTextField extends StatelessWidget { final String label; final TextEditingController controller; final TextInputType keyboardType; final bool readOnly; final VoidCallback? onTap; final List? inputFormatters; final String? Function(String?)? validator; const EditorTextField({ super.key, required this.label, required this.controller, this.keyboardType = TextInputType.text, this.readOnly = false, this.onTap, this.inputFormatters, this.validator, }); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only(bottom: AppConfig.spaceLarge), child: TextFormField( controller: controller, keyboardType: keyboardType, readOnly: readOnly, onTap: onTap, inputFormatters: inputFormatters, style: AppConfig.bodyMedium, decoration: InputDecoration( labelText: label, labelStyle: AppConfig.bodyMedium.copyWith(color: AppConfig.textSecondary), filled: true, fillColor: Colors.grey.shade50, border: OutlineInputBorder( borderRadius: BorderRadius.circular(AppConfig.borderRadiusMedium), borderSide: BorderSide(color: Colors.grey.shade300), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppConfig.borderRadiusMedium), borderSide: BorderSide(color: Colors.grey.shade300), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppConfig.borderRadiusMedium), borderSide: const BorderSide(color: AppConfig.primaryColor), ), ), validator: validator ?? (value) { if (value == null || value.isEmpty) { return '$label harus diisi'; } return null; }, ), ); } }