From f1208846fc32a5da882ce03a8202528c1ee7ae65 Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 8 Jan 2024 17:49:08 +0100 Subject: [PATCH] fix: listen clipboard changes in search screen --- lib/providers/wallets_profiles.dart | 5 +++- lib/screens/search.dart | 42 ++++++++++++++++++++--------- lib/widgets/idty_status.dart | 1 - pubspec.yaml | 2 +- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/lib/providers/wallets_profiles.dart b/lib/providers/wallets_profiles.dart index a26c789..7de9e30 100644 --- a/lib/providers/wallets_profiles.dart +++ b/lib/providers/wallets_profiles.dart @@ -113,7 +113,10 @@ class WalletsProfilesProvider with ChangeNotifier { Future isAddress(String address) async { final sub = Provider.of(homeContext, listen: false); - return await sub.sdk.api.account.checkAddressFormat(address, sub.initSs58) ?? + return await sub.sdk.api.account + .checkAddressFormat(address, sub.initSs58) + .timeout(const Duration(milliseconds: 300)) + .onError((_, __) => false) ?? false; } diff --git a/lib/screens/search.dart b/lib/screens/search.dart index 4bf41f7..4c9e7ee 100644 --- a/lib/screens/search.dart +++ b/lib/screens/search.dart @@ -23,27 +23,47 @@ class SearchScreen extends StatefulWidget { } class _SearchScreenState extends State { - bool canPasteAddress = false; - String pastedAddress = ''; Timer? debounce; final int debouneTime = 50; + bool canPasteAddress = false; + String pastedAddress = ''; + Timer? clipboardPollingTimer; - Future getClipBoard() async { + void getClipBoard() { final searchProvider = Provider.of(context, listen: false); - final clipboard = await Clipboard.getData('text/plain'); - pastedAddress = clipboard?.text ?? ''; - canPasteAddress = await isAddress(pastedAddress); - searchProvider.reload(); + + // Function to check clipboard and update if necessary + Future checkAndUpdateClipboard() async { + var clipboardData = await Clipboard.getData(Clipboard.kTextPlain); + if (clipboardData?.text != null && clipboardData!.text != pastedAddress) { + pastedAddress = clipboardData.text ?? ''; + canPasteAddress = await isAddress(pastedAddress); + searchProvider.reload(); + } + } + + // Check clipboard immediately + checkAndUpdateClipboard(); + + // Set up the periodic clipboard checking + clipboardPollingTimer = + Timer.periodic(const Duration(milliseconds: 500), (_) async { + await checkAndUpdateClipboard(); + }); } @override void initState() { - WidgetsBinding.instance.addPostFrameCallback((_) async { - await getClipBoard(); - }); + getClipBoard(); super.initState(); } + @override + void dispose() { + clipboardPollingTimer?.cancel(); + super.dispose(); + } + @override Widget build(BuildContext context) { final searchProvider = Provider.of(context); @@ -82,7 +102,6 @@ class _SearchScreenState extends State { onChanged: (v) => { if (debounce?.isActive ?? false) {debounce!.cancel()}, debounce = Timer(Duration(milliseconds: debouneTime), () { - getClipBoard(); searchProvider.reload(); }) }, @@ -99,7 +118,6 @@ class _SearchScreenState extends State { child: IconButton( onPressed: (() async => { searchProvider.searchController.text = '', - await getClipBoard(), searchProvider.reload(), }), icon: Icon( diff --git a/lib/widgets/idty_status.dart b/lib/widgets/idty_status.dart index 6eef21f..00c02fe 100644 --- a/lib/widgets/idty_status.dart +++ b/lib/widgets/idty_status.dart @@ -5,7 +5,6 @@ import 'package:gecko/models/scale_functions.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/widgets/commons/animated_text.dart'; -import 'package:gecko/widgets/commons/loading.dart'; import 'package:gecko/widgets/name_by_address.dart'; import 'package:provider/provider.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 7479318..a699f82 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: Pay with G1. # pub.dev using `pub publish`. This is preferred for private packages. publish_to: "none" # Remove this line if you wish to publish to pub.dev -version: 0.1.4+66 +version: 0.1.4+68 environment: sdk: ">=2.12.0 <3.0.0"