buildColumnWithDropdown function

Widget buildColumnWithDropdown(
  1. String label,
  2. List<String> items,
  3. String? selectedValue,
  4. String hintText,
  5. dynamic onChanged(
    1. String?
    ),
  6. bool isRequired,
)

Implementation

Widget buildColumnWithDropdown(
  String label,
  List<String> items,
  String? selectedValue,
  String hintText,
  Function(String?) onChanged,
  bool isRequired,
) {
  final bool isDisabled = items.isEmpty;

  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      _buildLabel(label, isRequired),
      const SizedBox(height: 8),
      Container(
        decoration: BoxDecoration(
          gradient: const LinearGradient(
            colors: [Color(0xFF2A2D2F), Color(0xFF1F2123)],
            begin: Alignment.topLeft,
            end: Alignment.bottomRight,
          ),
          borderRadius: BorderRadius.circular(8),
          boxShadow: [
            BoxShadow(
              color: Colors.black.withOpacity(0.2),
              blurRadius: 4,
              offset: const Offset(0, 2),
            ),
          ],
        ),
        child: DropdownButtonFormField<String>(
          isExpanded: true,
          value: items.contains(selectedValue) ? selectedValue : null,
          items:
              items
                  .map(
                    (e) => DropdownMenuItem<String>(
                      value: e,
                      child: Text(
                        e,
                        style: const TextStyle(
                          color: Colors.white,
                          overflow: TextOverflow.ellipsis,
                        ),
                      ),
                    ),
                  )
                  .toList(),
          onChanged: isDisabled ? null : onChanged,
          decoration: _inputDecoration(hintText),
          dropdownColor: const Color(0xFF1F2123),
          validator:
              isRequired
                  ? (val) =>
                      (val == null || val.isEmpty) ? "$label is required" : null
                  : null,
        ),
      ),
    ],
  );
}