Link | CoUI

Link

내부 또는 외부 URL로 이동하는 링크 텍스트 컴포넌트

Link#

내부 라우팅 또는 외부 URL로 이동하는 링크 텍스트 컴포넌트입니다. 항상 표시되는 밑줄 장식과 외부 링크 표시를 지원합니다.

Live Preview#

사용 시기 (When to Use)#

이 컴포넌트를 사용하세요:

  • 본문 텍스트 중간에 인라인 링크가 필요할 때
  • 외부 사이트로 이동하는 링크를 명시적으로 표시할 때
  • 이용약관, 개인정보처리방침 같은 보조 링크가 필요할 때

대신 다른 컴포넌트를 사용하세요:

  • Button: 사용자 액션을 유발하는 클릭 가능한 요소에 (탐색이 아닌 경우)
  • Breadcrumb: 계층적 페이지 탐색 경로를 표시할 때

기본 사용법 (Basic Usage)#

// 기본 링크 (밑줄 표시)
Link(
  href: '#',
  child: Text('Click here'),
)

// 외부 URL 링크 (새 탭)
Link(
  href: 'https://example.com',
  external: true,
  child: Text('External Link'),
)

// 밑줄 없는 링크
Link(
  href: '#',
  underline: false,
  child: Text('No Underline'),
)

// 탭 콜백 사용
Link(
  href: 'https://coui.cocode.im',
  onPressed: handleOpenDocs,
  child: Text('CoUI 문서'),
)
// 기본 링크 (밑줄 표시)
Link(
  href: '#',
  child: const Text('Click here'),
)

// 외부 URL 링크 (새 탭)
Link(
  href: 'https://example.com',
  external: true,
  child: const Text('External Link'),
)

// 밑줄 없는 링크
Link(
  href: '#',
  underline: false,
  child: const Text('No Underline'),
)

// 클릭 콜백 사용
Link(
  href: 'https://coui.cocode.im',
  onPressed: handleOpenDocs,
  child: const Text('CoUI 문서'),
)

Props / Parameters#

속성타입기본값설명
href String 필수 이동할 URL. child가 없으면 이 문자열이 링크 텍스트로 렌더링됨
onPressed VoidCallback? (Flutter) / CoreVoidCallback? (Web) null 활성화(탭/클릭/키보드 Enter) 시 호출되는 콜백
external bool false 외부 링크 여부. Web에서 target="_blank" + rel="noopener noreferrer" 의도 적용
underline bool true 밑줄 장식 표시 여부. 항상 표시(호버 전용 아님)
child Widget? (Flutter) / Component? (Web) null 링크 내용. null이면 href가 일반 텍스트로 렌더링됨
linkStyle CoreLinkStyle? null 색상 / 밑줄 색상 / 밑줄 오프셋 / 전환 duration / 라벨 텍스트 스타일 오버라이드

변형 (Variants)#

Default#

기본 primary 색상과 밑줄을 사용합니다. 본문 내 링크에 적합합니다.

Link(
  href: '#',
  child: Text('Click here'),
)

External#

external: true로 새 탭에서 열리는 외부 링크를 표시합니다.

Link(
  href: 'https://example.com',
  external: true,
  child: Text('External Link'),
)

No Underline#

underline: false로 밑줄 없는 링크를 표시합니다. 부가 정보 링크에 적합합니다.

Link(
  href: '#',
  underline: false,
  child: Text('No Underline'),
)

스타일 커스터마이징 (Styling)#

모든 시각 chrome은 linkStyle 단일 슬롯(CoreLinkStyle)으로 전달합니다.

Link(
  href: '#',
  linkStyle: const CoreLinkStyle(
    color: CoreColor.token(CoreColors.secondary),
    underlineColor: CoreColor.token(CoreColors.secondary),
  ),
  child: Text('Secondary Link'),
)
CoreLinkStyle 필드타입설명
colorCoreColor?링크 텍스트 색상
underlineColorCoreColor?밑줄 색상
underlineOffsetdouble?밑줄 오프셋 (logical px)
transitionDurationDuration?색상 전환 duration
labelStyleCoreTextStyle?라벨 텍스트 스타일 오버라이드

동작 스펙 (Behavior)#

인터랙션#

  • 클릭/탭: onPressed 호출
  • 호버: 커서가 포인터로 변경
  • 외부 링크: external: true 시 Web에서 새 탭으로 열림

애니메이션#

  • 색상 전환: 150ms ease-in-out (CoreLinkStyle.transitionDuration)

접근성 (Accessibility)#

키보드 인터랙션#

동작
Tab링크로 포커스 이동
Enter링크 활성화

스크린 리더#

  • Flutter: Semantics(link: true, button: true) 자동 적용
  • Web: role="link" + tabindex="0" 부여; external이면 data-external 속성 추가

크로스 플랫폼 차이점 (Platform Differences)#

항목FlutterWeb
클래스명LinkLink
렌더 요소 GestureDetector + Text <div role="link">
외부 링크onPressed 핸들러가 외부 의도 처리target="_blank"
  • Button: 탐색이 아닌 액션 실행에 사용
  • Text: 링크가 없는 일반 텍스트에 사용
  • Breadcrumb: 계층적 페이지 탐색 경로 표시에 사용