Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flutter (Dart) How to add copy to clipboard on tap to a app?

Tags:

flutter

dart

I'm a beginner to Flutter and I just started following their Name Generator app tutorial and made a simple name generating app. I'm wondering if it's possible to add copy to clipboard feature when a user tap on a name? I tried to implement a solution I found on stack but it didn't work. My full code is here. Any advise is appreciated.

import 'package:flutter/material.dart'; import 'package:english_words/english_words.dart';  void main() => runApp(new MyApp());  class MyApp extends StatelessWidget {   @override   Widget build(BuildContext context) {     return new MaterialApp(       title: 'Startup Name Generator',       home: new RandomWords(),     );   } }  class RandomWords extends StatefulWidget {   @override   RandomWordsState createState() => new RandomWordsState(); }  class RandomWordsState extends State<RandomWords> {   final List<WordPair> _suggestions = <WordPair>[];   final Set<WordPair> _saved = new Set<WordPair>();   final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);    @override   Widget build(BuildContext context) {     return new Scaffold(       appBar: new AppBar(         title: const Text('Startup Name Generator'),         actions: <Widget>[           new IconButton(icon: const Icon(Icons.list), onPressed: _pushSaved),         ],       ),       body: _buildSuggestions(),     );   }    Widget _buildSuggestions() {     return new ListView.builder(         padding: const EdgeInsets.all(16.0),         itemBuilder: (BuildContext _context, int i) {           if (i.isOdd) {             return const Divider();           }           final int index = i ~/ 2;           if (index >= _suggestions.length) {             _suggestions.addAll(generateWordPairs().take(10));           }           return _buildRow(_suggestions[index]);         });   }    Widget _buildRow(WordPair pair) {     final bool alreadySaved = _saved.contains(pair);      return new ListTile(       title: new Text(         pair.asPascalCase,         style: _biggerFont,       ),       trailing: new Icon(         alreadySaved ? Icons.favorite : Icons.favorite_border,         color: alreadySaved ? Colors.red : null,       ),       onTap: () {         setState(() {           if (alreadySaved) {             _saved.remove(pair);           } else {             _saved.add(pair);           }         });       },     );   }    void _pushSaved() {     Navigator.of(context).push(       new MaterialPageRoute<void>(         builder: (BuildContext context) {           final Iterable<ListTile> tiles = _saved.map(                 (WordPair pair) {               return new ListTile(                 title: new Text(                   pair.asPascalCase,                   style: _biggerFont,                 ),               );             },           );           final List<Widget> divided = ListTile               .divideTiles(             context: context,             tiles: tiles,           )               .toList();           return new Scaffold(             appBar: new AppBar(               title: const Text('Saved Suggestions'),             ),             body: new ListView(children: divided),           );          },       ),     );   } } 
like image 213
Gihan Avatar asked Apr 27 '19 22:04

Gihan


People also ask

How do you get copied text from clipboard in flutter?

In the onPressed parameter of the TextButton , call the getData method from the Clipboard class. We need to pass in the format, so in our case, use text/plain — the format when retrieving texts from the clipboard.


2 Answers

import:

import 'package:flutter/services.dart'; 

And then Simply implement this:

onTap: () {   Clipboard.setData(ClipboardData(text: "your text")); }, 
like image 175
Houssem Avatar answered Sep 22 '22 09:09

Houssem


If you want better solution without any dependency that working async use this:

import 'package:flutter/services.dart';  Clipboard.setData(ClipboardData(text: email)).then((_){     ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Email address copied to clipboard"))); }); 

There was breaking changes that you might find useful in the following link: https://docs.flutter.dev/release/breaking-changes/scaffold-messenger

like image 36
Ron Shoshani Avatar answered Sep 19 '22 09:09

Ron Shoshani