결재/인벤토리 주석화 1단계 및 계획 문서 추가
This commit is contained in:
@@ -24,6 +24,7 @@ class ApprovalApproverAutocompleteField extends StatefulWidget {
|
||||
_ApprovalApproverAutocompleteFieldState();
|
||||
}
|
||||
|
||||
/// 승인자 자동완성 필드의 내부 상태를 관리한다.
|
||||
class _ApprovalApproverAutocompleteFieldState
|
||||
extends State<ApprovalApproverAutocompleteField> {
|
||||
late final TextEditingController _textController;
|
||||
@@ -39,6 +40,7 @@ class _ApprovalApproverAutocompleteFieldState
|
||||
_syncFromId();
|
||||
}
|
||||
|
||||
/// 외부에서 제공된 ID 값으로부터 표시 문자열을 동기화한다.
|
||||
void _syncFromId() {
|
||||
final idText = widget.idController.text.trim();
|
||||
final id = int.tryParse(idText);
|
||||
@@ -55,10 +57,12 @@ class _ApprovalApproverAutocompleteFieldState
|
||||
}
|
||||
}
|
||||
|
||||
/// 검색어에 매칭되는 승인자 목록을 반환한다.
|
||||
Iterable<ApprovalApproverCatalogItem> _options(String query) {
|
||||
return ApprovalApproverCatalog.filter(query);
|
||||
}
|
||||
|
||||
/// 특정 승인자를 선택했을 때 내부 상태와 콜백을 갱신한다.
|
||||
void _handleSelected(ApprovalApproverCatalogItem item) {
|
||||
setState(() {
|
||||
_selected = item;
|
||||
@@ -68,6 +72,7 @@ class _ApprovalApproverAutocompleteFieldState
|
||||
});
|
||||
}
|
||||
|
||||
/// 선택된 값을 초기화한다.
|
||||
void _handleCleared() {
|
||||
setState(() {
|
||||
_selected = null;
|
||||
@@ -81,6 +86,7 @@ class _ApprovalApproverAutocompleteFieldState
|
||||
return '${item.name} (${item.employeeNo}) · ${item.team}';
|
||||
}
|
||||
|
||||
/// 사용자가 직접 입력한 사번(ID)을 기반으로 값을 결정한다.
|
||||
void _applyManualEntry(String value) {
|
||||
final trimmed = value.trim();
|
||||
if (trimmed.isEmpty) {
|
||||
@@ -104,6 +110,7 @@ class _ApprovalApproverAutocompleteFieldState
|
||||
});
|
||||
}
|
||||
|
||||
/// 포커스가 해제될 때 수동 입력을 확정한다.
|
||||
void _handleFocusChange() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
_applyManualEntry(_textController.text);
|
||||
|
||||
Reference in New Issue
Block a user