Tinyrack

CopyButton

값을 클립보드에 복사하고 잠시 확인 상태를 보여줘요.

값을 클립보드에 복사하고 잠시 확인 상태를 보여줘요.

핵심 속성

속성설명
상태TRCopyButtonStatus.idle에서 시작해 클립보드 쓰기가 성공하면 copied로 바뀌고, resetDelay가 지나면 다시 idle로 돌아와요.
연속 누름누를 때마다 복귀 타이머가 다시 시작되므로, 마지막으로 누른 시점이 idleLabel로 돌아가는 시각을 결정해요.
레이블 너비두 레이블이 모두 배치된 상태로 남아 있어, 복사할 때 크기가 변하지 않고 더 넓은 레이블의 너비를 유지해요.
클립보드 실패플랫폼이 클립보드 쓰기를 거부하면 버튼은 idleLabel을 유지하고 onStatusChange도 호출되지 않아요.
외형appearance, intent, uiSize는 내부의 TRButton으로 그대로 전달돼요.

value에는 명령어나 식별자처럼 읽는 사람이 클립보드에서 기대하는 값을 넣으세요. 주변 화면이 복사에 반응해야 하면 onStatusChange를 관찰하세요.

설치

패키지를 추가한 뒤 공개 라이브러리를 가져오세요.

flutter pub add tinyrack_ui
import '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타입 / 기본값용도
valueString (required)클립보드에 쓰는 텍스트예요.
idleLabelString = 'Copy'복사 전과 복귀 지연이 끝난 뒤에 보여 주는 레이블이에요.
copiedLabelString = 'Copied'상태가 copied인 동안 보여 주는 확인 레이블이에요.
resetDelayDuration = Duration(seconds: 2)레이블이 idleLabel로 돌아가기까지 확인 상태를 유지하는 시간이에요.
onStatusChangeValueChanged<TRCopyButtonStatus>?복사에 성공하면 copied로, 지연이 끝나면 idle로 호출돼요.

외형

Prop타입 / 기본값용도
appearanceTRAppearance = TRAppearance.solidsolid, outline, ghost 중에서 버튼 표면을 골라요.
intentTRIntent = TRIntent.neutralTRButton과 공유하는 시맨틱 색상 인텐트를 적용해요.
uiSizeTRUiSize = TRUiSize.md컨트롤 높이와 타이포그래피를 md, lg로 지정해요.