CopyButton
값을 클립보드에 복사하고 잠시 확인 상태를 보여줘요.
값을 클립보드에 복사하고 잠시 확인 상태를 보여줘요.
핵심 속성
| 속성 | 설명 |
|---|---|
| 상태 | TRCopyButtonStatus.idle에서 시작해 클립보드 쓰기가 성공하면 copied로 바뀌고, resetDelay가 지나면 다시 idle로 돌아와요. |
| 연속 누름 | 누를 때마다 복귀 타이머가 다시 시작되므로, 마지막으로 누른 시점이 idleLabel로 돌아가는 시각을 결정해요. |
| 레이블 너비 | 두 레이블이 모두 배치된 상태로 남아 있어, 복사할 때 크기가 변하지 않고 더 넓은 레이블의 너비를 유지해요. |
| 클립보드 실패 | 플랫폼이 클립보드 쓰기를 거부하면 버튼은 idleLabel을 유지하고 onStatusChange도 호출되지 않아요. |
| 외형 | appearance, intent, uiSize는 내부의 TRButton으로 그대로 전달돼요. |
value에는 명령어나 식별자처럼 읽는 사람이 클립보드에서 기대하는 값을 넣으세요. 주변 화면이 복사에 반응해야 하면 onStatusChange를 관찰하세요.
설치
패키지를 추가한 뒤 공개 라이브러리를 가져오세요.
flutter pub add tinyrack_uiimport 'package:tinyrack_ui/tinyrack_ui.dart';플레이그라운드
사용법
import 'package:material_ui/material_ui.dart';
import 'package:tinyrack_ui/tinyrack_ui.dart';
class InstallCommand extends StatefulWidget {
const InstallCommand({super.key});
@override
State<InstallCommand> createState() => _InstallCommandState();
}
class _InstallCommandState extends State<InstallCommand> {
TRCopyButtonStatus status = TRCopyButtonStatus.idle;
@override
Widget build(BuildContext context) => Row(
mainAxisSize: MainAxisSize.min,
spacing: TRSpacing.small,
children: [
const TRCode('flutter pub add tinyrack_ui'),
TRCopyButton(
value: 'flutter pub add tinyrack_ui',
idleLabel: '복사',
copiedLabel: '복사됨',
onStatusChange: (next) => setState(() => status = next),
),
],
);
}예시
맥락에 맞는 레이블 고유 링크
무엇을 복사하는지 레이블에 담으면 한 화면에 복사 버튼이 여러 개 있어도 확인 표시를 명확하게 읽을 수 있어요.
Button에서 물려받은 조합 고유 링크
`appearance`, `intent`, `uiSize`는 내부의 `TRButton`까지 전달되고, `resetDelay`로 확인 표시 시간을 조절해요.
API
복사 동작
| Prop | 타입 / 기본값 | 용도 |
|---|---|---|
value | String (required) | 클립보드에 쓰는 텍스트예요. |
idleLabel | String = 'Copy' | 복사 전과 복귀 지연이 끝난 뒤에 보여 주는 레이블이에요. |
copiedLabel | String = 'Copied' | 상태가 copied인 동안 보여 주는 확인 레이블이에요. |
resetDelay | Duration = Duration(seconds: 2) | 레이블이 idleLabel로 돌아가기까지 확인 상태를 유지하는 시간이에요. |
onStatusChange | ValueChanged<TRCopyButtonStatus>? | 복사에 성공하면 copied로, 지연이 끝나면 idle로 호출돼요. |
외형
| Prop | 타입 / 기본값 | 용도 |
|---|---|---|
appearance | TRAppearance = TRAppearance.solid | solid, outline, ghost 중에서 버튼 표면을 골라요. |
intent | TRIntent = TRIntent.neutral | TRButton과 공유하는 시맨틱 색상 인텐트를 적용해요. |
uiSize | TRUiSize = TRUiSize.md | 컨트롤 높이와 타이포그래피를 md, lg로 지정해요. |