Merge branch 'dev'
This commit is contained in:
commit
b1f9067c36
|
@ -113,7 +113,10 @@ class WalletsProfilesProvider with ChangeNotifier {
|
||||||
|
|
||||||
Future<bool> isAddress(String address) async {
|
Future<bool> isAddress(String address) async {
|
||||||
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
|
final sub = Provider.of<SubstrateSdk>(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;
|
false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,27 +23,47 @@ class SearchScreen extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _SearchScreenState extends State<SearchScreen> {
|
class _SearchScreenState extends State<SearchScreen> {
|
||||||
bool canPasteAddress = false;
|
|
||||||
String pastedAddress = '';
|
|
||||||
Timer? debounce;
|
Timer? debounce;
|
||||||
final int debouneTime = 50;
|
final int debouneTime = 50;
|
||||||
|
bool canPasteAddress = false;
|
||||||
|
String pastedAddress = '';
|
||||||
|
Timer? clipboardPollingTimer;
|
||||||
|
|
||||||
Future getClipBoard() async {
|
void getClipBoard() {
|
||||||
final searchProvider = Provider.of<SearchProvider>(context, listen: false);
|
final searchProvider = Provider.of<SearchProvider>(context, listen: false);
|
||||||
final clipboard = await Clipboard.getData('text/plain');
|
|
||||||
pastedAddress = clipboard?.text ?? '';
|
// Function to check clipboard and update if necessary
|
||||||
canPasteAddress = await isAddress(pastedAddress);
|
Future<void> checkAndUpdateClipboard() async {
|
||||||
searchProvider.reload();
|
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
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
getClipBoard();
|
||||||
await getClipBoard();
|
|
||||||
});
|
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
clipboardPollingTimer?.cancel();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final searchProvider = Provider.of<SearchProvider>(context);
|
final searchProvider = Provider.of<SearchProvider>(context);
|
||||||
|
@ -82,7 +102,6 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
onChanged: (v) => {
|
onChanged: (v) => {
|
||||||
if (debounce?.isActive ?? false) {debounce!.cancel()},
|
if (debounce?.isActive ?? false) {debounce!.cancel()},
|
||||||
debounce = Timer(Duration(milliseconds: debouneTime), () {
|
debounce = Timer(Duration(milliseconds: debouneTime), () {
|
||||||
getClipBoard();
|
|
||||||
searchProvider.reload();
|
searchProvider.reload();
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -99,7 +118,6 @@ class _SearchScreenState extends State<SearchScreen> {
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
onPressed: (() async => {
|
onPressed: (() async => {
|
||||||
searchProvider.searchController.text = '',
|
searchProvider.searchController.text = '',
|
||||||
await getClipBoard(),
|
|
||||||
searchProvider.reload(),
|
searchProvider.reload(),
|
||||||
}),
|
}),
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
|
|
|
@ -5,7 +5,6 @@ import 'package:gecko/models/scale_functions.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/substrate_sdk.dart';
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
import 'package:gecko/widgets/commons/animated_text.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:gecko/widgets/name_by_address.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ description: Pay with G1.
|
||||||
# pub.dev using `pub publish`. This is preferred for private packages.
|
# 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
|
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:
|
environment:
|
||||||
sdk: ">=2.12.0 <3.0.0"
|
sdk: ">=2.12.0 <3.0.0"
|
||||||
|
|
Loading…
Reference in New Issue