如何允许用户 select 来自文本小部件的文本?
How do I allow users to select text from a Text widget?
在 Android 上,我习惯了 TextView's textIsSelectable attribute 但我没有在文本文档中看到它。
目前我正在使用 TextField(可编辑)并且不保存对显示文本的任何更改。我的主要需求是允许复制粘贴。
我在我的一个项目中使用以下(简化的)代码解决了这个问题:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey();
String _text = 'TestString';
/// Pastes given String to the clipboard and shows Popup-Snackbar
void copyToClipboard(String toClipboard) {
ClipboardData data = new ClipboardData(text: toClipboard);
Clipboard.setData(data);
_scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text(toClipboard + ' copied to clipboard.'),
));
}
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text('TestProject'),
),
body: new InkWell(
onLongPress: () => copyToClipboard(_text),
child: new Center(
child: new Text(_text),
),
),
);
}
}
所以只需将您的文本包装在可以检测手势的小部件中或使用 GestureDetector 调用剪贴板方法。
希望对你有帮助。
在 Android 上,我习惯了 TextView's textIsSelectable attribute 但我没有在文本文档中看到它。
目前我正在使用 TextField(可编辑)并且不保存对显示文本的任何更改。我的主要需求是允许复制粘贴。
我在我的一个项目中使用以下(简化的)代码解决了这个问题:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey();
String _text = 'TestString';
/// Pastes given String to the clipboard and shows Popup-Snackbar
void copyToClipboard(String toClipboard) {
ClipboardData data = new ClipboardData(text: toClipboard);
Clipboard.setData(data);
_scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text(toClipboard + ' copied to clipboard.'),
));
}
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(
title: new Text('TestProject'),
),
body: new InkWell(
onLongPress: () => copyToClipboard(_text),
child: new Center(
child: new Text(_text),
),
),
);
}
}
所以只需将您的文本包装在可以检测手势的小部件中或使用 GestureDetector 调用剪贴板方法。
希望对你有帮助。