diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 54aea7079..15d1c38bb 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -183,6 +183,7 @@ "enterDetailsManually": "Enter details manually", "edit": "Edit", "copiedToClipboard": "Copied to clipboard", + "copiedNextToClipboard": "Copied next code to clipboard", "error": "Error", "recoveryKeyCopiedToClipboard": "Recovery key copied to clipboard", "recoveryKeyOnForgotPassword": "If you forget your password, the only way you can recover your data is with this key.", diff --git a/lib/ui/code_widget.dart b/lib/ui/code_widget.dart index 900f644fb..7c8617aa9 100644 --- a/lib/ui/code_widget.dart +++ b/lib/ui/code_widget.dart @@ -214,29 +214,34 @@ class _CodeWidgetState extends State { ), ), widget.code.type == Type.totp - ? Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text( - l10n.nextTotpTitle, - style: Theme.of(context).textTheme.bodySmall, - ), - ValueListenableBuilder( - valueListenable: _nextCode, - builder: (context, value, child) { - return Material( - type: MaterialType.transparency, - child: Text( - value, - style: const TextStyle( - fontSize: 18, - color: Colors.grey, + ? GestureDetector( + onTap: () { + _copyNextToClipboard(); + }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + l10n.nextTotpTitle, + style: Theme.of(context).textTheme.bodySmall, + ), + ValueListenableBuilder( + valueListenable: _nextCode, + builder: (context, value, child) { + return Material( + type: MaterialType.transparency, + child: Text( + value, + style: const TextStyle( + fontSize: 18, + color: Colors.grey, + ), ), - ), - ); - }, - ), - ], + ); + }, + ), + ], + ), ) : Column( crossAxisAlignment: CrossAxisAlignment.end, @@ -333,6 +338,12 @@ class _CodeWidgetState extends State { .then((value) => showToast(context, context.l10n.copiedToClipboard)); } + void _copyNextToClipboard() { + FlutterClipboard.copy(_getNextTotp()).then( + (value) => showToast(context, context.l10n.copiedNextToClipboard), + ); + } + void _onNextHotpTapped() { if (widget.code.type == Type.hotp) { CodeStore.instance