- 모든 *_redesign.dart 파일을 기본 화면 파일로 통합 - 백업용 컨트롤러 파일들 제거 (*_controller.backup.dart) - 사용하지 않는 예제 및 테스트 파일 제거 - Clean Architecture 적용 후 남은 정리 작업 완료 - 테스트 코드 정리 및 구조 개선 준비 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
86 lines
2.9 KiB
Dart
86 lines
2.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:superport/models/address_model.dart';
|
|
import 'package:superport/screens/common/custom_widgets.dart';
|
|
import 'package:superport/screens/common/theme_shadcn.dart';
|
|
import 'package:superport/screens/common/widgets/address_input.dart';
|
|
import 'package:superport/utils/validators.dart';
|
|
import 'package:superport/screens/company/widgets/company_name_autocomplete.dart';
|
|
import 'package:superport/screens/common/widgets/remark_input.dart';
|
|
|
|
class CompanyFormHeader extends StatelessWidget {
|
|
final TextEditingController nameController;
|
|
final FocusNode nameFocusNode;
|
|
final List<String> companyNames;
|
|
final List<String> filteredCompanyNames;
|
|
final bool showCompanyNameDropdown;
|
|
final Function(String) onCompanyNameSelected;
|
|
final Function() onShowMapPressed;
|
|
final ValueChanged<String?> onNameSaved;
|
|
final ValueChanged<Address> onAddressChanged;
|
|
final Address initialAddress;
|
|
final String nameLabel;
|
|
final String nameHint;
|
|
final TextEditingController remarkController;
|
|
|
|
const CompanyFormHeader({
|
|
Key? key,
|
|
required this.nameController,
|
|
required this.nameFocusNode,
|
|
required this.companyNames,
|
|
required this.filteredCompanyNames,
|
|
required this.showCompanyNameDropdown,
|
|
required this.onCompanyNameSelected,
|
|
required this.onShowMapPressed,
|
|
required this.onNameSaved,
|
|
required this.onAddressChanged,
|
|
this.initialAddress = const Address(),
|
|
required this.nameLabel,
|
|
required this.nameHint,
|
|
required this.remarkController,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
// 회사명/지점명
|
|
FormFieldWrapper(
|
|
label: nameLabel,
|
|
isRequired: true,
|
|
child: CompanyNameAutocomplete(
|
|
nameController: nameController,
|
|
nameFocusNode: nameFocusNode,
|
|
companyNames: companyNames,
|
|
filteredCompanyNames: filteredCompanyNames,
|
|
showCompanyNameDropdown: showCompanyNameDropdown,
|
|
onCompanyNameSelected: onCompanyNameSelected,
|
|
onNameSaved: onNameSaved,
|
|
label: nameLabel,
|
|
hint: nameHint,
|
|
),
|
|
),
|
|
|
|
// 주소 입력 위젯 (SRP에 따라 별도 컴포넌트로 분리)
|
|
AddressInput(
|
|
initialZipCode: initialAddress.zipCode,
|
|
initialRegion: initialAddress.region,
|
|
initialDetailAddress: initialAddress.detailAddress,
|
|
isRequired: false,
|
|
onAddressChanged: (zipCode, region, detailAddress) {
|
|
final address = Address(
|
|
zipCode: zipCode,
|
|
region: region,
|
|
detailAddress: detailAddress,
|
|
);
|
|
onAddressChanged(address);
|
|
},
|
|
),
|
|
const SizedBox(height: 12),
|
|
// 비고 입력란
|
|
RemarkInput(controller: remarkController),
|
|
],
|
|
);
|
|
}
|
|
}
|