From d957cad4ba2ab656e5481f1b2645d94618806390 Mon Sep 17 00:00:00 2001 From: julian Date: Wed, 4 Jan 2023 14:56:36 -0600 Subject: [PATCH] add copy constructor and properly update paynym account model, as well as fix desktop navigation on follow/unfollow --- lib/models/paynym/paynym_account.dart | 16 ++++++++ .../paynym_follow_toggle_button.dart | 39 +++++++++++-------- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/lib/models/paynym/paynym_account.dart b/lib/models/paynym/paynym_account.dart index 06a87ce7b..4be59dc0c 100644 --- a/lib/models/paynym/paynym_account.dart +++ b/lib/models/paynym/paynym_account.dart @@ -36,6 +36,22 @@ class PaynymAccount { PaynymAccountLite.fromMap(Map.from(e as Map))) .toList(); + PaynymAccount copyWith({ + String? nymID, + String? nymName, + List? codes, + List? followers, + List? following, + }) { + return PaynymAccount( + nymID ?? this.nymID, + nymName ?? this.nymName, + codes ?? this.codes, + followers ?? this.followers, + following ?? this.following, + ); + } + Map toMap() => { "nymID": nymID, "nymName": nymName, diff --git a/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart b/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart index e2a00d314..739ace1ff 100644 --- a/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart +++ b/lib/widgets/custom_buttons/paynym_follow_toggle_button.dart @@ -87,7 +87,7 @@ class _PaynymFollowToggleButtonState if (result.value!.following == followedAccount.value!.nymID) { if (!loadingPopped && mounted) { - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: isDesktop).pop(); } unawaited( @@ -97,14 +97,19 @@ class _PaynymFollowToggleButtonState context: context, ), ); - ref.read(myPaynymAccountStateProvider.state).state!.following.add( - PaynymAccountLite( - followedAccount.value!.nymID, - followedAccount.value!.nymName, - followedAccount.value!.codes.first.code, - followedAccount.value!.codes.first.segwit, - ), - ); + + final myAccount = ref.read(myPaynymAccountStateProvider.state).state!; + + myAccount.following.add( + PaynymAccountLite( + followedAccount.value!.nymID, + followedAccount.value!.nymName, + followedAccount.value!.codes.first.code, + followedAccount.value!.codes.first.segwit, + ), + ); + + ref.read(myPaynymAccountStateProvider.state).state = myAccount.copyWith(); setState(() { isFollowing = true; @@ -113,7 +118,7 @@ class _PaynymFollowToggleButtonState return true; } else { if (!loadingPopped && mounted) { - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: isDesktop).pop(); } unawaited( @@ -181,7 +186,7 @@ class _PaynymFollowToggleButtonState if (result.value!.unfollowing == followedAccount.value!.nymID) { if (!loadingPopped && mounted) { - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: isDesktop).pop(); } unawaited( @@ -191,12 +196,14 @@ class _PaynymFollowToggleButtonState context: context, ), ); - ref - .read(myPaynymAccountStateProvider.state) - .state! - .following + + final myAccount = ref.read(myPaynymAccountStateProvider.state).state!; + + myAccount.following .removeWhere((e) => e.nymId == followedAccount.value!.nymID); + ref.read(myPaynymAccountStateProvider.state).state = myAccount.copyWith(); + setState(() { isFollowing = false; }); @@ -204,7 +211,7 @@ class _PaynymFollowToggleButtonState return true; } else { if (!loadingPopped && mounted) { - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: isDesktop).pop(); } unawaited(