import 'package:flutter/material.dart'; import 'package:get_it/get_it.dart'; import 'package:superport/utils/constants.dart'; import 'package:superport/core/services/lookups_service.dart'; // 장비 상태에 따라 칩(Chip) 위젯을 반환하는 함수형 위젯 class EquipmentStatusChip extends StatelessWidget { final String status; const EquipmentStatusChip({super.key, required this.status}); @override Widget build(BuildContext context) { // 캐시된 상태 정보 조회 시도 String statusText = status; Color backgroundColor = Colors.grey; try { final lookupsService = GetIt.instance(); final statusResult = lookupsService.getEquipmentStatusById(status); if (statusResult.isRight()) { statusResult.fold( (failure) => null, (statusItem) { if (statusItem != null) { statusText = statusItem.name; } }, ); } } catch (e) { // LookupsService가 등록되지 않았거나 사용할 수 없는 경우 폴백 로직 사용 } // 상태별 색상 지정 (하드코딩된 매핑을 폴백으로 유지) switch (status) { case EquipmentStatus.in_: case 'in': backgroundColor = Colors.green; if (statusText == status) statusText = '입고'; break; case EquipmentStatus.out: case 'out': backgroundColor = Colors.orange; if (statusText == status) statusText = '출고'; break; case EquipmentStatus.rent: case 'rent': backgroundColor = Colors.blue; if (statusText == status) statusText = '대여'; break; case EquipmentStatus.repair: case 'repair': backgroundColor = Colors.blue; if (statusText == status) statusText = '수리중'; break; case EquipmentStatus.damaged: case 'damaged': backgroundColor = Colors.red; if (statusText == status) statusText = '손상'; break; case EquipmentStatus.lost: case 'lost': backgroundColor = Colors.purple; if (statusText == status) statusText = '분실'; break; case EquipmentStatus.disposed: case 'disposed': backgroundColor = Colors.black; if (statusText == status) statusText = '폐기'; break; case EquipmentStatus.etc: case 'etc': backgroundColor = Colors.grey; if (statusText == status) statusText = '기타'; break; default: backgroundColor = Colors.grey; if (statusText == status) statusText = '알 수 없음'; } // 칩 위젯 반환 return Chip( label: Text( statusText, style: const TextStyle(color: Colors.white, fontSize: 12), ), backgroundColor: backgroundColor, visualDensity: VisualDensity.compact, padding: const EdgeInsets.symmetric(horizontal: 5), ); } }