4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter】クリップボードにコピーする

Last updated at Posted at 2023-03-20

はじめに

アプリ上に表示されたテキストをクリップボードにコピーし、
別アプリに値をペーストする方法を学んだため、記事にしてみました。

クリップボード とは?

コンピュータ上で、一時的にデータを保存できる共有のメモリ領域のこと。

ウィキペディア(Wikipedia)より引用)

開発環境

  • macOS Monterey 12.5
  • Android Studio Chipmunk | 2021.2.1 Patch 1
  • Flutter 3.3.10

Clipboard の使い方

:pencil2: データセット(コピー)

使用したいクラスに下記パッケージをインポートし、
Clipboard にデータをセットすることで値がコピーできる。

import 'package:flutter/services.dart';

final data = ClipboardData(text: 'sample');
await Clipboard.setData(data);

:pencil2: データ取得

Clipboard からデータをgetすることで値を取得することができる。
kTextPlain は テキスト形式「text/plain」のデータである。

import 'package:flutter/services.dart';

final data = await Clipboard.getData(Clipboard.kTextPlain);
print(data.text);

クリップボードにコピーする

main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:uuid/uuid.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
          title: Text(title),
      ),
      body: const MainPage(),
    );
  }
}

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

  /// 生成したUUIDを返却します。
  Future<String> getUuid() async {
    var uuid = const Uuid();
    return uuid.v4();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          FutureBuilder<String>(
            future: getUuid(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              return InkWell(
                onTap: () async {
                  // クリップボードにデータをセットする
                  Clipboard.setData(ClipboardData(
                      text: snapshot.hasData ? snapshot.data : ''),
                  );
                  await showDialog(
                    context: context,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title: const Text('クリップボードにコピーしました。'),
                        actions: [
                          TextButton(
                            child: const Text('OK'),
                            onPressed: () => Navigator.pop(context),
                          ),
                        ],
                      );
                    },
                  );
                },
                child: Text(
                  snapshot.hasData ? snapshot.data : '',
                  textAlign: TextAlign.center,
                ),
              );
            },
          ),
        ],
      ),
    );
  }
}

生成したUUIDをクリップボードにコピーして別アプリに値をペーストすることができました。

さいごに

Flutterでクリップボードにコピーする方法を紹介しました。
何かと便利なのでアプリ作成の際に役に立つかなと思います!

参考サイト

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?