Files
2025-11-10 14:14:08 +09:00

55 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
import '../models/member_model.dart';
import '../utils/enum_mappings.dart';
class OwnerDropdown extends StatelessWidget {
const OwnerDropdown({
super.key,
required this.members,
required this.value,
required this.onChanged,
this.enabled = true,
this.onItemsBuilt,
});
final List<Member> members;
final String? value;
final ValueChanged<String?> onChanged;
final bool enabled;
/// 테스트 전용: 빌드된 항목 수를 알리기 위한 콜백(프로덕션에서는 사용하지 않음)
final ValueChanged<int>? onItemsBuilt;
@override
Widget build(BuildContext context) {
final items = members.map((member) {
return DropdownMenuItem<String>(
value: member.userId,
child: Text(
'${member.name} (${getMemberTypeLabel(member.memberType)})',
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
);
}).toList();
// 테스트에서만 사용
if (onItemsBuilt != null) {
// scheduleMicrotask로 프레임 안전하게 호출
Future.microtask(() => onItemsBuilt!(items.length));
}
return DropdownButtonFormField<String>(
decoration: const InputDecoration(
labelText: '모임장 설정',
border: OutlineInputBorder(),
),
isExpanded: true,
initialValue: value,
items: items,
onChanged: enabled ? onChanged : null,
);
}
}