38 lines
1.6 KiB
Dart
38 lines
1.6 KiB
Dart
/// 약속 (W 공용 위젯, 설계 7-2 JjChip): 고르기 칩 하나.
|
|
/// 입력: 이름 · 고름 · 누름 알림 (null 이면 누를 수 없음) · 아이콘 (있으면) · 여럿 고르기 ([multi]) · 이름 글꼴.
|
|
/// 출력: 아이콘이 없으면 Material 처음 꼴 (고르면 앞에 ✓). 아이콘이 있으면 고를 때 그 자리에 ✓ 만 (그림 위에 체크가 겹치지 않게 - 62ba78d).
|
|
/// [multi] 면 FilterChip (여럿 켜고 끄기 - 목록은 core/picked_list 의 withPicked), 아니면 ChoiceChip (하나 고르기). 오류 없음.
|
|
/// 쓰는 곳: 화면 · 색 보정 · 압축 · 찾기 · 일정 · 저장 공간 · 보기 · 정리 · 받기 설정 · 즐겨찾기 등. 화면은 부르기만 한다
|
|
library;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
class JjChip extends StatelessWidget {
|
|
const JjChip({
|
|
super.key,
|
|
required this.label,
|
|
required this.selected,
|
|
required this.onSelected,
|
|
this.icon,
|
|
this.multi = false,
|
|
this.style,
|
|
});
|
|
|
|
final String label;
|
|
final bool selected;
|
|
final ValueChanged<bool>? onSelected;
|
|
final IconData? icon;
|
|
final bool multi;
|
|
final TextStyle? style;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final text = Text(label, style: style);
|
|
final avatar = icon == null ? null : Icon(selected ? Icons.check : icon, size: 16);
|
|
final check = icon == null;
|
|
return multi
|
|
? FilterChip(label: text, avatar: avatar, showCheckmark: check, selected: selected, onSelected: onSelected)
|
|
: ChoiceChip(label: text, avatar: avatar, showCheckmark: check, selected: selected, onSelected: onSelected);
|
|
}
|
|
}
|