refactor: 회사 폼 UI 개선 및 코드 정리
- 담당자 연락처 필드를 드롭다운 + 입력 방식으로 분리 - 사용자 폼과 동일한 전화번호 UI 패턴 적용 - 미사용 위젯 파일 4개 정리 (branch_card, contact_info_* 등) - 파일명 통일성 확보 (branch_edit_screen → branch_form, company_form_simplified → company_form) - 네이밍 일관성 개선으로 유지보수성 향상
This commit is contained in:
@@ -1,111 +1,90 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:superport/models/address_model.dart';
|
||||
import 'package:superport/models/company_model.dart';
|
||||
import 'package:superport/utils/phone_utils.dart';
|
||||
import 'package:superport/models/address_model.dart';
|
||||
|
||||
/// 지점(Branch) 폼 컨트롤러
|
||||
///
|
||||
/// 각 지점의 상태, 컨트롤러, 포커스, 드롭다운, 전화번호 등 관리를 담당
|
||||
/// 회사 폼에서 사용되는 지점 관리 컨트롤러
|
||||
/// 각 지점의 정보를 개별적으로 관리
|
||||
class BranchFormController {
|
||||
// 지점 데이터
|
||||
Branch branch;
|
||||
|
||||
// 입력 컨트롤러
|
||||
final TextEditingController nameController;
|
||||
final TextEditingController contactNameController;
|
||||
final TextEditingController contactPositionController;
|
||||
final TextEditingController contactPhoneController;
|
||||
final TextEditingController contactEmailController;
|
||||
final TextEditingController remarkController;
|
||||
|
||||
// 포커스 노드
|
||||
final FocusNode focusNode;
|
||||
// 카드 키(위젯 식별용)
|
||||
final GlobalKey cardKey;
|
||||
// 직책 드롭다운 상태
|
||||
final ValueNotifier<bool> positionDropdownNotifier;
|
||||
// 전화번호 접두사
|
||||
String selectedPhonePrefix;
|
||||
|
||||
// 직책 목록(공통 상수로 관리 권장)
|
||||
Branch _branch;
|
||||
final List<String> positions;
|
||||
// 전화번호 접두사 목록(공통 상수로 관리 권장)
|
||||
final List<String> phonePrefixes;
|
||||
|
||||
|
||||
// 컨트롤러들
|
||||
final TextEditingController nameController = TextEditingController();
|
||||
final TextEditingController contactNameController = TextEditingController();
|
||||
final TextEditingController contactPositionController = TextEditingController();
|
||||
final TextEditingController contactPhoneController = TextEditingController();
|
||||
final TextEditingController contactEmailController = TextEditingController();
|
||||
final TextEditingController remarkController = TextEditingController();
|
||||
final FocusNode focusNode = FocusNode();
|
||||
|
||||
// 전화번호 관련
|
||||
String selectedPhonePrefix = '010';
|
||||
|
||||
BranchFormController({
|
||||
required this.branch,
|
||||
required Branch branch,
|
||||
required this.positions,
|
||||
required this.phonePrefixes,
|
||||
}) : nameController = TextEditingController(text: branch.name),
|
||||
contactNameController = TextEditingController(
|
||||
text: branch.contactName ?? '',
|
||||
),
|
||||
contactPositionController = TextEditingController(
|
||||
text: branch.contactPosition ?? '',
|
||||
),
|
||||
contactPhoneController = TextEditingController(
|
||||
text: PhoneUtils.extractPhoneNumberWithoutPrefix(
|
||||
branch.contactPhone ?? '',
|
||||
phonePrefixes,
|
||||
),
|
||||
),
|
||||
contactEmailController = TextEditingController(
|
||||
text: branch.contactEmail ?? '',
|
||||
),
|
||||
remarkController = TextEditingController(text: branch.remark ?? ''),
|
||||
focusNode = FocusNode(),
|
||||
cardKey = GlobalKey(),
|
||||
positionDropdownNotifier = ValueNotifier<bool>(false),
|
||||
selectedPhonePrefix = PhoneUtils.extractPhonePrefix(
|
||||
branch.contactPhone ?? '',
|
||||
phonePrefixes,
|
||||
);
|
||||
|
||||
}) : _branch = branch {
|
||||
// 초기값 설정
|
||||
nameController.text = branch.name;
|
||||
contactNameController.text = branch.contactName ?? '';
|
||||
contactPositionController.text = branch.contactPosition ?? '';
|
||||
contactPhoneController.text = branch.contactPhone ?? '';
|
||||
contactEmailController.text = branch.contactEmail ?? '';
|
||||
remarkController.text = branch.remark ?? '';
|
||||
|
||||
// 전화번호 접두사 추출
|
||||
if (branch.contactPhone != null && branch.contactPhone!.isNotEmpty) {
|
||||
for (String prefix in phonePrefixes) {
|
||||
if (branch.contactPhone!.startsWith(prefix)) {
|
||||
selectedPhonePrefix = prefix;
|
||||
contactPhoneController.text = branch.contactPhone!.substring(prefix.length);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Branch 객체 getter
|
||||
Branch get branch => _branch.copyWith(
|
||||
name: nameController.text.trim(),
|
||||
contactName: contactNameController.text.trim().isEmpty ? null : contactNameController.text.trim(),
|
||||
contactPosition: contactPositionController.text.trim().isEmpty ? null : contactPositionController.text.trim(),
|
||||
contactPhone: contactPhoneController.text.trim().isEmpty ? null : '$selectedPhonePrefix${contactPhoneController.text.trim()}',
|
||||
contactEmail: contactEmailController.text.trim().isEmpty ? null : contactEmailController.text.trim(),
|
||||
remark: remarkController.text.trim().isEmpty ? null : remarkController.text.trim(),
|
||||
);
|
||||
|
||||
/// 주소 업데이트
|
||||
void updateAddress(Address address) {
|
||||
branch = branch.copyWith(address: address);
|
||||
_branch = _branch.copyWith(address: address);
|
||||
}
|
||||
|
||||
/// 필드별 값 업데이트
|
||||
void updateField(String fieldName, String value) {
|
||||
switch (fieldName) {
|
||||
|
||||
/// 필드 업데이트
|
||||
void updateField(String field, String value) {
|
||||
switch (field) {
|
||||
case 'name':
|
||||
branch = branch.copyWith(name: value);
|
||||
nameController.text = value;
|
||||
break;
|
||||
case 'contactName':
|
||||
branch = branch.copyWith(contactName: value);
|
||||
contactNameController.text = value;
|
||||
break;
|
||||
case 'contactPosition':
|
||||
branch = branch.copyWith(contactPosition: value);
|
||||
contactPositionController.text = value;
|
||||
break;
|
||||
case 'contactPhone':
|
||||
branch = branch.copyWith(
|
||||
contactPhone: PhoneUtils.getFullPhoneNumber(
|
||||
selectedPhonePrefix,
|
||||
value,
|
||||
),
|
||||
);
|
||||
contactPhoneController.text = value;
|
||||
break;
|
||||
case 'contactEmail':
|
||||
branch = branch.copyWith(contactEmail: value);
|
||||
contactEmailController.text = value;
|
||||
break;
|
||||
case 'remark':
|
||||
branch = branch.copyWith(remark: value);
|
||||
remarkController.text = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// 전화번호 접두사 변경
|
||||
void updatePhonePrefix(String prefix) {
|
||||
selectedPhonePrefix = prefix;
|
||||
branch = branch.copyWith(
|
||||
contactPhone: PhoneUtils.getFullPhoneNumber(
|
||||
prefix,
|
||||
contactPhoneController.text,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/// 리소스 해제
|
||||
void dispose() {
|
||||
nameController.dispose();
|
||||
@@ -115,7 +94,5 @@ class BranchFormController {
|
||||
contactEmailController.dispose();
|
||||
remarkController.dispose();
|
||||
focusNode.dispose();
|
||||
positionDropdownNotifier.dispose();
|
||||
// cardKey는 위젯에서 자동 관리
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user