Flutter(七)| Clipboard剪贴板
Clipboard剪贴板是App应用必不可少的一个功能。
Clipboard
密码生成之后,用户可能需要复制粘贴,那如何把生成好的密码复制到剪贴板呢?
Flutter早就想到了这个问题,只需要使用Clipboard.setData就可以在剪贴板上设置数据。
修改_generatePassword中的setState,在生成密码之后,把密码设置到Clipboard:
setState(() {
_password = String.fromCharCodes(tmpPassword);
Clipboard.setData(ClipboardData(text: _password));
});
重新run之后,当点击Generate按钮之后,不仅可以显示在文本框,还可以切换到基本应用中,复制粘贴新生成的密码。
SnackBar
在使用剪贴板的时候,经常会看到这样一句提示’密码已经复制到剪贴板’,用来提示用户。
在Flutter中,可以通过SnackBar来实现:
void _snackBar() {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: Colors.blue,
content: Text(AppLocalizations.of(context).passwordClipboard,
textAlign: TextAlign.center),
),
);
}
修改build中的MaterialApp,加入scaffoldMessengerKey管理:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(AppLocalizations.of(context).randomPassword),
centerTitle: true,
),
body: Column(
children: <Widget>[
_switchLowercase(),
_switchUppercase(),
_switchNumber(),
_switchSpecial(),
_textLength(),
_textShow(),
_buttonGenerate(),
],
),
);
}
热加载一个,就可以看到当点击Generate按钮的时候,在最下面会弹出一个提示框,提示用户密码已经复制到粘贴板,过了几秒之后,提示框自动消失。
SnackBar优化
在使用SnackBar中会发现一个问题,就是当连续点击Generate按钮的时候,SnackBar会一个个出来,显得很卡,这是因为SnackBar是用一个队列管理,每一次点击按钮的时候,setData都会在队列中插入一条数据,然后由管理器一个个显示。
可以在setData的时候,调用removeCurrentSnackBar立即删除之前的数据:
void _snackBar() {
ScaffoldMessenger.of(context).removeCurrentSnackBar();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: Colors.blue,
content: Text(AppLocalizations.of(context).passwordClipboard,
textAlign: TextAlign.center),
),
);
}
这样连续点击的时候,提示框会立即出现。
在下一节中,我们将学习如何使用国际化?
0