import 'package:fis_jsonrpc/rpc.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:vitalapp/pages/controllers/crowd_labels.dart'; class CrowdSelectLabelView extends StatefulWidget { final CrowdLabelsController controller; const CrowdSelectLabelView({super.key, required this.controller}); @override State createState() => _CrowdSelectLabelState(); } class _CrowdSelectLabelState extends State { late CrowdLabelsController controller; @override void initState() { super.initState(); controller = widget.controller; } @override Widget build(BuildContext context) { final state = controller.state; return Obx(() => Wrap( spacing: 16, runSpacing: 12, children: [ buildItem(LabelDTO(code: "0", labelName: "全选"), context), ...state.allLabels .map((LabelDTO e) => buildItem(e, context)) .toList(), ], )); } Widget buildItem(LabelDTO dto, BuildContext context) { return InkWell( child: VCheckBoxButton( key: GlobalKey(), label: dto.labelName ?? '', isChecked: controller.state.isAllSelect ? controller.state.isAllSelect : controller.state.selectedFilterCodes.contains(dto.code), isAllChecked: controller.state.isAllSelect, onChanged: (value) { if (controller.state.isAllSelect && dto.code != "0") { return; } controller.onItemCheckFilterChanged(dto.code!); if (controller.state.selectedFilterCodes.length == 7) { controller.state.isAllSelect = true; } setState(() {}); }, ), ); } } /// 按钮式多选框 class VCheckBoxButton extends StatefulWidget { /// 文本 final String label; /// 是否默认选中 final bool? isChecked; /// 是否默认选中 final bool? isAllChecked; /// 选中状态变更 final ValueChanged? onChanged; const VCheckBoxButton({ super.key, required this.label, this.isChecked, this.onChanged, this.isAllChecked, }); @override State createState() => _VCheckBoxState(); } class _VCheckBoxState extends State { bool _isChecked = false; bool _isAllChecked = false; @override void initState() { if (widget.isChecked != null) { _isChecked = widget.isChecked!; } if (widget.isAllChecked != null) { _isAllChecked = widget.isAllChecked!; } super.initState(); } @override Widget build(BuildContext context) { const height = 40.0; const borderRadius = height / 3; final primaryColor = Theme.of(context).primaryColor; return Material( child: Ink( child: InkWell( borderRadius: BorderRadius.circular(borderRadius), onTap: () { setState(() { _isChecked = !_isChecked; widget.onChanged?.call(_isChecked); }); }, child: IntrinsicWidth( child: Container( padding: const EdgeInsets.only(left: 10, right: 10), constraints: const BoxConstraints(minWidth: 150), alignment: Alignment.center, height: height, decoration: BoxDecoration( color: (_isAllChecked && widget.label != "全选") ? Colors.grey.shade400 : _isChecked ? primaryColor : Colors.white, borderRadius: BorderRadius.circular(borderRadius), border: ((_isAllChecked && widget.label != "全选") || _isChecked) ? null : Border.all(color: primaryColor), ), child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( widget.label, style: TextStyle( color: (_isAllChecked && widget.label != "全选") ? Colors.white : _isChecked ? Colors.white : primaryColor, fontSize: 16, ), ), ], ), ), ), ), ), ); } } class ContractStateSelectLabelView extends StatefulWidget { final List ContractStateEnums; final Function selectRaidoChange; final ContractStateEnum? selectContractState; const ContractStateSelectLabelView( {super.key, required this.ContractStateEnums, required this.selectRaidoChange, this.selectContractState}); @override State createState() => _ContractStateSelectLabelState(); } class _ContractStateSelectLabelState extends State { late List ContractStateEnums; String selectContractState = "0"; final Map ContractStateMap = { "All": "未选择", "Unsigned": "未签约", "Cancelled": "已取消", "Expired": "已过期", "Signed": "已签约", "Voided": "已解约", "Refused": "已拒绝", }; @override void initState() { super.initState(); ContractStateEnums = widget.ContractStateEnums; if (widget.selectContractState != null) { selectContractState = widget.selectContractState!.name; } else { selectContractState = "0"; } } @override Widget build(BuildContext context) { return Wrap( spacing: 16, runSpacing: 12, children: [ buildItem(LabelDTO(code: "0", labelName: "全选"), context), ...ContractStateEnums.map((ContractStateEnum e) => buildItem( LabelDTO(code: e.name, labelName: ContractStateMap[e.name]), context)).toList(), ], ); } Widget buildItem(LabelDTO dto, BuildContext context) { return InkWell( child: VCheckBoxButton( key: GlobalKey(), label: dto.labelName ?? '', isChecked: selectContractState == dto.code, // isAllChecked: selectContractState == "0", onChanged: (value) { // if (selectContractState == "0" && dto.code != "0") { // return; // } selectContractState = dto.code ?? '0'; widget.selectRaidoChange(dto.code); setState(() {}); }, ), ); } } class ScopeEnquiryResidents extends StatefulWidget { final Function selectRaidoChange; final int? selectIndex; const ScopeEnquiryResidents({ super.key, required this.selectRaidoChange, this.selectIndex, }); @override State createState() => _ScopeEnquiryResidentsState(); } class _ScopeEnquiryResidentsState extends State { int selectIndex = 0; @override void initState() { super.initState(); if (widget.selectIndex != null) { selectIndex = widget.selectIndex!; } else { selectIndex = 0; } } @override Widget build(BuildContext context) { return Wrap( spacing: 16, runSpacing: 12, children: [ buildItem(LabelDTO(code: "0", labelName: "仅当前医生建档"), context), buildItem(LabelDTO(code: "1", labelName: "当前团队所有居民"), context), ], ); } Widget buildItem(LabelDTO dto, BuildContext context) { return InkWell( child: VCheckBoxButton( key: GlobalKey(), label: dto.labelName ?? '', isChecked: selectIndex.toString() == dto.code, // isAllChecked: selectContractState == "0", onChanged: (value) { // if (selectContractState == "0" && dto.code != "0") { // return; // } selectIndex = int.parse(dto.code!); widget.selectRaidoChange(selectIndex); setState(() {}); }, ), ); } }