From 1d4812c5b2de4b85546f1655eae462173aca9ae5 Mon Sep 17 00:00:00 2001 From: julian Date: Thu, 2 Feb 2023 14:34:35 -0600 Subject: [PATCH] pull down to refresh paynym home view on mobile --- .../subwidgets/paynym_followers_list.dart | 150 +++++++++++------- .../subwidgets/paynym_following_list.dart | 150 +++++++++++------- 2 files changed, 192 insertions(+), 108 deletions(-) diff --git a/lib/pages/paynym/subwidgets/paynym_followers_list.dart b/lib/pages/paynym/subwidgets/paynym_followers_list.dart index dbec19692..d8583954d 100644 --- a/lib/pages/paynym/subwidgets/paynym_followers_list.dart +++ b/lib/pages/paynym/subwidgets/paynym_followers_list.dart @@ -3,11 +3,17 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:stackwallet/pages/paynym/subwidgets/paynym_card_button.dart'; +import 'package:stackwallet/providers/global/paynym_api_provider.dart'; +import 'package:stackwallet/providers/global/wallets_provider.dart'; import 'package:stackwallet/providers/wallet/my_paynym_account_state_provider.dart'; +import 'package:stackwallet/services/mixins/paynym_wallet_interface.dart'; import 'package:stackwallet/utilities/constants.dart'; +import 'package:stackwallet/utilities/enums/derive_path_type_enum.dart'; +import 'package:stackwallet/utilities/logger.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/utilities/util.dart'; +import 'package:stackwallet/widgets/conditional_parent.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart'; class PaynymFollowersList extends ConsumerStatefulWidget { @@ -54,61 +60,97 @@ class _PaynymFollowersListState extends ConsumerState { ref.watch(myPaynymAccountStateProvider.state).state?.followers; final count = followers?.length ?? 0; - return ListView.separated( - itemCount: max(count, 1), - separatorBuilder: (BuildContext context, int index) => Container( - height: 1.5, - color: Colors.transparent, - ), - itemBuilder: (BuildContext context, int index) { - if (count == 0) { - return RoundedWhiteContainer( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - "Your PayNym followers will appear here", - style: isDesktop - ? STextStyles.desktopTextExtraExtraSmall(context) - .copyWith( - color: Theme.of(context) - .extension()! - .textSubtitle1, - ) - : STextStyles.label(context), - ), - ], - ), - ); - } else if (count == 1) { - return RoundedWhiteContainer( - padding: const EdgeInsets.all(0), - child: PaynymCardButton( - walletId: widget.walletId, - accountLite: followers![0], - ), - ); - } else { - BorderRadius? borderRadius; - if (index == 0) { - borderRadius = _borderRadiusFirst; - } else if (index == count - 1) { - borderRadius = _borderRadiusLast; - } + return ConditionalParent( + condition: !isDesktop, + builder: (child) => RefreshIndicator( + child: child, + onRefresh: () async { + try { + final manager = ref + .read(walletsChangeNotifierProvider) + .getManager(widget.walletId); - return Container( - key: Key("paynymCardKey_${followers![index].nymId}"), - decoration: BoxDecoration( - borderRadius: borderRadius, - color: Theme.of(context).extension()!.popupBG, - ), - child: PaynymCardButton( - walletId: widget.walletId, - accountLite: followers[index], - ), - ); - } - }, + // get wallet to access paynym calls + final wallet = manager.wallet as PaynymWalletInterface; + + // get payment code + final pCode = await wallet.getPaymentCode( + DerivePathTypeExt.primaryFor(manager.coin), + ); + + // get account from api + final account = + await ref.read(paynymAPIProvider).nym(pCode.toString()); + + // update my account + if (account.value != null) { + ref.read(myPaynymAccountStateProvider.state).state = + account.value!; + } + } catch (e) { + Logging.instance.log( + "Failed pull down refresh of paynym home page: $e", + level: LogLevel.Warning, + ); + } + }, + ), + child: ListView.separated( + itemCount: max(count, 1), + separatorBuilder: (BuildContext context, int index) => Container( + height: 1.5, + color: Colors.transparent, + ), + itemBuilder: (BuildContext context, int index) { + if (count == 0) { + return RoundedWhiteContainer( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Your PayNym followers will appear here", + style: isDesktop + ? STextStyles.desktopTextExtraExtraSmall(context) + .copyWith( + color: Theme.of(context) + .extension()! + .textSubtitle1, + ) + : STextStyles.label(context), + ), + ], + ), + ); + } else if (count == 1) { + return RoundedWhiteContainer( + padding: const EdgeInsets.all(0), + child: PaynymCardButton( + walletId: widget.walletId, + accountLite: followers![0], + ), + ); + } else { + BorderRadius? borderRadius; + if (index == 0) { + borderRadius = _borderRadiusFirst; + } else if (index == count - 1) { + borderRadius = _borderRadiusLast; + } + + return Container( + key: Key("paynymCardKey_${followers![index].nymId}"), + decoration: BoxDecoration( + borderRadius: borderRadius, + color: Theme.of(context).extension()!.popupBG, + ), + child: PaynymCardButton( + walletId: widget.walletId, + accountLite: followers[index], + ), + ); + } + }, + ), ); } } diff --git a/lib/pages/paynym/subwidgets/paynym_following_list.dart b/lib/pages/paynym/subwidgets/paynym_following_list.dart index 754fd6a45..4d9df16ac 100644 --- a/lib/pages/paynym/subwidgets/paynym_following_list.dart +++ b/lib/pages/paynym/subwidgets/paynym_following_list.dart @@ -3,11 +3,17 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:stackwallet/pages/paynym/subwidgets/paynym_card_button.dart'; +import 'package:stackwallet/providers/global/paynym_api_provider.dart'; +import 'package:stackwallet/providers/global/wallets_provider.dart'; import 'package:stackwallet/providers/wallet/my_paynym_account_state_provider.dart'; +import 'package:stackwallet/services/mixins/paynym_wallet_interface.dart'; import 'package:stackwallet/utilities/constants.dart'; +import 'package:stackwallet/utilities/enums/derive_path_type_enum.dart'; +import 'package:stackwallet/utilities/logger.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/utilities/util.dart'; +import 'package:stackwallet/widgets/conditional_parent.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart'; class PaynymFollowingList extends ConsumerStatefulWidget { @@ -54,61 +60,97 @@ class _PaynymFollowingListState extends ConsumerState { ref.watch(myPaynymAccountStateProvider.state).state?.following; final count = following?.length ?? 0; - return ListView.separated( - itemCount: max(count, 1), - separatorBuilder: (BuildContext context, int index) => Container( - height: 1.5, - color: Colors.transparent, - ), - itemBuilder: (BuildContext context, int index) { - if (count == 0) { - return RoundedWhiteContainer( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - "Your PayNym contacts will appear here", - style: isDesktop - ? STextStyles.desktopTextExtraExtraSmall(context) - .copyWith( - color: Theme.of(context) - .extension()! - .textSubtitle1, - ) - : STextStyles.label(context), - ), - ], - ), - ); - } else if (count == 1) { - return RoundedWhiteContainer( - padding: const EdgeInsets.all(0), - child: PaynymCardButton( - walletId: widget.walletId, - accountLite: following![0], - ), - ); - } else { - BorderRadius? borderRadius; - if (index == 0) { - borderRadius = _borderRadiusFirst; - } else if (index == count - 1) { - borderRadius = _borderRadiusLast; - } + return ConditionalParent( + condition: !isDesktop, + builder: (child) => RefreshIndicator( + child: child, + onRefresh: () async { + try { + final manager = ref + .read(walletsChangeNotifierProvider) + .getManager(widget.walletId); - return Container( - key: Key("paynymCardKey_${following![index].nymId}"), - decoration: BoxDecoration( - borderRadius: borderRadius, - color: Theme.of(context).extension()!.popupBG, - ), - child: PaynymCardButton( - walletId: widget.walletId, - accountLite: following[index], - ), - ); - } - }, + // get wallet to access paynym calls + final wallet = manager.wallet as PaynymWalletInterface; + + // get payment code + final pCode = await wallet.getPaymentCode( + DerivePathTypeExt.primaryFor(manager.coin), + ); + + // get account from api + final account = + await ref.read(paynymAPIProvider).nym(pCode.toString()); + + // update my account + if (account.value != null) { + ref.read(myPaynymAccountStateProvider.state).state = + account.value!; + } + } catch (e) { + Logging.instance.log( + "Failed pull down refresh of paynym home page: $e", + level: LogLevel.Warning, + ); + } + }, + ), + child: ListView.separated( + itemCount: max(count, 1), + separatorBuilder: (BuildContext context, int index) => Container( + height: 1.5, + color: Colors.transparent, + ), + itemBuilder: (BuildContext context, int index) { + if (count == 0) { + return RoundedWhiteContainer( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "Your PayNym contacts will appear here", + style: isDesktop + ? STextStyles.desktopTextExtraExtraSmall(context) + .copyWith( + color: Theme.of(context) + .extension()! + .textSubtitle1, + ) + : STextStyles.label(context), + ), + ], + ), + ); + } else if (count == 1) { + return RoundedWhiteContainer( + padding: const EdgeInsets.all(0), + child: PaynymCardButton( + walletId: widget.walletId, + accountLite: following![0], + ), + ); + } else { + BorderRadius? borderRadius; + if (index == 0) { + borderRadius = _borderRadiusFirst; + } else if (index == count - 1) { + borderRadius = _borderRadiusLast; + } + + return Container( + key: Key("paynymCardKey_${following![index].nymId}"), + decoration: BoxDecoration( + borderRadius: borderRadius, + color: Theme.of(context).extension()!.popupBG, + ), + child: PaynymCardButton( + walletId: widget.walletId, + accountLite: following[index], + ), + ); + } + }, + ), ); } }