Flutterでテキストをコピーできない!? SelectionAreaとSelectableTextの使い方

はじめに 

こんにちは、メンバーズ Cross Application カンパニーの遠藤です。

サービスローンチにFlutter経験ゼロで関わることがあったので、その際にふとで調べたことを記載してます。

概要

FlutterのWidgetはデフォルトではコピペできない仕様で、コピペしたいならSelectionAreaか、SelectionRegionを使いなさいと公式サイトでも言われてます。

参照

使い方

1. SelectionAreaの書き方例

class MyWidget extends StatelessWidget {
 const MyWidget({super.key});
 
 @override
 Widget build(BuildContext context) {
  return const SelectionArea(
   child: Scaffold(
    body: Row(
     children: [
      Text('kitto'),
      Text('daijyobu'),
     ],
    ),
   ),
  );
 }
}

普通に選択できるようであればこちらで充分に感じました。

2. SelectionRegionの書き方例

class MyWidget extends StatelessWidget {
 MyWidget({super.key});

 final _focusNode = FocusNode();
 @override
 Widget build(BuildContext context) {
   return SelectableRegion(
     selectionControls: materialTextSelectionControls,
     focusNode: _focusNode, // initialized to FocusNode()
     child: Scaffold(
       appBar: AppBar(title: const Text('Flutter Code Sample')),
       body: ListView(
         children: const <Widget>[
           Text('Item 0', style: TextStyle(fontSize: 50.0)),
           Text('Item 1', style: TextStyle(fontSize: 50.0)),
         ],
       ),
     ),
   );
 }
}

こちらはコードに追記されているように選択コントロールができるため、指定された選択箇所をコピペできたりアレンジするにはこちらが良いみたいです。

3. SelectableTextの書き方

class MyWidget extends StatelessWidget {
 const MyWidget({super.key});

 @override
 Widget build(BuildContext context) {
   return const SelectableText(
     'Hello world!!',
     textAlign: TextAlign.center,
     style: TextStyle(fontWeight: FontWeight.bold),
   );
 }
}

まとめ

一通り使ってみましたが、まずはSelectionAreaで良いかと思います。その上で、ボタンを押下してコピーをする処理や、選択した一定の範囲をコピーするなど(よくあるコードをコピーするボタン)のちょっと癖がある際はSelectionRegionを。そして一定の文字のみコピー可能にする場合は単一のスタイルを持つテキストに対してはSelectableTextを使うという理解で進めようと思います。

以下に各メソッドの特徴をまとめました。

 メソッド

用途

特徴

SelectionArea

ほとんどのケースで使用可能

基本的なテキスト選択を有効  化

SelectionRegion

一部のテキストを選択可能にする

選択範囲をカスタマイズ可能

SelectionText

単一のテキストを選択可能

スタイル適用が容易

各メソッドの使い分けのポイント

  • SelectionArea: 基本的なテキスト選択をしたい場合に最適。シンプルな実装が可能です。
  • SelectionRegion: より細かいカスタマイズが必要な場合。選択範囲を制御したいときに有効です。
  • SelectableText: 単一のテキストを選択可能にし、スタイルを簡単に適用できるため、特定のテキストを強調したい場合に便利です。

自分のプロジェクトでどのメソッドが最適かを選び、実装に役立ててください。どの方法もシンプルで強力なので、さまざまなシチュエーションに対応できるはずです。

今後、Flutterを使ってさらに便利なUIを作成するために、選択機能をうまく活用してみてはいかがでしょうか?

この記事が役に立ったと思ったら、
ぜひ「いいね」とシェアをお願いします!

リンクをコピーXでシェアするfacebookでシェアする

この記事を書いた人

遠藤 亮
遠藤 亮
2022年にメンバーズ入社。それまでは自社開発でiOS、androidエンジニアからスタートしてwebエンジニア、インフラ構築まで行ってました。2024年からモバイルアプリの開発支援を行うCross Applicationカンパニーで開発担当。dartよりも中山ダート1200mの方が得意。
詳しく見る
ページトップへ戻る