vb_dict_select.dart 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. const VberDictSelect({
  21. super.key,
  22. required this.dictType,
  23. this.value,
  24. this.onChanged,
  25. this.hint,
  26. this.enabled = true,
  27. this.showAll = false,
  28. });
  29. @override
  30. State<VberDictSelect> createState() => _VberDictSelectState();
  31. }
  32. class _VberDictSelectState extends State<VberDictSelect> {
  33. @override
  34. Widget build(BuildContext context) {
  35. return VberSelect<DictDataModel>(
  36. fetchData: () async {
  37. final dictList = await DictStore().getDictByType(widget.dictType);
  38. return dictList ?? [];
  39. },
  40. converter: (DictDataModel data) {
  41. return SelectOption(
  42. label: data.dictLabel,
  43. value: data.dictValue,
  44. extra: data,
  45. );
  46. },
  47. value: widget.value, // 直接传递widget.value以确保更新
  48. onChanged: widget.onChanged,
  49. hint: widget.hint,
  50. enabled: widget.enabled,
  51. showAll: widget.showAll,
  52. );
  53. }
  54. }