- V/R 시스템 완전 전환: WARRANTY/CONTRACT/INSPECTION → V(방문)/R(원격) - 유지보수 대시보드 카드 → StandardDataTable 테이블 형태 전환 - "조회중..." 문제 해결: 백엔드 직접 필드 사용 (equipment_model, company_name) - MaintenanceDto 신규 필드 추가: company_id, company_name, equipment_serial, equipment_model - preloadEquipmentData 비활성화로 불필요한 equipment-history API 호출 제거 - CO-STAR 프레임워크 적용 및 CLAUDE.md v3.0 업데이트 - Flutter Analyze ERROR: 0 유지, 100% shadcn_ui 컴플라이언스 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
50 lines
1.2 KiB
Dart
50 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shadcn_ui/shadcn_ui.dart';
|
|
|
|
/// 공통 비고 입력 위젯
|
|
/// 여러 화면에서 재사용할 수 있도록 설계
|
|
class RemarkInput extends StatelessWidget {
|
|
final TextEditingController controller;
|
|
final String label;
|
|
final String hint;
|
|
final FormFieldValidator<String>? validator;
|
|
final int minLines;
|
|
final int? maxLines;
|
|
final bool enabled;
|
|
|
|
const RemarkInput({
|
|
super.key,
|
|
required this.controller,
|
|
this.label = '비고',
|
|
this.hint = '비고를 입력하세요',
|
|
this.validator,
|
|
this.minLines = 4,
|
|
this.maxLines,
|
|
this.enabled = true,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
if (label.isNotEmpty)
|
|
Padding(
|
|
padding: const EdgeInsets.only(bottom: 8.0),
|
|
child: Text(
|
|
label,
|
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
|
),
|
|
),
|
|
ShadInput(
|
|
controller: controller,
|
|
placeholder: Text(hint),
|
|
minLines: minLines,
|
|
maxLines: maxLines ?? minLines + 2,
|
|
enabled: enabled,
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|