diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 7cae22df..064962d0 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -204,6 +204,7 @@ "poolDetailsInfoDepositedEquivalent": "Equivalent", "poolDetailsInfoTVL": "TVL", "poolDetailsInfoAPR": "APR", + "poolDetailsInfoAPRFarm3Years": "Farming - APR 3 Years", "time24h": "24h", "timeAll": "All", "poolDetailsInfoVolume": "Volume", diff --git a/lib/ui/views/farm_claim/layouts/farm_claim_sheet.dart b/lib/ui/views/farm_claim/layouts/farm_claim_sheet.dart index b8ff0837..98ba7c84 100755 --- a/lib/ui/views/farm_claim/layouts/farm_claim_sheet.dart +++ b/lib/ui/views/farm_claim/layouts/farm_claim_sheet.dart @@ -4,7 +4,6 @@ import 'package:aedex/domain/models/dex_token.dart'; import 'package:aedex/ui/views/farm_claim/bloc/provider.dart'; import 'package:aedex/ui/views/farm_claim/layouts/components/farm_claim_confirm_sheet.dart'; import 'package:aedex/ui/views/farm_claim/layouts/components/farm_claim_form_sheet.dart'; -import 'package:aedex/ui/views/main_screen/bloc/provider.dart'; import 'package:aedex/ui/views/main_screen/layouts/main_screen_sheet.dart'; import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart' as aedappfm; @@ -38,9 +37,6 @@ class _FarmClaimSheetState extends ConsumerState { super.initState(); Future.delayed(Duration.zero, () async { try { - ref.read(navigationIndexMainScreenProvider.notifier).state = - NavigationIndex.farm; - await ref .read(SessionProviders.session.notifier) .updateCtxInfo(context); diff --git a/lib/ui/views/farm_deposit/layouts/farm_deposit_sheet.dart b/lib/ui/views/farm_deposit/layouts/farm_deposit_sheet.dart index 3a57ed25..49e63442 100755 --- a/lib/ui/views/farm_deposit/layouts/farm_deposit_sheet.dart +++ b/lib/ui/views/farm_deposit/layouts/farm_deposit_sheet.dart @@ -6,7 +6,6 @@ import 'package:aedex/ui/views/farm_deposit/bloc/provider.dart'; import 'package:aedex/ui/views/farm_deposit/layouts/components/farm_deposit_confirm_sheet.dart'; import 'package:aedex/ui/views/farm_deposit/layouts/components/farm_deposit_form_sheet.dart'; import 'package:aedex/ui/views/farm_list/farm_list_sheet.dart'; -import 'package:aedex/ui/views/main_screen/bloc/provider.dart'; import 'package:aedex/ui/views/main_screen/layouts/main_screen_sheet.dart'; import 'package:aedex/ui/views/util/components/dex_archethic_uco.dart'; import 'package:flutter/material.dart'; @@ -35,9 +34,6 @@ class _FarmDepositSheetState extends ConsumerState { super.initState(); Future.delayed(Duration.zero, () async { try { - ref.read(navigationIndexMainScreenProvider.notifier).state = - NavigationIndex.farm; - await ref .read(SessionProviders.session.notifier) .updateCtxInfo(context); diff --git a/lib/ui/views/farm_list/farm_list_sheet.dart b/lib/ui/views/farm_list/farm_list_sheet.dart index 9bbc2f25..8f43ffca 100755 --- a/lib/ui/views/farm_list/farm_list_sheet.dart +++ b/lib/ui/views/farm_list/farm_list_sheet.dart @@ -1,7 +1,6 @@ import 'package:aedex/application/session/provider.dart'; import 'package:aedex/ui/views/farm_list/bloc/provider.dart'; import 'package:aedex/ui/views/farm_list/components/farm_list_item.dart'; -import 'package:aedex/ui/views/main_screen/bloc/provider.dart'; import 'package:aedex/ui/views/main_screen/layouts/main_screen_list.dart'; import 'package:aedex/ui/views/util/components/failure_message.dart'; @@ -25,9 +24,6 @@ class _FarmListSheetState extends ConsumerState { @override void initState() { Future.delayed(Duration.zero, () async { - ref.read(navigationIndexMainScreenProvider.notifier).state = - NavigationIndex.farm; - await ref.read(SessionProviders.session.notifier).updateCtxInfo(context); await ref.read(FarmListFormProvider.farmListForm.notifier).getFarmsList( diff --git a/lib/ui/views/farm_lock/components/farm_lock_block_apr_banner.dart b/lib/ui/views/farm_lock/components/farm_lock_block_apr_banner.dart index 283be7ec..5d9ea6b9 100644 --- a/lib/ui/views/farm_lock/components/farm_lock_block_apr_banner.dart +++ b/lib/ui/views/farm_lock/components/farm_lock_block_apr_banner.dart @@ -44,7 +44,7 @@ class FarmLockBlockAprBanner extends ConsumerWidget { ), if (farmLockForm.farmLock!.apr3years > 0) Text( - '${farmLockForm.farmLock!.apr3years.formatNumber(precision: 2)}%', + '${(farmLockForm.farmLock!.apr3years * 100).formatNumber(precision: 2)}%', style: styleBannerText, ) else diff --git a/lib/ui/views/farm_lock/components/farm_lock_block_farmed_tokens_summary.dart b/lib/ui/views/farm_lock/components/farm_lock_block_farmed_tokens_summary.dart index 5ee61829..a678e981 100644 --- a/lib/ui/views/farm_lock/components/farm_lock_block_farmed_tokens_summary.dart +++ b/lib/ui/views/farm_lock/components/farm_lock_block_farmed_tokens_summary.dart @@ -73,9 +73,12 @@ class FarmLockBlockFarmedTokensSummary extends ConsumerWidget { ), Row( children: [ - SelectableText( - '${AppLocalizations.of(context)!.farmLockBlockFarmedTokensSummaryCapitalInvestedLbl}: ', - style: Theme.of(context).textTheme.bodyMedium, + Opacity( + opacity: AppTextStyles.kOpacityText, + child: SelectableText( + '${AppLocalizations.of(context)!.farmLockBlockFarmedTokensSummaryCapitalInvestedLbl}: ', + style: Theme.of(context).textTheme.bodyMedium, + ), ), Opacity( opacity: opacity, @@ -103,9 +106,12 @@ class FarmLockBlockFarmedTokensSummary extends ConsumerWidget { ), Row( children: [ - SelectableText( - '${AppLocalizations.of(context)!.farmLockBlockFarmedTokensSummaryCapitalRewardsEarnedLbl}: ', - style: Theme.of(context).textTheme.bodyMedium, + Opacity( + opacity: AppTextStyles.kOpacityText, + child: SelectableText( + '${AppLocalizations.of(context)!.farmLockBlockFarmedTokensSummaryCapitalRewardsEarnedLbl}: ', + style: Theme.of(context).textTheme.bodyMedium, + ), ), Opacity( opacity: opacity, diff --git a/lib/ui/views/farm_lock/components/farm_lock_block_header.dart b/lib/ui/views/farm_lock/components/farm_lock_block_header.dart index cad24cb6..b78dcaf7 100644 --- a/lib/ui/views/farm_lock/components/farm_lock_block_header.dart +++ b/lib/ui/views/farm_lock/components/farm_lock_block_header.dart @@ -84,6 +84,49 @@ class FarmLockBlockHeader extends ConsumerWidget { ), ], ) + else if (aedappfm.Responsive.isTablet(context)) + Column( + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + FarmLockBlockAddLiquidity( + pool: pool!, + width: constraints.maxWidth * 0.49, + height: 300, + sortCriteria: sortCriteria, + ), + SizedBox( + width: constraints.maxWidth * 0.02, + ), + FarmLockBlockEarnRewards( + pool: pool!, + farmLock: farmLock, + farm: farm, + width: constraints.maxWidth * 0.49, + height: 300, + sortCriteria: sortCriteria, + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + FarmLockBlockBalanceSummary( + width: constraints.maxWidth * 0.49, + height: 145, + ), + SizedBox( + width: constraints.maxWidth * 0.02, + ), + FarmLockBlockFarmedTokensSummary( + width: constraints.maxWidth * 0.49, + height: 145, + ), + ], + ), + ], + ) else Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/ui/views/farm_withdraw/layouts/farm_withdraw_sheet.dart b/lib/ui/views/farm_withdraw/layouts/farm_withdraw_sheet.dart index ba083f5d..ad4fc043 100755 --- a/lib/ui/views/farm_withdraw/layouts/farm_withdraw_sheet.dart +++ b/lib/ui/views/farm_withdraw/layouts/farm_withdraw_sheet.dart @@ -7,7 +7,6 @@ import 'package:aedex/ui/views/farm_list/farm_list_sheet.dart'; import 'package:aedex/ui/views/farm_withdraw/bloc/provider.dart'; import 'package:aedex/ui/views/farm_withdraw/layouts/components/farm_withdraw_confirm_sheet.dart'; import 'package:aedex/ui/views/farm_withdraw/layouts/components/farm_withdraw_form_sheet.dart'; -import 'package:aedex/ui/views/main_screen/bloc/provider.dart'; import 'package:aedex/ui/views/main_screen/layouts/main_screen_sheet.dart'; import 'package:aedex/ui/views/util/components/dex_archethic_uco.dart'; import 'package:flutter/material.dart'; @@ -40,9 +39,6 @@ class _FarmWithdrawSheetState extends ConsumerState { super.initState(); Future.delayed(Duration.zero, () async { try { - ref.read(navigationIndexMainScreenProvider.notifier).state = - NavigationIndex.farm; - await ref .read(SessionProviders.session.notifier) .updateCtxInfo(context); diff --git a/lib/ui/views/main_screen/bloc/provider.dart b/lib/ui/views/main_screen/bloc/provider.dart index 7be2369a..1e0d3859 100644 --- a/lib/ui/views/main_screen/bloc/provider.dart +++ b/lib/ui/views/main_screen/bloc/provider.dart @@ -1,6 +1,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; -enum NavigationIndex { swap, pool, farm, earn, bridge, getWallet } +enum NavigationIndex { swap, pool, earn, bridge, getWallet } final navigationIndexMainScreenProvider = StateProvider.autoDispose((ref) => NavigationIndex.swap); diff --git a/lib/ui/views/main_screen/layouts/bottom_navigation_bar.dart b/lib/ui/views/main_screen/layouts/bottom_navigation_bar.dart index 6268b38d..c7b014b8 100644 --- a/lib/ui/views/main_screen/layouts/bottom_navigation_bar.dart +++ b/lib/ui/views/main_screen/layouts/bottom_navigation_bar.dart @@ -1,6 +1,5 @@ import 'dart:ui'; -import 'package:aedex/ui/views/farm_list/farm_list_sheet.dart'; import 'package:aedex/ui/views/farm_lock/farm_lock_sheet.dart'; import 'package:aedex/ui/views/main_screen/bloc/provider.dart'; import 'package:aedex/ui/views/pool_list/pool_list_sheet.dart'; @@ -72,12 +71,6 @@ class _BottomNavigationBarMainScreenState selected = true; } break; - case aedappfm.Iconsax.coin5: - if (tabSelected == NavigationIndex.farm) { - widthContainer = 30; - selected = true; - } - break; case aedappfm.Iconsax.coin5: if (tabSelected == NavigationIndex.earn) { widthContainer = 30; @@ -148,16 +141,6 @@ class _BottomNavigationBarMainScreenState context.go(PoolListSheet.routerPage); break; case 2: - setState(() { - ref - .read( - navigationIndexMainScreenProvider.notifier, - ) - .state = NavigationIndex.farm; - }); - context.go(FarmListSheet.routerPage); - break; - case 3: setState(() { ref .read( diff --git a/lib/ui/views/main_screen/layouts/main_screen_list.dart b/lib/ui/views/main_screen/layouts/main_screen_list.dart index 6bdf0d89..62701367 100644 --- a/lib/ui/views/main_screen/layouts/main_screen_list.dart +++ b/lib/ui/views/main_screen/layouts/main_screen_list.dart @@ -60,10 +60,6 @@ class MainScreenListState extends ConsumerState { aedappfm.Iconsax.wallet_money ), (AppLocalizations.of(context)!.menu_earn, aedappfm.Iconsax.wallet_add), - ( - AppLocalizations.of(context)!.menu_bridge, - aedappfm.Iconsax.recovery_convert - ), ]; } diff --git a/lib/ui/views/main_screen/layouts/main_screen_sheet.dart b/lib/ui/views/main_screen/layouts/main_screen_sheet.dart index f498a918..2a88adc4 100644 --- a/lib/ui/views/main_screen/layouts/main_screen_sheet.dart +++ b/lib/ui/views/main_screen/layouts/main_screen_sheet.dart @@ -64,10 +64,6 @@ class MainScreenSheetState extends ConsumerState { aedappfm.Iconsax.wallet_money ), (AppLocalizations.of(context)!.menu_earn, aedappfm.Iconsax.wallet_add), - ( - AppLocalizations.of(context)!.menu_bridge, - aedappfm.Iconsax.recovery_convert - ), ]; } diff --git a/lib/ui/views/pool_list/components/pool_details_front.dart b/lib/ui/views/pool_list/components/pool_details_front.dart index f07d760d..a5cb45d5 100755 --- a/lib/ui/views/pool_list/components/pool_details_front.dart +++ b/lib/ui/views/pool_list/components/pool_details_front.dart @@ -1,6 +1,7 @@ import 'package:aedex/domain/models/dex_pool.dart'; import 'package:aedex/ui/views/pool_list/bloc/provider.dart'; import 'package:aedex/ui/views/pool_list/components/pool_details_info_apr.dart'; +import 'package:aedex/ui/views/pool_list/components/pool_details_info_apr_farm.dart'; import 'package:aedex/ui/views/pool_list/components/pool_details_info_buttons.dart'; import 'package:aedex/ui/views/pool_list/components/pool_details_info_fees.dart'; import 'package:aedex/ui/views/pool_list/components/pool_details_info_header.dart'; @@ -52,7 +53,9 @@ class PoolDetailsFrontState extends ConsumerState PoolDetailsInfoAPR( tvl: widget.pool.infos?.tvl ?? 0, fee24h: widget.pool.infos?.fee24h ?? 0, - ), + ) + else + PoolDetailsInfoAPRFarm(poolAddress: widget.pool.poolAddress), ], ), const SizedBox(height: 30), diff --git a/lib/ui/views/pool_list/components/pool_details_info_apr_farm.dart b/lib/ui/views/pool_list/components/pool_details_info_apr_farm.dart new file mode 100755 index 00000000..bcbb270d --- /dev/null +++ b/lib/ui/views/pool_list/components/pool_details_info_apr_farm.dart @@ -0,0 +1,96 @@ +import 'package:aedex/application/farm/dex_farm_lock.dart'; +import 'package:aedex/application/session/provider.dart'; +import 'package:aedex/domain/models/dex_farm_lock.dart'; +import 'package:aedex/ui/views/util/app_styles.dart'; +import 'package:aedex/ui/views/util/components/pool_farm_available.dart'; +import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart' + as aedappfm; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/localizations.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class PoolDetailsInfoAPRFarm extends ConsumerStatefulWidget { + const PoolDetailsInfoAPRFarm({ + required this.poolAddress, + super.key, + }); + + final String poolAddress; + + @override + ConsumerState createState() => + PoolDetailsInfoAPRFarmState(); +} + +class PoolDetailsInfoAPRFarmState + extends ConsumerState { + double apr3years = 0; + + @override + void initState() { + Future.delayed(Duration.zero, () async { + final env = ref.read(SessionProviders.session).envSelected; + final contextAddresses = + PoolFarmAvailableState().getContextAddresses(env); + + final farmLockAddress = contextAddresses.aeETHUCOFarmLockAddress; + if (farmLockAddress.isNotEmpty) { + final farmLock = await ref.read( + DexFarmLockProviders.getFarmLockInfos( + farmLockAddress, + widget.poolAddress, + dexFarmLockInput: DexFarmLock( + poolAddress: widget.poolAddress, + farmAddress: farmLockAddress, + ), + ).future, + ); + setState(() { + apr3years = farmLock!.stats['7']?.aprEstimation ?? 0; + }); + } + }); + super.initState(); + } + + @override + Widget build( + BuildContext context, + ) { + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Row( + children: [ + SelectableText( + AppLocalizations.of(context)!.poolDetailsInfoAPRFarm3Years, + style: AppTextStyles.bodyLarge(context), + ), + ], + ), + if (apr3years == 0) + Text( + '__,__%', + style: Theme.of(context).textTheme.headlineMedium!.copyWith( + fontSize: aedappfm.Responsive.fontSizeFromTextStyle( + context, + Theme.of(context).textTheme.headlineMedium!, + ), + color: aedappfm.AppThemeBase.secondaryColor, + ), + ) + else + Text( + '${(apr3years * 100).formatNumber(precision: 2)}%', + style: Theme.of(context).textTheme.headlineMedium!.copyWith( + fontSize: aedappfm.Responsive.fontSizeFromTextStyle( + context, + Theme.of(context).textTheme.headlineMedium!, + ), + color: aedappfm.AppThemeBase.secondaryColor, + ), + ), + ], + ); + } +} diff --git a/lib/ui/views/pool_list/components/pool_details_info_header.dart b/lib/ui/views/pool_list/components/pool_details_info_header.dart index c4d46062..40ed2627 100755 --- a/lib/ui/views/pool_list/components/pool_details_info_header.dart +++ b/lib/ui/views/pool_list/components/pool_details_info_header.dart @@ -29,12 +29,11 @@ class PoolDetailsInfoHeader extends ConsumerWidget { final env = ref.watch(SessionProviders.session).envSelected; final contextAddresses = PoolFarmAvailableState().getContextAddresses(env); - return Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, @@ -77,24 +76,24 @@ class PoolDetailsInfoHeader extends ConsumerWidget { iconSize: 22, ), ), - if (displayPoolFarmAvailable && - contextAddresses.aeETHUCOPoolAddress.toUpperCase() == - pool!.poolAddress.toUpperCase()) - const PoolFarmAvailable(), ], ), - Row( - children: [ - VerifiedPoolIcon( - isVerified: pool!.isVerified, - ), - LiquidityPositionsIcon( - lpTokenInUserBalance: pool!.lpTokenInUserBalance, - ), - LiquidityFavoriteIcon( - isFavorite: pool!.isFavorite, - ), - ], + if (displayPoolFarmAvailable && + contextAddresses.aeETHUCOPoolAddress.toUpperCase() == + pool!.poolAddress.toUpperCase()) + const PoolFarmAvailable(), + ], + ), + Row( + children: [ + VerifiedPoolIcon( + isVerified: pool!.isVerified, + ), + LiquidityPositionsIcon( + lpTokenInUserBalance: pool!.lpTokenInUserBalance, + ), + LiquidityFavoriteIcon( + isFavorite: pool!.isFavorite, ), ], ),