我创建了一个自定义按钮,我在我的扑动应用程序的多个地方使用。我还使用吐司包复制和显示文本任何时候点击按钮。问题是我必须手动写出什么文本按钮将复制每次点击按钮,这是我的代码。
按钮,吐司和我如何调用按钮的代码。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/svg.dart';
import 'package:deciphernigeria/widgets/toastmessage.dart';
class InformationCard extends StatelessWidget {
final String toptitle;
final String bottomtext;
final String copiedtext;
const InformationCard({
Key key,
this.toptitle,
this.bottomtext,
this.copiedtext,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return InkWell(
onTap:
() {
showtoast();
Clipboard.setData(ClipboardData(text: copiedtext));
},
child: Column(
children: [
Container(
margin: EdgeInsets.symmetric(vertical: 10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
boxShadow: [
BoxShadow(
offset: Offset(0.0, 10.0),
blurRadius: 2.0,
spreadRadius: 0.0,
color: Color.fromRGBO(51, 51, 51, 0.16),
),
],
),
child: Row(
children: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(10, 15, 0, 15),
child: SvgPicture.asset(
'assets/icons/information.svg',
height: 30,
),
),
SizedBox(width: 20),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(0,10,30,0),
child: Text(
toptitle,
style: Theme.of(context).textTheme.subtitle2,
),
),
SizedBox(
height: 5,
),
Padding(
padding: const EdgeInsets.fromLTRB(0,0,30,10),
child: Text(bottomtext),
)
],
),
),
],
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
void showtoast() => Fluttertoast.showToast(
msg: 'copied text to clipboard',
fontSize: 15,
backgroundColor: Colors.lightGreen,
);
InformationCard(
toptitle: 'the boy',
bottomtext: 'handsome',
copiedtext: 'handsome',
),
你可以看到当我调用按钮时,我必须在复制的文本中手动输入单词handsome,这样当他们点击按钮时,handsome就会被复制。我还必须手动写英俊在底部的文本,让他们知道他们点击和复制。请我怎么能做到这一点,我不需要在复制之前手动重写复制的文本,并添加一些额外的文本到复制的单词。例如,既然顶部的文本是男孩和底部的文本是英俊的,我如何编码按钮,使它会自动复制男孩是高和英俊时,点击而不写底部的文本?这样我就可以多次使用按钮而不用重写。由于
数据类在这种情况下非常方便。你所要做的就是创建一个类来表示你想要在UI中显示的数据结构。复制到剪贴板。请看下面的例子:
class InformationToBeCopied {
final String bottomText;
final double pi;
const InformationToBeCopied({
required this.bottomText,
this.pi = 3.14,
});
@override
toString() {
return 'This is the bottom text: $bottomText nValue of PI: $pi';
}
}
注意toString()
方法,这就是您将如何构建需要复制到剪贴板的字符串。您可以在InformationToBeCopied
类中添加任意多的属性。然后在您的小部件中,您可以在UI中使用toString()
和info.bottomText
作为剪贴板。
class InformationCard extends StatelessWidget {
final String toptitle;
final InformationToBeCopied info;
const InformationCard({
Key? key,
required this.toptitle,
required this.info,
}) : super(key: key);
void copyInfoToClipboard() {
showToast();
Clipboard.setData(
ClipboardData(text: info.toString()),
);
}
@override
Widget build(BuildContext context) {
// ..
}
}