feat: 장비 관리 API 연동 구현
- Equipment 관련 DTO 모델 생성 (Request/Response/List/History/In/Out/IO) - EquipmentRemoteDataSource 구현 (10개 API 엔드포인트) - EquipmentService 비즈니스 로직 구현 - Controller를 ChangeNotifier 패턴으로 개선 - 장비 목록 화면에 Provider 패턴 및 무한 스크롤 적용 - 장비 입고 화면 API 연동 및 비동기 처리 - DI 컨테이너에 Equipment 관련 의존성 등록 - API/Mock 데이터 소스 전환 가능 (Feature Flag) - API 통합 진행 상황 문서 업데이트
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
// import 'package:superport/models/equipment_unified_model.dart';
|
||||
import 'package:superport/screens/common/custom_widgets.dart';
|
||||
import 'package:superport/screens/common/theme_tailwind.dart';
|
||||
@@ -350,9 +351,51 @@ class _EquipmentInFormScreenState extends State<EquipmentInFormScreen> {
|
||||
}
|
||||
}
|
||||
|
||||
void _saveEquipmentIn() {
|
||||
if (_controller.save()) {
|
||||
Navigator.pop(context, true);
|
||||
Future<void> _saveEquipmentIn() async {
|
||||
// 로딩 다이얼로그 표시
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (context) => const Center(
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
);
|
||||
|
||||
try {
|
||||
final success = await _controller.save();
|
||||
|
||||
// 로딩 다이얼로그 닫기
|
||||
Navigator.pop(context);
|
||||
|
||||
if (success) {
|
||||
// 성공 메시지 표시
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(_controller.isEditMode ? '장비 입고가 수정되었습니다.' : '장비 입고가 등록되었습니다.'),
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
);
|
||||
Navigator.pop(context, true);
|
||||
} else {
|
||||
// 에러 메시지 표시
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(_controller.error ?? '저장 중 오류가 발생했습니다.'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
// 로딩 다이얼로그 닫기
|
||||
Navigator.pop(context);
|
||||
|
||||
// 예외 처리
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('오류: $e'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1095,7 +1138,10 @@ class _EquipmentInFormScreenState extends State<EquipmentInFormScreen> {
|
||||
print(
|
||||
'[구매처:autocomplete] 입력값: "$inputText", 자동완성 후보: "$suggestion", showSuggestion=$showSuggestion',
|
||||
);
|
||||
return GestureDetector(
|
||||
return ChangeNotifierProvider<EquipmentInFormController>.value(
|
||||
value: _controller,
|
||||
child: Consumer<EquipmentInFormController>(
|
||||
builder: (context, controller, child) => GestureDetector(
|
||||
// 화면의 다른 곳을 탭하면 모든 드롭다운 닫기
|
||||
onTap: () {
|
||||
// 현재 포커스된 위젯 포커스 해제
|
||||
@@ -2262,6 +2308,8 @@ class _EquipmentInFormScreenState extends State<EquipmentInFormScreen> {
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user