パッケージ、リポジトリ、アプリカテゴリを検索

selectable_autolink_text のカバー
パッケージ詳細v2.6.0

selectable_autolink_text

Flutter用に、テキスト内で選択してタップできるインラインリンクを生成します。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
1.2万
いいね数
84
Pub ポイント
140

パッケージをインストール

flutter pub add selectable_autolink_text

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

テキスト内の選択可能でタップ可能なインラインリンクの作成を可能にするFlutterパッケージです。自動的に文字列内のURL、メールアドレス、電話番号を検出し、テキスト選択機能を維持したままインタラクティブな要素としてレンダリングします。ユーザーが埋め込まれたリンクとやり取りできるが、テキストのコピーまたはハイライト機能を失わないようなリッチテキスト表示に最適です。このパッケージはAndroid、iOS、Web、macOS、Windows、Linuxなど複数のプラットフォームをサポートしています。

用途

  • クリック可能なリンクを含むリッチテキストの表示
  • リンクされたコンテンツでのテキスト選択を有効にする
  • インタラクティブなチャットまたはメッセージインターフェースの作成
  • アプリテキストに連絡先情報を埋め込む
  • ユーザー生成コンテンツを自動リンクでサポート

主な機能

  • URL、メールアドレス、電話番号を自動検出
  • テキスト選択およびコピーを保持する
  • カスタマイズ可能なリンクスタイル
  • クロスプラットフォーム互換性
  • Text ウィジェットとの簡単な統合
  • リンク上のタップジェスチャーをサポート

適している対象

  • チャットアプリケーション
  • ソーシャルメディアフィード
  • ドキュメントビューア
  • ユーザー・プロフィールの説明
  • 動的テキストを備えたコンテンツ豊富なUI

注意事項

  • 一貫した外観を確保するために、追加のスタイリングが必要になる場合があります
  • 大規模なテキストブロックによるパフォーマンスへの影響
  • 非標準的なリンクパターンに対するカスタマイズの制限
  • アクセシビリティラベルの取り扱いに注意が必要です
  • リンク以外の複雑なリッチテキスト形式設定には適していません

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Selectable Autolink Text

pub package

Generate inline links that can be selected and tapped in text for Flutter

Example

Install

https://pub.dev/packages/selectable_autolink_text#-installing-tab-

Usage

Basic
@override
Widget build(BuildContext context) {
  return SelectableAutoLinkText(
    'Basic https://flutter.dev',
    linkStyle: TextStyle(color: Colors.blueAccent),
    highlightedLinkStyle: TextStyle(
      color: Colors.blueAccent,
      backgroundColor: Colors.blueAccent.withAlpha(0x33),
    ),
    onTap: (url) => launchUrl(Uri.parse(url)),
    onLongPress: (url) => Share.share(url),
  );
}
Advanced
@override
Widget build(BuildContext context) {
  return SelectableAutoLinkText(
    '''
Advanced
You can shrink url like https://github.com/miyakeryo/flutter_selectable_autolink_text
tel: 012-3456-7890
email: mail@example.com''',
    style: TextStyle(color: Colors.green[800]),
    linkStyle: TextStyle(color: Colors.purpleAccent),
    highlightedLinkStyle: TextStyle(
      color: Colors.purpleAccent,
      backgroundColor: Colors.purpleAccent.withAlpha(0x33),
    ),
    onTransformDisplayLink: AutoLinkUtils.shrinkUrl,
    onTap: (url) async {
      print('🌶Tap: $url');
      final uri = Uri.parse(url);
      if (await canLaunchUrl(uri)) {
        launchUrl(uri);
      }
    },
    onLongPress: (url) {
      print('🍔LongPress: $url');
      Share.share(url);
    },
  );
}
Customized

You can customize link pattern.

@override
Widget build(BuildContext context) {
  return SelectableAutoLinkText(
    'Custom links'
    '\nHi! @screen_name.'
    ' If you customize the regular expression, you can make them.'
    ' #hash_tag',
    linkStyle: TextStyle(color: Colors.deepOrangeAccent),
    highlightedLinkStyle: TextStyle(
      color: Colors.deepOrangeAccent,
      backgroundColor: Colors.deepOrangeAccent.withAlpha(0x33),
    ),
    linkRegExpPattern: '(@[\\w]+|#[\\w]+|${AutoLinkUtils.urlRegExpPattern})',
    onTransformDisplayLink: AutoLinkUtils.shrinkUrl,
    onTap: (url) => print('🍒Tap: $url'),
    onLongPress: (url) => print('🍩LongPress: $url'),
  );
}
More advanced usage
@override
Widget build(BuildContext context) {
  final blueStyle = TextStyle(color: Colors.blueAccent);
  final highlightedStyle = TextStyle(
    color: Colors.blueAccent, 
    backgroundColor: Colors.blueAccent.withAlpha(0x33),
  );
  final orangeStyle = TextStyle(color: Colors.orange);
  final boldStyle = TextStyle(fontWeight: FontWeight.bold);
  final italicStyle = TextStyle(fontStyle: FontStyle.italic);
  final bigStyle = TextStyle(fontSize: 24);
  final regExpPattern = r'\[([^\]]+)\]\(([^\s\)]+)\)';
  final regExp = RegExp(regExpPattern);

  return SelectableAutoLinkText(
    '''
More advanced usage

[This is a link text](https://google.com)
[This text is bold](bold)
This text is normal
[This text is italic](italic)
[This text is orange](orange)
[This text is big](big)''',
    linkRegExpPattern: regExpPattern,
    onTransformDisplayLink: (s) {
      final match = regExp.firstMatch(s);
      if (match != null && match.groupCount == 2) {
        final text1 = match.group(1)!;
        final text2 = match.group(2)!;
        switch (text2) {
          case 'bold':
            return LinkAttribute(text1, style: boldStyle);
          case 'italic':
            return LinkAttribute(text1, style: italicStyle);
          case 'orange':
            return LinkAttribute(text1, style: orangeStyle);
          case 'big':
            return LinkAttribute(text1, style: bigStyle);
          default:
            if (text2.startsWith('http')) {
              return LinkAttribute(
                text1,
                link: text2,
                style: blueStyle,
                highlightedStyle: highlightedStyle,
              );
            } else {
              return LinkAttribute(text1);
            }
        }
      }
      return LinkAttribute(s);
    },
    onTap: (url) => launchUrl(Uri.parse(url)),
    onLongPress: (url) => Share.share(url),
  );
}

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト