feat: 장비 관리 API 통합 완료
- 장비 출고 API 연동 및 Provider 패턴 적용 - 장비 수정 API 연동 (데이터 로드 시 API 사용) - 장비 삭제 API 연동 (Controller 메서드 추가) - 장비 이력 조회 화면 추가 및 API 연동 - 모든 컨트롤러에 ChangeNotifier 패턴 적용 - 에러 처리 및 로딩 상태 관리 개선 - API/Mock 데이터 전환 가능 (Feature Flag) 진행률: 전체 API 통합 70%, 장비 관리 100% 완료
This commit is contained in:
@@ -320,19 +320,40 @@ class _EquipmentListRedesignState extends State<EquipmentListRedesign> {
|
||||
child: const Text('취소'),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
if (equipment.status == EquipmentStatus.in_) {
|
||||
MockDataService().deleteEquipmentIn(equipment.id!);
|
||||
} else if (equipment.status == EquipmentStatus.out) {
|
||||
MockDataService().deleteEquipmentOut(equipment.id!);
|
||||
}
|
||||
_controller.loadData();
|
||||
});
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('장비가 삭제되었습니다.')),
|
||||
|
||||
// 로딩 다이얼로그 표시
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (context) => const Center(
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
);
|
||||
|
||||
// Controller를 통한 삭제 처리
|
||||
final success = await _controller.deleteEquipment(equipment);
|
||||
|
||||
// 로딩 다이얼로그 닫기
|
||||
if (mounted) Navigator.pop(context);
|
||||
|
||||
if (success) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('장비가 삭제되었습니다.')),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(_controller.error ?? '삭제 중 오류가 발생했습니다.'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
child: const Text('삭제', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
@@ -341,6 +362,29 @@ class _EquipmentListRedesignState extends State<EquipmentListRedesign> {
|
||||
);
|
||||
}
|
||||
|
||||
/// 이력 보기 핸들러
|
||||
void _handleHistory(UnifiedEquipment equipment) async {
|
||||
if (equipment.equipment.id == null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('장비 ID가 없습니다.')),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
final result = await Navigator.pushNamed(
|
||||
context,
|
||||
Routes.equipmentHistory,
|
||||
arguments: {
|
||||
'equipmentId': equipment.equipment.id,
|
||||
'equipmentName': '${equipment.equipment.manufacturer} ${equipment.equipment.name}',
|
||||
},
|
||||
);
|
||||
|
||||
if (result == true) {
|
||||
_controller.loadData(isRefresh: true);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChangeNotifierProvider<EquipmentListController>.value(
|
||||
@@ -961,10 +1005,15 @@ class _EquipmentListRedesignState extends State<EquipmentListRedesign> {
|
||||
],
|
||||
// 관리 버튼
|
||||
SizedBox(
|
||||
width: 100,
|
||||
width: 140,
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.history, size: 16),
|
||||
onPressed: () => _handleHistory(equipment),
|
||||
tooltip: '이력',
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.edit_outlined, size: 16),
|
||||
onPressed: () => _handleEdit(equipment),
|
||||
|
||||
Reference in New Issue
Block a user