vb_dict_select.dart 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import 'package:flutter/material.dart';
  2. import 'package:chicken_farm/components/vb_select.dart';
  3. import 'package:chicken_farm/stores/dict_stroe.dart';
  4. import 'package:chicken_farm/modes/system/dict.dart';
  5. /// 基于字典数据的选择器组件
  6. /// 传入dict_type获取字典数据并显示为下拉选项
  7. class VberDictSelect extends StatefulWidget {
  8. /// 字典类型
  9. final String dictType;
  10. /// 当前选中的值
  11. final String? value;
  12. /// 值改变回调
  13. final Function(String?)? onChanged;
  14. /// 提示文字
  15. final String? hint;
  16. /// 是否启用
  17. final bool enabled;
  18. /// 是否显示"全部"选项
  19. final bool showAll;
  20. /// 是否隐藏下划线
  21. final bool hideUnderline;
  22. /// 是否显示清空按钮
  23. final bool showClearButton;
  24. const VberDictSelect({
  25. super.key,
  26. required this.dictType,
  27. this.value,
  28. this.onChanged,
  29. this.hint,
  30. this.enabled = true,
  31. this.showAll = false,
  32. this.hideUnderline = false,
  33. this.showClearButton = false,
  34. });
  35. @override
  36. State<VberDictSelect> createState() => _VberDictSelectState();
  37. }
  38. class _VberDictSelectState extends State<VberDictSelect> {
  39. @override
  40. Widget build(BuildContext context) {
  41. return VberSelect<DictDataModel>(
  42. fetchData: () async {
  43. final dictList = await DictStore().getDictByType(widget.dictType);
  44. return dictList ?? [];
  45. },
  46. converter: (DictDataModel data) {
  47. return SelectOption(
  48. label: data.dictLabel,
  49. value: data.dictValue,
  50. extra: data,
  51. );
  52. },
  53. value: widget.value, // 直接传递widget.value以确保更新
  54. onChanged: widget.onChanged,
  55. hint: widget.hint,
  56. enabled: widget.enabled,
  57. showAll: widget.showAll,
  58. hideUnderline: widget.hideUnderline,
  59. showClearButton: widget.showClearButton,
  60. );
  61. }
  62. }