From 828fcba187fa161e86bb2e52c4be461c9457c23f Mon Sep 17 00:00:00 2001 From: Byackee Date: Mon, 25 Nov 2024 07:34:00 +0100 Subject: [PATCH] prepa 1.5.0 --- .../res/mipmap-anydpi-v26/ic_launcher.xml | 4 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4574 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2956 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6265 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9858 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14366 bytes lib/generated/intl/messages_all.dart | 7 +- lib/generated/intl/messages_en.dart | 282 ++-- lib/generated/intl/messages_es.dart | 350 +++-- lib/generated/intl/messages_fr.dart | 344 +++-- lib/generated/intl/messages_it.dart | 338 +++-- lib/generated/intl/messages_pt.dart | 348 +++-- lib/generated/intl/messages_zh.dart | 81 +- lib/generated/l10n.dart | 70 +- lib/l10n/intl_en.arb | 6 + lib/l10n/intl_es.arb | 6 + lib/l10n/intl_fr.arb | 6 + lib/l10n/intl_it.arb | 6 + lib/l10n/intl_pt.arb | 6 + lib/l10n/intl_zh.arb | 6 + lib/pages/Statistics/portfolio_stats.dart | 148 ++- lib/pages/Statistics/wallet_stats.dart | 1176 +++++++++++------ lib/pages/dashboard/dashboard_page.dart | 560 ++++++-- lib/pages/portfolio/portfolio_display_1.dart | 8 +- lib/pages/portfolio/portfolio_display_2.dart | 10 +- lib/pages/token_bottom_sheet.dart | 969 ++++++++++---- lib/settings/theme.dart | 3 + pubspec.yaml | 2 +- 28 files changed, 3394 insertions(+), 1342 deletions(-) create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 036d09b..55aebf9 100644 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,3 @@ - - - \ No newline at end of file + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0d78b2a31c1edbd1c2b6ba32298e8933f73e67dd GIT binary patch literal 4574 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 IM6N<$f})ze4gdfE literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..87f0e197ddb9c1bc51f2f078cde29df53ca8d8de GIT binary patch literal 2956 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e958f82cfc8a210b6faf6d653ef623d32dc38de4 GIT binary patch literal 9858 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..35a61f4ee80a479e97967d3f0f57b57f9ab25e61 GIT binary patch literal 14366 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 initializeMessages(String localeName) { - var availableLocale = Intl.verifiedLocale(localeName, (locale) => _deferredLibraries[locale] != null, onFailure: (_) => null); + var availableLocale = Intl.verifiedLocale( + localeName, (locale) => _deferredLibraries[locale] != null, + onFailure: (_) => null); if (availableLocale == null) { return new SynchronousFuture(false); } @@ -74,7 +76,8 @@ bool _messagesExistFor(String locale) { } MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) { - var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null); + var actualLocale = + Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null); if (actualLocale == null) return null; return _findExact(actualLocale); } diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index e5863c7..3a8a4fc 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -29,48 +29,63 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { "about": MessageLookupByLibrary.simpleMessage("About"), - "aboutImportExport": - MessageLookupByLibrary.simpleMessage("This function allows you to save and re-import balance history data (wallet and RMM) into a ZIP file."), - "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage("Import/Export Function"), - "addressCopied": MessageLookupByLibrary.simpleMessage("Address copied to clipboard"), + "aboutImportExport": MessageLookupByLibrary.simpleMessage( + "This function allows you to save and re-import balance history data (wallet and RMM) into a ZIP file."), + "aboutImportExportTitle": + MessageLookupByLibrary.simpleMessage("Import/Export Function"), + "addressCopied": + MessageLookupByLibrary.simpleMessage("Address copied to clipboard"), "allCities": MessageLookupByLibrary.simpleMessage("All Cities"), - "allWorkCorrectly": MessageLookupByLibrary.simpleMessage("Everything is working correctly"), + "allWorkCorrectly": MessageLookupByLibrary.simpleMessage( + "Everything is working correctly"), "amount": MessageLookupByLibrary.simpleMessage("Amount"), - "annualPercentageYield": MessageLookupByLibrary.simpleMessage("Annual yield"), + "annualPercentageYield": + MessageLookupByLibrary.simpleMessage("Annual yield"), "annualYield": MessageLookupByLibrary.simpleMessage("Net Yield"), "annually": MessageLookupByLibrary.simpleMessage("Annually"), - "appDescription": MessageLookupByLibrary.simpleMessage("mobile app for Community"), + "appDescription": + MessageLookupByLibrary.simpleMessage("mobile app for Community"), "appName": MessageLookupByLibrary.simpleMessage("RealToken"), "application": MessageLookupByLibrary.simpleMessage("Application"), "apy": MessageLookupByLibrary.simpleMessage("APY"), "apyHistory": MessageLookupByLibrary.simpleMessage("APY History"), - "areYouSureClearData": MessageLookupByLibrary.simpleMessage("Are you sure you want to clear cache and data?"), + "areYouSureClearData": MessageLookupByLibrary.simpleMessage( + "Are you sure you want to clear cache and data?"), "ascending": MessageLookupByLibrary.simpleMessage("Ascending"), "author": MessageLookupByLibrary.simpleMessage("Author"), "averageApy": MessageLookupByLibrary.simpleMessage("average APY"), "balance": MessageLookupByLibrary.simpleMessage("Balance"), + "barChart": MessageLookupByLibrary.simpleMessage("Bar Chart"), "bedroomBath": MessageLookupByLibrary.simpleMessage("Bedroom/Bath"), "blockchain": MessageLookupByLibrary.simpleMessage("Blockchain"), "borrowBalance": MessageLookupByLibrary.simpleMessage("Borrows"), "brute": MessageLookupByLibrary.simpleMessage("Gross"), "buy_token": MessageLookupByLibrary.simpleMessage("Buy"), "cancel": MessageLookupByLibrary.simpleMessage("Cancel"), - "characteristics": MessageLookupByLibrary.simpleMessage("Characteristics"), + "characteristics": + MessageLookupByLibrary.simpleMessage("Characteristics"), "chinese": MessageLookupByLibrary.simpleMessage("中文"), - "clearCacheData": MessageLookupByLibrary.simpleMessage("Clear Cache/Data"), + "city": MessageLookupByLibrary.simpleMessage("City"), + "clearCacheData": + MessageLookupByLibrary.simpleMessage("Clear Cache/Data"), "close": MessageLookupByLibrary.simpleMessage("Close"), "commercial": MessageLookupByLibrary.simpleMessage("Commercial"), "condominium": MessageLookupByLibrary.simpleMessage("Condominium"), "confirm": MessageLookupByLibrary.simpleMessage("Confirm"), "confirmAction": MessageLookupByLibrary.simpleMessage("Confirm Action"), - "constructionYear": MessageLookupByLibrary.simpleMessage("Year of construction"), + "constructionYear": + MessageLookupByLibrary.simpleMessage("Year of construction"), "contractType": MessageLookupByLibrary.simpleMessage("Contract type"), - "convertSqft": MessageLookupByLibrary.simpleMessage("Convert sqft to m²"), + "convertSqft": + MessageLookupByLibrary.simpleMessage("Convert sqft to m²"), "copy": MessageLookupByLibrary.simpleMessage("Copy"), + "country": MessageLookupByLibrary.simpleMessage("Country"), "creation_date": MessageLookupByLibrary.simpleMessage("Creation Date"), "crypto": MessageLookupByLibrary.simpleMessage("Crypto"), - "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage("Crypto Donation Address"), - "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage("Cumulative Rent Graph"), + "cryptoDonationAddress": + MessageLookupByLibrary.simpleMessage("Crypto Donation Address"), + "cumulativeRentGraph": + MessageLookupByLibrary.simpleMessage("Cumulative Rent Graph"), "currency": MessageLookupByLibrary.simpleMessage("Currency"), "daily": MessageLookupByLibrary.simpleMessage("Daily"), "dark": MessageLookupByLibrary.simpleMessage("Dark"), @@ -83,185 +98,268 @@ class MessageLookup extends MessageLookupByLibrary { "depositBalance": MessageLookupByLibrary.simpleMessage("Deposits"), "descending": MessageLookupByLibrary.simpleMessage("Descending"), "donate": MessageLookupByLibrary.simpleMessage("Donate"), - "donationMessage": MessageLookupByLibrary.simpleMessage("If you like this app and want to support its development, you can donate."), + "donationMessage": MessageLookupByLibrary.simpleMessage( + "If you like this app and want to support its development, you can donate."), "duplex": MessageLookupByLibrary.simpleMessage("Duplex"), - "duplicate": MessageLookupByLibrary.simpleMessage("Properties present in multiple wallets/RMM"), - "duplicate_title": MessageLookupByLibrary.simpleMessage("Duplicate properties"), + "duplicate": MessageLookupByLibrary.simpleMessage( + "Properties present in multiple wallets/RMM"), + "duplicate_title": + MessageLookupByLibrary.simpleMessage("Duplicate properties"), "edit": MessageLookupByLibrary.simpleMessage("Edit"), - "editWalletBalance": MessageLookupByLibrary.simpleMessage("Edit Wallet Balance History"), + "editWalletBalance": + MessageLookupByLibrary.simpleMessage("Edit Wallet Balance History"), "english": MessageLookupByLibrary.simpleMessage("English"), - "enterValidNumber": MessageLookupByLibrary.simpleMessage("Please enter a valid number"), + "enterValidNumber": + MessageLookupByLibrary.simpleMessage("Please enter a valid number"), "error_occurred": m0, - "ethereumContract": MessageLookupByLibrary.simpleMessage("Ethereum contract"), + "ethereumContract": + MessageLookupByLibrary.simpleMessage("Ethereum contract"), "exportData": MessageLookupByLibrary.simpleMessage("Export Data"), - "exportFailed": MessageLookupByLibrary.simpleMessage("Failed to export data"), - "exportSuccess": MessageLookupByLibrary.simpleMessage("Data exported successfully"), + "exportFailed": + MessageLookupByLibrary.simpleMessage("Failed to export data"), + "exportSuccess": + MessageLookupByLibrary.simpleMessage("Data exported successfully"), "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "finances": MessageLookupByLibrary.simpleMessage("Finances"), "french": MessageLookupByLibrary.simpleMessage("Francais"), "futureRents": MessageLookupByLibrary.simpleMessage("Future Rents"), - "gnosisContract": MessageLookupByLibrary.simpleMessage("Gnosis contract"), - "grossRentMonth": MessageLookupByLibrary.simpleMessage("Gross rent per month"), + "gnosisContract": + MessageLookupByLibrary.simpleMessage("Gnosis contract"), + "grossRentMonth": + MessageLookupByLibrary.simpleMessage("Gross rent per month"), "groupedRentGraph": MessageLookupByLibrary.simpleMessage("Rents"), "hello": MessageLookupByLibrary.simpleMessage("Hello"), "hours": MessageLookupByLibrary.simpleMessage("Hours"), "importData": MessageLookupByLibrary.simpleMessage("Import Data"), - "importExportData": MessageLookupByLibrary.simpleMessage("Import or export data (zip)"), - "importFailed": MessageLookupByLibrary.simpleMessage("Failed to import data"), - "importSuccess": MessageLookupByLibrary.simpleMessage("Data imported successfully"), - "initialLaunchDate": MessageLookupByLibrary.simpleMessage("Initial launch date"), - "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage("Maintenance reserve"), - "initialPrice": MessageLookupByLibrary.simpleMessage("Average purchase price"), - "initialPriceRemoved": MessageLookupByLibrary.simpleMessage("Average purchase price removed"), - "initialPriceUpdated": MessageLookupByLibrary.simpleMessage("Average purchase price updated"), + "importExportData": + MessageLookupByLibrary.simpleMessage("Import or export data (zip)"), + "importFailed": + MessageLookupByLibrary.simpleMessage("Failed to import data"), + "importSuccess": + MessageLookupByLibrary.simpleMessage("Data imported successfully"), + "initialLaunchDate": + MessageLookupByLibrary.simpleMessage("Initial launch date"), + "initialMaintenanceReserve": + MessageLookupByLibrary.simpleMessage("Maintenance reserve"), + "initialPrice": + MessageLookupByLibrary.simpleMessage("Average purchase price"), + "initialPriceRemoved": MessageLookupByLibrary.simpleMessage( + "Average purchase price removed"), + "initialPriceUpdated": MessageLookupByLibrary.simpleMessage( + "Average purchase price updated"), "insights": MessageLookupByLibrary.simpleMessage("Insights"), "insurance": MessageLookupByLibrary.simpleMessage("Insurance"), "italian": MessageLookupByLibrary.simpleMessage("Italiano"), "language": MessageLookupByLibrary.simpleMessage("Language"), "languageUpdated": m1, "lastExecution": MessageLookupByLibrary.simpleMessage("Last update"), - "lastRentReceived": MessageLookupByLibrary.simpleMessage("Your last rent received amounts to "), + "lastRentReceived": MessageLookupByLibrary.simpleMessage( + "Your last rent received amounts to "), "light": MessageLookupByLibrary.simpleMessage("Light"), + "lineChart": MessageLookupByLibrary.simpleMessage("Line Chart"), "lotSize": MessageLookupByLibrary.simpleMessage("Lot size"), "manageAddresses": MessageLookupByLibrary.simpleMessage("Add wallet"), - "manageEvmAddresses": MessageLookupByLibrary.simpleMessage("Manage Wallets"), + "manageEvmAddresses": + MessageLookupByLibrary.simpleMessage("Manage Wallets"), "manualEdit": MessageLookupByLibrary.simpleMessage("Manual Edit"), "maps": MessageLookupByLibrary.simpleMessage("Maps"), "mfrPortfolio": MessageLookupByLibrary.simpleMessage("MFR Portfolio"), - "miscellaneousCosts": MessageLookupByLibrary.simpleMessage("Miscellaneous Costs"), + "miscellaneousCosts": + MessageLookupByLibrary.simpleMessage("Miscellaneous Costs"), "mixedUse": MessageLookupByLibrary.simpleMessage("Mixed-Use"), "month": MessageLookupByLibrary.simpleMessage("Month"), "monthly": MessageLookupByLibrary.simpleMessage("Monthly"), "multiFamily": MessageLookupByLibrary.simpleMessage("Multi Family"), - "nameUnavailable": MessageLookupByLibrary.simpleMessage("Name Unavailable"), + "nameUnavailable": + MessageLookupByLibrary.simpleMessage("Name Unavailable"), "net": MessageLookupByLibrary.simpleMessage("Net"), - "netAnnualRent": MessageLookupByLibrary.simpleMessage("Net Annual Rent"), + "netAnnualRent": + MessageLookupByLibrary.simpleMessage("Net Annual Rent"), "netApyHelp": MessageLookupByLibrary.simpleMessage( "The net yield is calculated by weighting the yields of the portfolios (wallet/RMM) and the deposit/borrow balances with their respective rates."), - "netRentMonth": MessageLookupByLibrary.simpleMessage("Net rent per month"), + "netRentMonth": + MessageLookupByLibrary.simpleMessage("Net rent per month"), "network": MessageLookupByLibrary.simpleMessage("Network"), "nextRondays": MessageLookupByLibrary.simpleMessage("Next Rondays"), - "noCommunicatedDate": MessageLookupByLibrary.simpleMessage("Date not provided"), - "noDataAvailable": MessageLookupByLibrary.simpleMessage("No data available, please add a new wallet"), - "noFutureRents": MessageLookupByLibrary.simpleMessage("No future rents"), - "noImageAvailable": MessageLookupByLibrary.simpleMessage("Image link not available"), - "noPriceEvolution": MessageLookupByLibrary.simpleMessage("No price evolution. The last price is:"), - "noPropertiesForSale": MessageLookupByLibrary.simpleMessage("No properties for sale"), - "noRecentUpdates": MessageLookupByLibrary.simpleMessage("No recent changes available."), - "noRentReceived": MessageLookupByLibrary.simpleMessage("No rent received"), - "noYieldEvolution": MessageLookupByLibrary.simpleMessage("No yield evolution. The last yield is:"), - "no_market_offers_available": MessageLookupByLibrary.simpleMessage("No market offers available"), + "noCommunicatedDate": + MessageLookupByLibrary.simpleMessage("Date not provided"), + "noDataAvailable": MessageLookupByLibrary.simpleMessage( + "No data available, please add a new wallet"), + "noFutureRents": + MessageLookupByLibrary.simpleMessage("No future rents"), + "noImageAvailable": + MessageLookupByLibrary.simpleMessage("Image link not available"), + "noPriceEvolution": MessageLookupByLibrary.simpleMessage( + "No price evolution. The last price is:"), + "noPropertiesForSale": + MessageLookupByLibrary.simpleMessage("No properties for sale"), + "noRecentUpdates": MessageLookupByLibrary.simpleMessage( + "No recent changes available."), + "noRentReceived": + MessageLookupByLibrary.simpleMessage("No rent received"), + "noYieldEvolution": MessageLookupByLibrary.simpleMessage( + "No yield evolution. The last yield is:"), + "no_market_offers_available": + MessageLookupByLibrary.simpleMessage("No market offers available"), "notSpecified": MessageLookupByLibrary.simpleMessage("Not specified"), "offer_id": MessageLookupByLibrary.simpleMessage("Offer ID"), "offering": MessageLookupByLibrary.simpleMessage("Offering"), "other": MessageLookupByLibrary.simpleMessage("Other"), "others": MessageLookupByLibrary.simpleMessage("Others"), - "othersTitle": MessageLookupByLibrary.simpleMessage("Details of the Others section"), + "othersTitle": MessageLookupByLibrary.simpleMessage( + "Details of the Others section"), "paypal": MessageLookupByLibrary.simpleMessage("PayPal"), "period": MessageLookupByLibrary.simpleMessage("Period"), "portfolio": MessageLookupByLibrary.simpleMessage("Portfolio"), "portuguese": MessageLookupByLibrary.simpleMessage("Português"), - "priceEvolution": MessageLookupByLibrary.simpleMessage("Price evolution"), - "priceEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Price evolution:"), + "priceEvolution": + MessageLookupByLibrary.simpleMessage("Price evolution"), + "priceEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Price evolution:"), "properties": MessageLookupByLibrary.simpleMessage("Properties"), - "propertiesForSale": MessageLookupByLibrary.simpleMessage("Properties for Sale"), - "properties_for_sale": MessageLookupByLibrary.simpleMessage("Properties For Sale"), - "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage("Property Maintenance (Monthly)"), - "propertyManagement": MessageLookupByLibrary.simpleMessage("Property Management"), - "propertyStories": MessageLookupByLibrary.simpleMessage("Number of stories"), + "propertiesForSale": + MessageLookupByLibrary.simpleMessage("Properties for Sale"), + "properties_for_sale": + MessageLookupByLibrary.simpleMessage("Properties For Sale"), + "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage( + "Property Maintenance (Monthly)"), + "propertyManagement": + MessageLookupByLibrary.simpleMessage("Property Management"), + "propertyStories": + MessageLookupByLibrary.simpleMessage("Number of stories"), "propertyTaxes": MessageLookupByLibrary.simpleMessage("Property Taxes"), "propertyType": MessageLookupByLibrary.simpleMessage("Property Type"), - "realTPerformance": MessageLookupByLibrary.simpleMessage("RealT Performance"), + "realTPerformance": + MessageLookupByLibrary.simpleMessage("RealT Performance"), "realTTitle": MessageLookupByLibrary.simpleMessage("RealT"), - "realTokensList": MessageLookupByLibrary.simpleMessage("RealTokens list"), + "realTokensList": + MessageLookupByLibrary.simpleMessage("RealTokens list"), "realt": MessageLookupByLibrary.simpleMessage("RealT"), - "realtListingFee": MessageLookupByLibrary.simpleMessage("Realt Listing Fee"), + "realtListingFee": + MessageLookupByLibrary.simpleMessage("Realt Listing Fee"), "realtPlatform": MessageLookupByLibrary.simpleMessage("RealT Platform"), "recentChanges": MessageLookupByLibrary.simpleMessage("Recent changes"), - "recentUpdatesTitle": MessageLookupByLibrary.simpleMessage("Last 30 days"), - "renovationReserve": MessageLookupByLibrary.simpleMessage("Renovation Reserve"), - "rentGraph": MessageLookupByLibrary.simpleMessage("Rent Received Graph"), + "recentUpdatesTitle": + MessageLookupByLibrary.simpleMessage("Last 30 days"), + "region": MessageLookupByLibrary.simpleMessage("Region"), + "renovationReserve": + MessageLookupByLibrary.simpleMessage("Renovation Reserve"), + "rentDistribution": + MessageLookupByLibrary.simpleMessage("Rent Distribution"), + "rentGraph": + MessageLookupByLibrary.simpleMessage("Rent Received Graph"), "rentStartDate": MessageLookupByLibrary.simpleMessage("First rent"), - "rentStartFuture": MessageLookupByLibrary.simpleMessage("Rent not started"), + "rentStartFuture": + MessageLookupByLibrary.simpleMessage("Rent not started"), "rentalStatus": MessageLookupByLibrary.simpleMessage("Rental status"), "rentalStatusAll": MessageLookupByLibrary.simpleMessage("All"), - "rentalStatusNotRented": MessageLookupByLibrary.simpleMessage("Not Rented"), - "rentalStatusPartiallyRented": MessageLookupByLibrary.simpleMessage("Partially Rented"), + "rentalStatusNotRented": + MessageLookupByLibrary.simpleMessage("Not Rented"), + "rentalStatusPartiallyRented": + MessageLookupByLibrary.simpleMessage("Partially Rented"), "rentalStatusRented": MessageLookupByLibrary.simpleMessage("Rented"), "rentalType": MessageLookupByLibrary.simpleMessage("Rental type"), "rented": MessageLookupByLibrary.simpleMessage("Rented"), "rentedUnits": MessageLookupByLibrary.simpleMessage("Rented Units"), "rents": MessageLookupByLibrary.simpleMessage("Rents"), - "resortBungalow": MessageLookupByLibrary.simpleMessage("Resort Bungalow"), + "resortBungalow": + MessageLookupByLibrary.simpleMessage("Resort Bungalow"), "revenue": MessageLookupByLibrary.simpleMessage("Revenue"), "rmm": MessageLookupByLibrary.simpleMessage("RMM"), "roiAlertInfo": MessageLookupByLibrary.simpleMessage( "This ROI feature is in beta and is currently calculated based on the income received from the property and the initial token value."), "roiHistory": MessageLookupByLibrary.simpleMessage("ROI History"), - "roiPerProperties": MessageLookupByLibrary.simpleMessage("Property ROI"), + "roiPerProperties": + MessageLookupByLibrary.simpleMessage("Property ROI"), "rwaHoldings": MessageLookupByLibrary.simpleMessage("RWA Holdings SA"), "save": MessageLookupByLibrary.simpleMessage("Save"), "searchHint": MessageLookupByLibrary.simpleMessage("Search..."), "secondary": MessageLookupByLibrary.simpleMessage("Secondary"), - "secondary_offers_related_to_token": MessageLookupByLibrary.simpleMessage("YAMM offers related to token"), + "secondary_offers_related_to_token": + MessageLookupByLibrary.simpleMessage( + "YAMM offers related to token"), "section8paid": MessageLookupByLibrary.simpleMessage("Section 8"), "sell_token": MessageLookupByLibrary.simpleMessage("Sell"), - "sendDonations": MessageLookupByLibrary.simpleMessage("Send your donations to the following address:"), - "serviceStatusPage": MessageLookupByLibrary.simpleMessage("Services status"), + "sendDonations": MessageLookupByLibrary.simpleMessage( + "Send your donations to the following address:"), + "serviceStatusPage": + MessageLookupByLibrary.simpleMessage("Services status"), "settings": MessageLookupByLibrary.simpleMessage("Settings"), "settingsTitle": MessageLookupByLibrary.simpleMessage("Settings"), "sfrPortfolio": MessageLookupByLibrary.simpleMessage("SFR Portfolio"), "singleFamily": MessageLookupByLibrary.simpleMessage("Single Family"), - "somethingWrong": MessageLookupByLibrary.simpleMessage("The data may not be up to date"), + "somethingWrong": MessageLookupByLibrary.simpleMessage( + "The data may not be up to date"), "sortByAPY": MessageLookupByLibrary.simpleMessage("Sort by APY"), - "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage("Sort by recently added"), + "sortByInitialLaunchDate": + MessageLookupByLibrary.simpleMessage("Sort by recently added"), "sortByName": MessageLookupByLibrary.simpleMessage("Sort by Name"), "sortByValue": MessageLookupByLibrary.simpleMessage("Sort by Value"), "spanish": MessageLookupByLibrary.simpleMessage("Español"), - "specialThanks": MessageLookupByLibrary.simpleMessage("Special thanks to @Sigri, @ehpst, and @pitsbi for their support."), + "specialThanks": MessageLookupByLibrary.simpleMessage( + "Special thanks to @Sigri, @ehpst, and @pitsbi for their support."), "squareFeet": MessageLookupByLibrary.simpleMessage("Interior size"), "statistics": MessageLookupByLibrary.simpleMessage("Statistics"), - "supportProject": MessageLookupByLibrary.simpleMessage("Support the project"), + "supportProject": + MessageLookupByLibrary.simpleMessage("Support the project"), "textSize": MessageLookupByLibrary.simpleMessage("Text size"), - "thankYouMessage": MessageLookupByLibrary.simpleMessage("Thank you to everyone who contributed to this project."), + "thankYouMessage": MessageLookupByLibrary.simpleMessage( + "Thank you to everyone who contributed to this project."), "thanks": MessageLookupByLibrary.simpleMessage("Thanks"), "themeUpdated": m2, "tokenAddress": MessageLookupByLibrary.simpleMessage("Token address"), - "tokenDistribution": MessageLookupByLibrary.simpleMessage("Token Distribution by Property Type"), - "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage("Token Distribution by City"), - "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage("Token Distribution by Country"), - "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage("Token Distribution by Region"), + "tokenDistribution": MessageLookupByLibrary.simpleMessage( + "Token Distribution by Property Type"), + "tokenDistributionByCity": + MessageLookupByLibrary.simpleMessage("Token Distribution by City"), + "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage( + "Token Distribution by Country"), + "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage( + "Token Distribution by Region"), "tokenSymbol": MessageLookupByLibrary.simpleMessage("Token symbol"), "token_amount": MessageLookupByLibrary.simpleMessage("Token Amount"), "token_value": MessageLookupByLibrary.simpleMessage("Token Value"), "tokens": MessageLookupByLibrary.simpleMessage("Tokens"), "totalExpenses": MessageLookupByLibrary.simpleMessage("Total Expenses"), - "totalInvestment": MessageLookupByLibrary.simpleMessage("Total investment"), - "totalPortfolio": MessageLookupByLibrary.simpleMessage("Total Portfolio"), - "totalRentReceived": MessageLookupByLibrary.simpleMessage("Total of revenues"), + "totalInvestment": + MessageLookupByLibrary.simpleMessage("Total investment"), + "totalPortfolio": + MessageLookupByLibrary.simpleMessage("Total Portfolio"), + "totalRentReceived": + MessageLookupByLibrary.simpleMessage("Total of revenues"), "totalTokens": MessageLookupByLibrary.simpleMessage("Total Tokens"), "totalUnits": MessageLookupByLibrary.simpleMessage("Total units"), "totalValue": MessageLookupByLibrary.simpleMessage("Total Value"), - "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage("Asset price"), + "underlyingAssetPrice": + MessageLookupByLibrary.simpleMessage("Asset price"), "units": MessageLookupByLibrary.simpleMessage("units"), "unknown": MessageLookupByLibrary.simpleMessage("Unknown"), "unknownCity": MessageLookupByLibrary.simpleMessage("Unknown City"), - "unknownCountry": MessageLookupByLibrary.simpleMessage("Unknown country"), - "unknownTokenName": MessageLookupByLibrary.simpleMessage("Unknown name"), - "usdcBorrowBalance": MessageLookupByLibrary.simpleMessage("USDC Borrow Balance"), - "usdcDepositBalance": MessageLookupByLibrary.simpleMessage("USDC Deposit Balance"), + "unknownCountry": + MessageLookupByLibrary.simpleMessage("Unknown country"), + "unknownTokenName": + MessageLookupByLibrary.simpleMessage("Unknown name"), + "usdcBorrowBalance": + MessageLookupByLibrary.simpleMessage("USDC Borrow Balance"), + "usdcDepositBalance": + MessageLookupByLibrary.simpleMessage("USDC Deposit Balance"), "version": MessageLookupByLibrary.simpleMessage("Version"), "viewOnMap": MessageLookupByLibrary.simpleMessage("View on map"), "viewOnRealT": MessageLookupByLibrary.simpleMessage("View on RealT"), "wallet": MessageLookupByLibrary.simpleMessage("Wallet"), - "walletBalanceHistory": MessageLookupByLibrary.simpleMessage("Wallet Balance History"), + "walletBalanceHistory": + MessageLookupByLibrary.simpleMessage("Wallet Balance History"), "week": MessageLookupByLibrary.simpleMessage("Week"), "weekly": MessageLookupByLibrary.simpleMessage("Weekly"), "weeks": MessageLookupByLibrary.simpleMessage("Weeks"), - "xdaiBorrowBalance": MessageLookupByLibrary.simpleMessage("XDAI Borrow Balance"), - "xdaiDepositBalance": MessageLookupByLibrary.simpleMessage("XDAI Deposit Balance"), + "xdaiBorrowBalance": + MessageLookupByLibrary.simpleMessage("XDAI Borrow Balance"), + "xdaiDepositBalance": + MessageLookupByLibrary.simpleMessage("XDAI Deposit Balance"), "year": MessageLookupByLibrary.simpleMessage("Year"), - "yieldEvolution": MessageLookupByLibrary.simpleMessage("Yield evolution"), - "yieldEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Yield evolution:") + "yieldEvolution": + MessageLookupByLibrary.simpleMessage("Yield evolution"), + "yieldEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Yield evolution:") }; } diff --git a/lib/generated/intl/messages_es.dart b/lib/generated/intl/messages_es.dart index 548c564..f60d28a 100644 --- a/lib/generated/intl/messages_es.dart +++ b/lib/generated/intl/messages_es.dart @@ -31,46 +31,65 @@ class MessageLookup extends MessageLookupByLibrary { "about": MessageLookupByLibrary.simpleMessage("Acerca de"), "aboutImportExport": MessageLookupByLibrary.simpleMessage( "Esta función permite guardar e importar nuevamente los datos del historial de balances (cartera y RMM) en un archivo ZIP."), - "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage("Función de Importación/Exportación"), - "addressCopied": MessageLookupByLibrary.simpleMessage("Dirección copiada al portapapeles"), + "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage( + "Función de Importación/Exportación"), + "addressCopied": MessageLookupByLibrary.simpleMessage( + "Dirección copiada al portapapeles"), "allCities": MessageLookupByLibrary.simpleMessage("Todas las ciudades"), - "allWorkCorrectly": MessageLookupByLibrary.simpleMessage("Todo funciona correctamente"), + "allWorkCorrectly": + MessageLookupByLibrary.simpleMessage("Todo funciona correctamente"), "amount": MessageLookupByLibrary.simpleMessage("Cantidad"), - "annualPercentageYield": MessageLookupByLibrary.simpleMessage("Rendimiento anual"), + "annualPercentageYield": + MessageLookupByLibrary.simpleMessage("Rendimiento anual"), "annualYield": MessageLookupByLibrary.simpleMessage("Rendimiento neto"), "annually": MessageLookupByLibrary.simpleMessage("Anual"), - "appDescription": MessageLookupByLibrary.simpleMessage("Aplicación móvil para la comunidad"), + "appDescription": MessageLookupByLibrary.simpleMessage( + "Aplicación móvil para la comunidad"), "appName": MessageLookupByLibrary.simpleMessage("RealToken"), "application": MessageLookupByLibrary.simpleMessage("Aplicación"), "apy": MessageLookupByLibrary.simpleMessage("APY"), "apyHistory": MessageLookupByLibrary.simpleMessage("Historial APY"), - "areYouSureClearData": MessageLookupByLibrary.simpleMessage("¿Estás seguro de que deseas borrar la caché y los datos?"), + "areYouSureClearData": MessageLookupByLibrary.simpleMessage( + "¿Estás seguro de que deseas borrar la caché y los datos?"), "ascending": MessageLookupByLibrary.simpleMessage("Ascendente"), "author": MessageLookupByLibrary.simpleMessage("Autor"), - "averageApy": MessageLookupByLibrary.simpleMessage("APY promedio global"), + "averageApy": + MessageLookupByLibrary.simpleMessage("APY promedio global"), "balance": MessageLookupByLibrary.simpleMessage("Saldo"), + "barChart": MessageLookupByLibrary.simpleMessage("Gráfico de barras"), "bedroomBath": MessageLookupByLibrary.simpleMessage("Dormitorio/Baño"), "blockchain": MessageLookupByLibrary.simpleMessage("Blockchain"), "borrowBalance": MessageLookupByLibrary.simpleMessage("Préstamos"), "brute": MessageLookupByLibrary.simpleMessage("Bruto"), "buy_token": MessageLookupByLibrary.simpleMessage("Comprar"), "cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), - "characteristics": MessageLookupByLibrary.simpleMessage("Características"), + "characteristics": + MessageLookupByLibrary.simpleMessage("Características"), "chinese": MessageLookupByLibrary.simpleMessage("中文"), - "clearCacheData": MessageLookupByLibrary.simpleMessage("Borrar caché/datos"), + "city": MessageLookupByLibrary.simpleMessage("Ciudad"), + "clearCacheData": + MessageLookupByLibrary.simpleMessage("Borrar caché/datos"), "close": MessageLookupByLibrary.simpleMessage("Cerrar"), "commercial": MessageLookupByLibrary.simpleMessage("Comercial"), "condominium": MessageLookupByLibrary.simpleMessage("Condominio"), "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), - "confirmAction": MessageLookupByLibrary.simpleMessage("Confirmar acción"), - "constructionYear": MessageLookupByLibrary.simpleMessage("Año de construcción"), - "contractType": MessageLookupByLibrary.simpleMessage("Tipo de contrato"), - "convertSqft": MessageLookupByLibrary.simpleMessage("Convertir los sqft en m²"), + "confirmAction": + MessageLookupByLibrary.simpleMessage("Confirmar acción"), + "constructionYear": + MessageLookupByLibrary.simpleMessage("Año de construcción"), + "contractType": + MessageLookupByLibrary.simpleMessage("Tipo de contrato"), + "convertSqft": + MessageLookupByLibrary.simpleMessage("Convertir los sqft en m²"), "copy": MessageLookupByLibrary.simpleMessage("Copiar"), - "creation_date": MessageLookupByLibrary.simpleMessage("Fecha de creación"), + "country": MessageLookupByLibrary.simpleMessage("País"), + "creation_date": + MessageLookupByLibrary.simpleMessage("Fecha de creación"), "crypto": MessageLookupByLibrary.simpleMessage("Crypto"), - "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage("Dirección de donación de criptomonedas"), - "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage("Gráfico acumulativo de alquileres"), + "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage( + "Dirección de donación de criptomonedas"), + "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage( + "Gráfico acumulativo de alquileres"), "currency": MessageLookupByLibrary.simpleMessage("Moneda"), "daily": MessageLookupByLibrary.simpleMessage("Diario"), "dark": MessageLookupByLibrary.simpleMessage("Oscuro"), @@ -79,189 +98,292 @@ class MessageLookup extends MessageLookupByLibrary { "date": MessageLookupByLibrary.simpleMessage("Fecha"), "day": MessageLookupByLibrary.simpleMessage("Día"), "days": MessageLookupByLibrary.simpleMessage("Días"), - "delta_price": MessageLookupByLibrary.simpleMessage("Diferencia de precio"), + "delta_price": + MessageLookupByLibrary.simpleMessage("Diferencia de precio"), "depositBalance": MessageLookupByLibrary.simpleMessage("Depósitos"), "descending": MessageLookupByLibrary.simpleMessage("Descendente"), "donate": MessageLookupByLibrary.simpleMessage("Donar"), - "donationMessage": MessageLookupByLibrary.simpleMessage("Si te gusta esta aplicación y quieres apoyar su desarrollo, puedes donar."), + "donationMessage": MessageLookupByLibrary.simpleMessage( + "Si te gusta esta aplicación y quieres apoyar su desarrollo, puedes donar."), "duplex": MessageLookupByLibrary.simpleMessage("Dúplex"), - "duplicate": MessageLookupByLibrary.simpleMessage("Propiedades presentes en varias carteras/RMM"), - "duplicate_title": MessageLookupByLibrary.simpleMessage("Propiedades duplicadas"), + "duplicate": MessageLookupByLibrary.simpleMessage( + "Propiedades presentes en varias carteras/RMM"), + "duplicate_title": + MessageLookupByLibrary.simpleMessage("Propiedades duplicadas"), "edit": MessageLookupByLibrary.simpleMessage("Editar"), - "editWalletBalance": MessageLookupByLibrary.simpleMessage("Editar Historial del Wallet"), + "editWalletBalance": + MessageLookupByLibrary.simpleMessage("Editar Historial del Wallet"), "english": MessageLookupByLibrary.simpleMessage("English"), - "enterValidNumber": MessageLookupByLibrary.simpleMessage("Por favor ingrese un número válido"), + "enterValidNumber": MessageLookupByLibrary.simpleMessage( + "Por favor ingrese un número válido"), "error_occurred": m0, - "ethereumContract": MessageLookupByLibrary.simpleMessage("Contrato de Ethereum"), + "ethereumContract": + MessageLookupByLibrary.simpleMessage("Contrato de Ethereum"), "exportData": MessageLookupByLibrary.simpleMessage("Exportar datos"), - "exportFailed": MessageLookupByLibrary.simpleMessage("Error al exportar los datos"), - "exportSuccess": MessageLookupByLibrary.simpleMessage("Datos exportados con éxito"), + "exportFailed": + MessageLookupByLibrary.simpleMessage("Error al exportar los datos"), + "exportSuccess": + MessageLookupByLibrary.simpleMessage("Datos exportados con éxito"), "feedback": MessageLookupByLibrary.simpleMessage("Comentarios"), "finances": MessageLookupByLibrary.simpleMessage("Finanzas"), "french": MessageLookupByLibrary.simpleMessage("Francais"), - "futureRents": MessageLookupByLibrary.simpleMessage("Alquileres futuros"), - "gnosisContract": MessageLookupByLibrary.simpleMessage("Contrato de Gnosis"), - "grossRentMonth": MessageLookupByLibrary.simpleMessage("Alquiler bruto por mes"), + "futureRents": + MessageLookupByLibrary.simpleMessage("Alquileres futuros"), + "gnosisContract": + MessageLookupByLibrary.simpleMessage("Contrato de Gnosis"), + "grossRentMonth": + MessageLookupByLibrary.simpleMessage("Alquiler bruto por mes"), "groupedRentGraph": MessageLookupByLibrary.simpleMessage("Alquiler"), "hello": MessageLookupByLibrary.simpleMessage("Hola"), "hours": MessageLookupByLibrary.simpleMessage("Horas"), "importData": MessageLookupByLibrary.simpleMessage("Importar datos"), - "importExportData": MessageLookupByLibrary.simpleMessage("Importar o exportar datos (zip)"), - "importFailed": MessageLookupByLibrary.simpleMessage("Error al importar los datos"), - "importSuccess": MessageLookupByLibrary.simpleMessage("Datos importados con éxito"), - "initialLaunchDate": MessageLookupByLibrary.simpleMessage("Fecha de lanzamiento inicial"), - "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage("Reserva de mantenimiento inicial"), - "initialPrice": MessageLookupByLibrary.simpleMessage("Precio medio de compra"), - "initialPriceRemoved": MessageLookupByLibrary.simpleMessage("Precio medio de compra eliminado"), - "initialPriceUpdated": MessageLookupByLibrary.simpleMessage("Precio medio de compra actualizado"), + "importExportData": MessageLookupByLibrary.simpleMessage( + "Importar o exportar datos (zip)"), + "importFailed": + MessageLookupByLibrary.simpleMessage("Error al importar los datos"), + "importSuccess": + MessageLookupByLibrary.simpleMessage("Datos importados con éxito"), + "initialLaunchDate": MessageLookupByLibrary.simpleMessage( + "Fecha de lanzamiento inicial"), + "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage( + "Reserva de mantenimiento inicial"), + "initialPrice": + MessageLookupByLibrary.simpleMessage("Precio medio de compra"), + "initialPriceRemoved": MessageLookupByLibrary.simpleMessage( + "Precio medio de compra eliminado"), + "initialPriceUpdated": MessageLookupByLibrary.simpleMessage( + "Precio medio de compra actualizado"), "insights": MessageLookupByLibrary.simpleMessage("Información"), "insurance": MessageLookupByLibrary.simpleMessage("Seguro"), "italian": MessageLookupByLibrary.simpleMessage("Italiano"), "language": MessageLookupByLibrary.simpleMessage("Idioma"), "languageUpdated": m1, - "lastExecution": MessageLookupByLibrary.simpleMessage("Última actualización"), - "lastRentReceived": MessageLookupByLibrary.simpleMessage("Su último alquiler recibido asciende a "), + "lastExecution": + MessageLookupByLibrary.simpleMessage("Última actualización"), + "lastRentReceived": MessageLookupByLibrary.simpleMessage( + "Su último alquiler recibido asciende a "), "light": MessageLookupByLibrary.simpleMessage("Claro"), + "lineChart": MessageLookupByLibrary.simpleMessage("Gráfico de líneas"), "lotSize": MessageLookupByLibrary.simpleMessage("Tamaño del lote"), - "manageAddresses": MessageLookupByLibrary.simpleMessage("Añadir monedero"), - "manageEvmAddresses": MessageLookupByLibrary.simpleMessage("Gestionar monederos"), + "manageAddresses": + MessageLookupByLibrary.simpleMessage("Añadir monedero"), + "manageEvmAddresses": + MessageLookupByLibrary.simpleMessage("Gestionar monederos"), "manualEdit": MessageLookupByLibrary.simpleMessage("Edición Manual"), "maps": MessageLookupByLibrary.simpleMessage("Mapas"), "mfrPortfolio": MessageLookupByLibrary.simpleMessage("Cartera MFR"), - "miscellaneousCosts": MessageLookupByLibrary.simpleMessage("Gastos Diversos"), + "miscellaneousCosts": + MessageLookupByLibrary.simpleMessage("Gastos Diversos"), "mixedUse": MessageLookupByLibrary.simpleMessage("Uso mixto"), "month": MessageLookupByLibrary.simpleMessage("Mes"), "monthly": MessageLookupByLibrary.simpleMessage("Mensual"), "multiFamily": MessageLookupByLibrary.simpleMessage("Multifamiliar"), - "nameUnavailable": MessageLookupByLibrary.simpleMessage("Nombre no disponible"), + "nameUnavailable": + MessageLookupByLibrary.simpleMessage("Nombre no disponible"), "net": MessageLookupByLibrary.simpleMessage("Neto"), - "netAnnualRent": MessageLookupByLibrary.simpleMessage("Alquiler neto anual"), + "netAnnualRent": + MessageLookupByLibrary.simpleMessage("Alquiler neto anual"), "netApyHelp": MessageLookupByLibrary.simpleMessage( "El rendimiento neto se calcula ponderando los rendimientos de las carteras (billetera/RMM) y los saldos de depósitos/préstamos con sus tasas respectivas."), - "netRentMonth": MessageLookupByLibrary.simpleMessage("Alquiler neto por mes"), + "netRentMonth": + MessageLookupByLibrary.simpleMessage("Alquiler neto por mes"), "network": MessageLookupByLibrary.simpleMessage("Red"), - "nextRondays": MessageLookupByLibrary.simpleMessage("Siguiente Rondays"), - "noCommunicatedDate": MessageLookupByLibrary.simpleMessage("Fecha no comunicada"), - "noDataAvailable": MessageLookupByLibrary.simpleMessage("No hay datos disponibles, por favor añade un nuevo monedero"), - "noFutureRents": MessageLookupByLibrary.simpleMessage("No hay alquileres futuros"), - "noImageAvailable": MessageLookupByLibrary.simpleMessage("Enlace de imagen no disponible"), - "noPriceEvolution": MessageLookupByLibrary.simpleMessage("Sin evolución del precio. El último precio es:"), - "noPropertiesForSale": MessageLookupByLibrary.simpleMessage("No hay propiedades en venta"), - "noRecentUpdates": MessageLookupByLibrary.simpleMessage("No hay cambios recientes disponibles."), - "noRentReceived": MessageLookupByLibrary.simpleMessage("No se ha recibido alquiler"), - "noYieldEvolution": MessageLookupByLibrary.simpleMessage("Sin evolución del rendimiento. El último rendimiento es:"), - "no_market_offers_available": MessageLookupByLibrary.simpleMessage("No hay ofertas de mercado disponibles"), + "nextRondays": + MessageLookupByLibrary.simpleMessage("Siguiente Rondays"), + "noCommunicatedDate": + MessageLookupByLibrary.simpleMessage("Fecha no comunicada"), + "noDataAvailable": MessageLookupByLibrary.simpleMessage( + "No hay datos disponibles, por favor añade un nuevo monedero"), + "noFutureRents": + MessageLookupByLibrary.simpleMessage("No hay alquileres futuros"), + "noImageAvailable": MessageLookupByLibrary.simpleMessage( + "Enlace de imagen no disponible"), + "noPriceEvolution": MessageLookupByLibrary.simpleMessage( + "Sin evolución del precio. El último precio es:"), + "noPropertiesForSale": + MessageLookupByLibrary.simpleMessage("No hay propiedades en venta"), + "noRecentUpdates": MessageLookupByLibrary.simpleMessage( + "No hay cambios recientes disponibles."), + "noRentReceived": + MessageLookupByLibrary.simpleMessage("No se ha recibido alquiler"), + "noYieldEvolution": MessageLookupByLibrary.simpleMessage( + "Sin evolución del rendimiento. El último rendimiento es:"), + "no_market_offers_available": MessageLookupByLibrary.simpleMessage( + "No hay ofertas de mercado disponibles"), "notSpecified": MessageLookupByLibrary.simpleMessage("No especificado"), "offer_id": MessageLookupByLibrary.simpleMessage("ID Oferta"), "offering": MessageLookupByLibrary.simpleMessage("Oferta"), "other": MessageLookupByLibrary.simpleMessage("Otro"), "others": MessageLookupByLibrary.simpleMessage("Otros"), - "othersTitle": MessageLookupByLibrary.simpleMessage("Detalles de la sección Otros"), + "othersTitle": MessageLookupByLibrary.simpleMessage( + "Detalles de la sección Otros"), "paypal": MessageLookupByLibrary.simpleMessage("PayPal"), "period": MessageLookupByLibrary.simpleMessage("Período"), "portfolio": MessageLookupByLibrary.simpleMessage("Portafolio"), "portuguese": MessageLookupByLibrary.simpleMessage("Português"), - "priceEvolution": MessageLookupByLibrary.simpleMessage("Evolución del precio"), - "priceEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Evolución del precio:"), + "priceEvolution": + MessageLookupByLibrary.simpleMessage("Evolución del precio"), + "priceEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Evolución del precio:"), "properties": MessageLookupByLibrary.simpleMessage("Propiedades"), - "propertiesForSale": MessageLookupByLibrary.simpleMessage("Propiedades en venta"), - "properties_for_sale": MessageLookupByLibrary.simpleMessage("Propiedades en venta"), - "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage("Mantenimiento de la propiedad (mensual)"), - "propertyManagement": MessageLookupByLibrary.simpleMessage("Gestión de la propiedad"), - "propertyStories": MessageLookupByLibrary.simpleMessage("Número de pisos"), - "propertyTaxes": MessageLookupByLibrary.simpleMessage("Impuestos sobre la propiedad"), - "propertyType": MessageLookupByLibrary.simpleMessage("Tipo de propiedad"), - "realTPerformance": MessageLookupByLibrary.simpleMessage("Rendimiento de RealT"), + "propertiesForSale": + MessageLookupByLibrary.simpleMessage("Propiedades en venta"), + "properties_for_sale": + MessageLookupByLibrary.simpleMessage("Propiedades en venta"), + "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage( + "Mantenimiento de la propiedad (mensual)"), + "propertyManagement": + MessageLookupByLibrary.simpleMessage("Gestión de la propiedad"), + "propertyStories": + MessageLookupByLibrary.simpleMessage("Número de pisos"), + "propertyTaxes": MessageLookupByLibrary.simpleMessage( + "Impuestos sobre la propiedad"), + "propertyType": + MessageLookupByLibrary.simpleMessage("Tipo de propiedad"), + "realTPerformance": + MessageLookupByLibrary.simpleMessage("Rendimiento de RealT"), "realTTitle": MessageLookupByLibrary.simpleMessage("RealT"), - "realTokensList": MessageLookupByLibrary.simpleMessage("Lista de RealTokens"), + "realTokensList": + MessageLookupByLibrary.simpleMessage("Lista de RealTokens"), "realt": MessageLookupByLibrary.simpleMessage("RealT"), - "realtListingFee": MessageLookupByLibrary.simpleMessage("Tarifa de Listado Realt"), - "realtPlatform": MessageLookupByLibrary.simpleMessage("Plataforma RealT"), - "recentChanges": MessageLookupByLibrary.simpleMessage("Cambios recientes"), - "recentUpdatesTitle": MessageLookupByLibrary.simpleMessage("Últimos 30 días"), - "renovationReserve": MessageLookupByLibrary.simpleMessage("Reserva de Renovación"), - "rentGraph": MessageLookupByLibrary.simpleMessage("Gráfico de alquileres recibidos"), - "rentStartDate": MessageLookupByLibrary.simpleMessage("Primer alquiler"), - "rentStartFuture": MessageLookupByLibrary.simpleMessage("Alquiler no iniciado"), - "rentalStatus": MessageLookupByLibrary.simpleMessage("Estado del alquiler"), + "realtListingFee": + MessageLookupByLibrary.simpleMessage("Tarifa de Listado Realt"), + "realtPlatform": + MessageLookupByLibrary.simpleMessage("Plataforma RealT"), + "recentChanges": + MessageLookupByLibrary.simpleMessage("Cambios recientes"), + "recentUpdatesTitle": + MessageLookupByLibrary.simpleMessage("Últimos 30 días"), + "region": MessageLookupByLibrary.simpleMessage("Región"), + "renovationReserve": + MessageLookupByLibrary.simpleMessage("Reserva de Renovación"), + "rentDistribution": + MessageLookupByLibrary.simpleMessage("Distribución de alquileres"), + "rentGraph": MessageLookupByLibrary.simpleMessage( + "Gráfico de alquileres recibidos"), + "rentStartDate": + MessageLookupByLibrary.simpleMessage("Primer alquiler"), + "rentStartFuture": + MessageLookupByLibrary.simpleMessage("Alquiler no iniciado"), + "rentalStatus": + MessageLookupByLibrary.simpleMessage("Estado del alquiler"), "rentalStatusAll": MessageLookupByLibrary.simpleMessage("Todos"), - "rentalStatusNotRented": MessageLookupByLibrary.simpleMessage("No alquilado"), - "rentalStatusPartiallyRented": MessageLookupByLibrary.simpleMessage("Parcialmente alquilado"), + "rentalStatusNotRented": + MessageLookupByLibrary.simpleMessage("No alquilado"), + "rentalStatusPartiallyRented": + MessageLookupByLibrary.simpleMessage("Parcialmente alquilado"), "rentalStatusRented": MessageLookupByLibrary.simpleMessage("Alquilado"), "rentalType": MessageLookupByLibrary.simpleMessage("Tipo de alquiler"), "rented": MessageLookupByLibrary.simpleMessage("Alquilado"), - "rentedUnits": MessageLookupByLibrary.simpleMessage("Unidades alquiladas"), + "rentedUnits": + MessageLookupByLibrary.simpleMessage("Unidades alquiladas"), "rents": MessageLookupByLibrary.simpleMessage("Alquileres"), - "resortBungalow": MessageLookupByLibrary.simpleMessage("Bungaló de resort"), + "resortBungalow": + MessageLookupByLibrary.simpleMessage("Bungaló de resort"), "revenue": MessageLookupByLibrary.simpleMessage("Ingresos"), "rmm": MessageLookupByLibrary.simpleMessage("RMM"), "roiAlertInfo": MessageLookupByLibrary.simpleMessage( "Esta función de ROI está en beta y actualmente se calcula en función de los ingresos recibidos de la propiedad y el valor inicial del token."), "roiHistory": MessageLookupByLibrary.simpleMessage("Historial ROI"), - "roiPerProperties": MessageLookupByLibrary.simpleMessage("ROI de la propiedad"), + "roiPerProperties": + MessageLookupByLibrary.simpleMessage("ROI de la propiedad"), "rwaHoldings": MessageLookupByLibrary.simpleMessage("RWA Holdings SA"), "save": MessageLookupByLibrary.simpleMessage("Guardar"), "searchHint": MessageLookupByLibrary.simpleMessage("Buscar..."), "secondary": MessageLookupByLibrary.simpleMessage("Secundario"), - "secondary_offers_related_to_token": MessageLookupByLibrary.simpleMessage("Ofertas YAMM relacionadas con el token"), + "secondary_offers_related_to_token": + MessageLookupByLibrary.simpleMessage( + "Ofertas YAMM relacionadas con el token"), "section8paid": MessageLookupByLibrary.simpleMessage("Sección 8"), "sell_token": MessageLookupByLibrary.simpleMessage("Vender"), - "sendDonations": MessageLookupByLibrary.simpleMessage("Envía tus donaciones a la siguiente dirección:"), - "serviceStatusPage": MessageLookupByLibrary.simpleMessage("Estado de los servicios"), + "sendDonations": MessageLookupByLibrary.simpleMessage( + "Envía tus donaciones a la siguiente dirección:"), + "serviceStatusPage": + MessageLookupByLibrary.simpleMessage("Estado de los servicios"), "settings": MessageLookupByLibrary.simpleMessage("Configuración"), "settingsTitle": MessageLookupByLibrary.simpleMessage("Configuración"), "sfrPortfolio": MessageLookupByLibrary.simpleMessage("Cartera SFR"), - "singleFamily": MessageLookupByLibrary.simpleMessage("Casa unifamiliar"), - "somethingWrong": MessageLookupByLibrary.simpleMessage("Es posible que los datos no estén actualizados"), - "sortByAPY": MessageLookupByLibrary.simpleMessage("Ordenar por rendimiento"), - "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage("Ordenar por agregado recientemente"), - "sortByName": MessageLookupByLibrary.simpleMessage("Ordenar por nombre"), - "sortByValue": MessageLookupByLibrary.simpleMessage("Ordenar por valor"), + "singleFamily": + MessageLookupByLibrary.simpleMessage("Casa unifamiliar"), + "somethingWrong": MessageLookupByLibrary.simpleMessage( + "Es posible que los datos no estén actualizados"), + "sortByAPY": + MessageLookupByLibrary.simpleMessage("Ordenar por rendimiento"), + "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage( + "Ordenar por agregado recientemente"), + "sortByName": + MessageLookupByLibrary.simpleMessage("Ordenar por nombre"), + "sortByValue": + MessageLookupByLibrary.simpleMessage("Ordenar por valor"), "spanish": MessageLookupByLibrary.simpleMessage("Español"), - "specialThanks": MessageLookupByLibrary.simpleMessage("Agradecimientos especiales a @Sigri, @ehpst, y @pitsbi por su apoyo."), + "specialThanks": MessageLookupByLibrary.simpleMessage( + "Agradecimientos especiales a @Sigri, @ehpst, y @pitsbi por su apoyo."), "squareFeet": MessageLookupByLibrary.simpleMessage("Tamaño interior"), "statistics": MessageLookupByLibrary.simpleMessage("Estadísticas"), - "supportProject": MessageLookupByLibrary.simpleMessage("Apoyar el proyecto"), + "supportProject": + MessageLookupByLibrary.simpleMessage("Apoyar el proyecto"), "textSize": MessageLookupByLibrary.simpleMessage("Tamaño de texto"), - "thankYouMessage": MessageLookupByLibrary.simpleMessage("Gracias a todos los que contribuyeron a este proyecto."), + "thankYouMessage": MessageLookupByLibrary.simpleMessage( + "Gracias a todos los que contribuyeron a este proyecto."), "thanks": MessageLookupByLibrary.simpleMessage("Gracias"), "themeUpdated": m2, - "tokenAddress": MessageLookupByLibrary.simpleMessage("Dirección del token"), - "tokenDistribution": MessageLookupByLibrary.simpleMessage("Distribución de tokens por tipo de propiedad"), - "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage("Distribución de tokens por ciudad"), - "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage("Distribución de tokens por país"), - "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage("Distribución de tokens por región"), - "tokenSymbol": MessageLookupByLibrary.simpleMessage("Símbolo del token"), - "token_amount": MessageLookupByLibrary.simpleMessage("Cantidad de tokens"), + "tokenAddress": + MessageLookupByLibrary.simpleMessage("Dirección del token"), + "tokenDistribution": MessageLookupByLibrary.simpleMessage( + "Distribución de tokens por tipo de propiedad"), + "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage( + "Distribución de tokens por ciudad"), + "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage( + "Distribución de tokens por país"), + "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage( + "Distribución de tokens por región"), + "tokenSymbol": + MessageLookupByLibrary.simpleMessage("Símbolo del token"), + "token_amount": + MessageLookupByLibrary.simpleMessage("Cantidad de tokens"), "token_value": MessageLookupByLibrary.simpleMessage("Valor del token"), "tokens": MessageLookupByLibrary.simpleMessage("Tokens"), "totalExpenses": MessageLookupByLibrary.simpleMessage("Gastos Totales"), - "totalInvestment": MessageLookupByLibrary.simpleMessage("Inversión total"), - "totalPortfolio": MessageLookupByLibrary.simpleMessage("Portafolio total"), - "totalRentReceived": MessageLookupByLibrary.simpleMessage("Total de ingresos"), + "totalInvestment": + MessageLookupByLibrary.simpleMessage("Inversión total"), + "totalPortfolio": + MessageLookupByLibrary.simpleMessage("Portafolio total"), + "totalRentReceived": + MessageLookupByLibrary.simpleMessage("Total de ingresos"), "totalTokens": MessageLookupByLibrary.simpleMessage("Total de tokens"), "totalUnits": MessageLookupByLibrary.simpleMessage("Unidades totales"), "totalValue": MessageLookupByLibrary.simpleMessage("Valor total"), - "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage("Precio del activo subyacente"), + "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage( + "Precio del activo subyacente"), "units": MessageLookupByLibrary.simpleMessage("unidades"), "unknown": MessageLookupByLibrary.simpleMessage("Desconocido"), - "unknownCity": MessageLookupByLibrary.simpleMessage("Ciudad desconocida"), - "unknownCountry": MessageLookupByLibrary.simpleMessage("País desconocido"), - "unknownTokenName": MessageLookupByLibrary.simpleMessage("Nombre desconocido"), - "usdcBorrowBalance": MessageLookupByLibrary.simpleMessage("Saldo de préstamos USDC"), - "usdcDepositBalance": MessageLookupByLibrary.simpleMessage("Saldo de depósitos USDC"), + "unknownCity": + MessageLookupByLibrary.simpleMessage("Ciudad desconocida"), + "unknownCountry": + MessageLookupByLibrary.simpleMessage("País desconocido"), + "unknownTokenName": + MessageLookupByLibrary.simpleMessage("Nombre desconocido"), + "usdcBorrowBalance": + MessageLookupByLibrary.simpleMessage("Saldo de préstamos USDC"), + "usdcDepositBalance": + MessageLookupByLibrary.simpleMessage("Saldo de depósitos USDC"), "version": MessageLookupByLibrary.simpleMessage("Versión"), "viewOnMap": MessageLookupByLibrary.simpleMessage("Ver en el mapa"), "viewOnRealT": MessageLookupByLibrary.simpleMessage("Ver en RealT"), "wallet": MessageLookupByLibrary.simpleMessage("Monedero"), - "walletBalanceHistory": MessageLookupByLibrary.simpleMessage("Historial de Saldo del Wallet"), + "walletBalanceHistory": MessageLookupByLibrary.simpleMessage( + "Historial de Saldo del Wallet"), "week": MessageLookupByLibrary.simpleMessage("Semana"), "weekly": MessageLookupByLibrary.simpleMessage("Semanal"), "weeks": MessageLookupByLibrary.simpleMessage("Semanas"), - "xdaiBorrowBalance": MessageLookupByLibrary.simpleMessage("Saldo de préstamos XDAI"), - "xdaiDepositBalance": MessageLookupByLibrary.simpleMessage("Saldo de depósitos XDAI"), + "xdaiBorrowBalance": + MessageLookupByLibrary.simpleMessage("Saldo de préstamos XDAI"), + "xdaiDepositBalance": + MessageLookupByLibrary.simpleMessage("Saldo de depósitos XDAI"), "year": MessageLookupByLibrary.simpleMessage("Año"), - "yieldEvolution": MessageLookupByLibrary.simpleMessage("Evolución del rendimiento"), - "yieldEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Evolución del rendimiento:") + "yieldEvolution": + MessageLookupByLibrary.simpleMessage("Evolución del rendimiento"), + "yieldEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Evolución del rendimiento:") }; } diff --git a/lib/generated/intl/messages_fr.dart b/lib/generated/intl/messages_fr.dart index 0d9ad23..58a9946 100644 --- a/lib/generated/intl/messages_fr.dart +++ b/lib/generated/intl/messages_fr.dart @@ -31,46 +31,64 @@ class MessageLookup extends MessageLookupByLibrary { "about": MessageLookupByLibrary.simpleMessage("À propos"), "aboutImportExport": MessageLookupByLibrary.simpleMessage( "Cette fonction permet de sauvegarder et ré-importer les données des historiques de balances (wallet et RMM) dans un fichier ZIP."), - "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage("Fonction import/export"), - "addressCopied": MessageLookupByLibrary.simpleMessage("Adresse copiée dans le presse-papier"), + "aboutImportExportTitle": + MessageLookupByLibrary.simpleMessage("Fonction import/export"), + "addressCopied": MessageLookupByLibrary.simpleMessage( + "Adresse copiée dans le presse-papier"), "allCities": MessageLookupByLibrary.simpleMessage("Toutes les villes"), - "allWorkCorrectly": MessageLookupByLibrary.simpleMessage("Tout fonctionne correctement"), + "allWorkCorrectly": MessageLookupByLibrary.simpleMessage( + "Tout fonctionne correctement"), "amount": MessageLookupByLibrary.simpleMessage("Montant"), - "annualPercentageYield": MessageLookupByLibrary.simpleMessage("Rendement annuel"), + "annualPercentageYield": + MessageLookupByLibrary.simpleMessage("Rendement annuel"), "annualYield": MessageLookupByLibrary.simpleMessage("Rendement net"), "annually": MessageLookupByLibrary.simpleMessage("Annuel"), - "appDescription": MessageLookupByLibrary.simpleMessage("Application mobile"), + "appDescription": + MessageLookupByLibrary.simpleMessage("Application mobile"), "appName": MessageLookupByLibrary.simpleMessage("RealToken"), "application": MessageLookupByLibrary.simpleMessage("Application"), "apy": MessageLookupByLibrary.simpleMessage("Rendement net"), "apyHistory": MessageLookupByLibrary.simpleMessage("Historique APY"), - "areYouSureClearData": MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir effacer le cache et les données ?"), + "areYouSureClearData": MessageLookupByLibrary.simpleMessage( + "Êtes-vous sûr de vouloir effacer le cache et les données ?"), "ascending": MessageLookupByLibrary.simpleMessage("Ascendant"), "author": MessageLookupByLibrary.simpleMessage("Auteur"), "averageApy": MessageLookupByLibrary.simpleMessage("APY moyen global"), "balance": MessageLookupByLibrary.simpleMessage("Balance"), - "bedroomBath": MessageLookupByLibrary.simpleMessage("Chambre/Salle de bain"), + "barChart": MessageLookupByLibrary.simpleMessage("Diagramme en barres"), + "bedroomBath": + MessageLookupByLibrary.simpleMessage("Chambre/Salle de bain"), "blockchain": MessageLookupByLibrary.simpleMessage("Blockchain"), "borrowBalance": MessageLookupByLibrary.simpleMessage("Emprunts"), "brute": MessageLookupByLibrary.simpleMessage("Brute"), "buy_token": MessageLookupByLibrary.simpleMessage("Acheter"), "cancel": MessageLookupByLibrary.simpleMessage("Annuler"), - "characteristics": MessageLookupByLibrary.simpleMessage("Caractéristiques"), + "characteristics": + MessageLookupByLibrary.simpleMessage("Caractéristiques"), "chinese": MessageLookupByLibrary.simpleMessage("中文"), - "clearCacheData": MessageLookupByLibrary.simpleMessage("Effacer le cache/les données"), + "city": MessageLookupByLibrary.simpleMessage("Ville"), + "clearCacheData": MessageLookupByLibrary.simpleMessage( + "Effacer le cache/les données"), "close": MessageLookupByLibrary.simpleMessage("Fermer"), "commercial": MessageLookupByLibrary.simpleMessage("Commercial"), "condominium": MessageLookupByLibrary.simpleMessage("Condominium"), "confirm": MessageLookupByLibrary.simpleMessage("Confirmer"), - "confirmAction": MessageLookupByLibrary.simpleMessage("Confirmer l\'action"), - "constructionYear": MessageLookupByLibrary.simpleMessage("Année de construction"), + "confirmAction": + MessageLookupByLibrary.simpleMessage("Confirmer l\'action"), + "constructionYear": + MessageLookupByLibrary.simpleMessage("Année de construction"), "contractType": MessageLookupByLibrary.simpleMessage("Type de contrat"), - "convertSqft": MessageLookupByLibrary.simpleMessage("Convertir les sqft en m²"), + "convertSqft": + MessageLookupByLibrary.simpleMessage("Convertir les sqft en m²"), "copy": MessageLookupByLibrary.simpleMessage("Copier"), - "creation_date": MessageLookupByLibrary.simpleMessage("Date de création"), + "country": MessageLookupByLibrary.simpleMessage("Pays"), + "creation_date": + MessageLookupByLibrary.simpleMessage("Date de création"), "crypto": MessageLookupByLibrary.simpleMessage("Crypto"), - "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage("Adresse de don en crypto"), - "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage("Cumul des loyers"), + "cryptoDonationAddress": + MessageLookupByLibrary.simpleMessage("Adresse de don en crypto"), + "cumulativeRentGraph": + MessageLookupByLibrary.simpleMessage("Cumul des loyers"), "currency": MessageLookupByLibrary.simpleMessage("Monnaie"), "daily": MessageLookupByLibrary.simpleMessage("Quotidien"), "dark": MessageLookupByLibrary.simpleMessage("Sombre"), @@ -79,190 +97,290 @@ class MessageLookup extends MessageLookupByLibrary { "date": MessageLookupByLibrary.simpleMessage("Date"), "day": MessageLookupByLibrary.simpleMessage("Jour"), "days": MessageLookupByLibrary.simpleMessage("Jours"), - "delta_price": MessageLookupByLibrary.simpleMessage("Différence de prix"), + "delta_price": + MessageLookupByLibrary.simpleMessage("Différence de prix"), "depositBalance": MessageLookupByLibrary.simpleMessage("Dépôts"), "descending": MessageLookupByLibrary.simpleMessage("Descendant"), "donate": MessageLookupByLibrary.simpleMessage("Faire un don"), - "donationMessage": - MessageLookupByLibrary.simpleMessage("Si vous aimez cette application et souhaitez soutenir son développement, vous pouvez faire un don."), + "donationMessage": MessageLookupByLibrary.simpleMessage( + "Si vous aimez cette application et souhaitez soutenir son développement, vous pouvez faire un don."), "duplex": MessageLookupByLibrary.simpleMessage("Duplex"), - "duplicate": MessageLookupByLibrary.simpleMessage("Propriétés présentes sur plusieurs portefeuilles/RMM"), - "duplicate_title": MessageLookupByLibrary.simpleMessage("Propriétés en doublons"), + "duplicate": MessageLookupByLibrary.simpleMessage( + "Propriétés présentes sur plusieurs portefeuilles/RMM"), + "duplicate_title": + MessageLookupByLibrary.simpleMessage("Propriétés en doublons"), "edit": MessageLookupByLibrary.simpleMessage("Éditer"), - "editWalletBalance": MessageLookupByLibrary.simpleMessage("Éditer l\'historique du wallet"), + "editWalletBalance": MessageLookupByLibrary.simpleMessage( + "Éditer l\'historique du wallet"), "english": MessageLookupByLibrary.simpleMessage("English"), - "enterValidNumber": MessageLookupByLibrary.simpleMessage("Veuillez entrer un nombre valide"), + "enterValidNumber": MessageLookupByLibrary.simpleMessage( + "Veuillez entrer un nombre valide"), "error_occurred": m0, - "ethereumContract": MessageLookupByLibrary.simpleMessage("Contrat Ethereum"), - "exportData": MessageLookupByLibrary.simpleMessage("Exporter les données"), - "exportFailed": MessageLookupByLibrary.simpleMessage("Échec de l\'exportation des données"), - "exportSuccess": MessageLookupByLibrary.simpleMessage("Données exportées avec succès"), - "feedback": MessageLookupByLibrary.simpleMessage("Retour d\'expérience"), + "ethereumContract": + MessageLookupByLibrary.simpleMessage("Contrat Ethereum"), + "exportData": + MessageLookupByLibrary.simpleMessage("Exporter les données"), + "exportFailed": MessageLookupByLibrary.simpleMessage( + "Échec de l\'exportation des données"), + "exportSuccess": MessageLookupByLibrary.simpleMessage( + "Données exportées avec succès"), + "feedback": + MessageLookupByLibrary.simpleMessage("Retour d\'expérience"), "finances": MessageLookupByLibrary.simpleMessage("Finances"), "french": MessageLookupByLibrary.simpleMessage("Francais"), "futureRents": MessageLookupByLibrary.simpleMessage("Loyers futurs"), - "gnosisContract": MessageLookupByLibrary.simpleMessage("Contrat Gnosis"), - "grossRentMonth": MessageLookupByLibrary.simpleMessage("Loyer brut par mois"), + "gnosisContract": + MessageLookupByLibrary.simpleMessage("Contrat Gnosis"), + "grossRentMonth": + MessageLookupByLibrary.simpleMessage("Loyer brut par mois"), "groupedRentGraph": MessageLookupByLibrary.simpleMessage("Loyers"), "hello": MessageLookupByLibrary.simpleMessage("Bonjour"), "hours": MessageLookupByLibrary.simpleMessage("Heures"), - "importData": MessageLookupByLibrary.simpleMessage("Importer les données"), - "importExportData": MessageLookupByLibrary.simpleMessage("Importer ou exporter les données (zip)"), - "importFailed": MessageLookupByLibrary.simpleMessage("Échec de l\'importation des données"), - "importSuccess": MessageLookupByLibrary.simpleMessage("Données importées avec succès"), - "initialLaunchDate": MessageLookupByLibrary.simpleMessage("Date de lancement initial"), - "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage("Réserve de maintenance initiale"), - "initialPrice": MessageLookupByLibrary.simpleMessage("Prix moyen d\'achat"), - "initialPriceRemoved": MessageLookupByLibrary.simpleMessage("Prix moyen d\'achat supprimé"), - "initialPriceUpdated": MessageLookupByLibrary.simpleMessage("Prix moyen d\'achat mis à jour"), + "importData": + MessageLookupByLibrary.simpleMessage("Importer les données"), + "importExportData": MessageLookupByLibrary.simpleMessage( + "Importer ou exporter les données (zip)"), + "importFailed": MessageLookupByLibrary.simpleMessage( + "Échec de l\'importation des données"), + "importSuccess": MessageLookupByLibrary.simpleMessage( + "Données importées avec succès"), + "initialLaunchDate": + MessageLookupByLibrary.simpleMessage("Date de lancement initial"), + "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage( + "Réserve de maintenance initiale"), + "initialPrice": + MessageLookupByLibrary.simpleMessage("Prix moyen d\'achat"), + "initialPriceRemoved": MessageLookupByLibrary.simpleMessage( + "Prix moyen d\'achat supprimé"), + "initialPriceUpdated": MessageLookupByLibrary.simpleMessage( + "Prix moyen d\'achat mis à jour"), "insights": MessageLookupByLibrary.simpleMessage("Aperçus"), "insurance": MessageLookupByLibrary.simpleMessage("Assurance"), "italian": MessageLookupByLibrary.simpleMessage("Italiano"), "language": MessageLookupByLibrary.simpleMessage("Langue"), "languageUpdated": m1, - "lastExecution": MessageLookupByLibrary.simpleMessage("Dernière mise à jour"), - "lastRentReceived": MessageLookupByLibrary.simpleMessage("Votre dernier loyer reçu s\'élève à "), + "lastExecution": + MessageLookupByLibrary.simpleMessage("Dernière mise à jour"), + "lastRentReceived": MessageLookupByLibrary.simpleMessage( + "Votre dernier loyer reçu s\'élève à "), "light": MessageLookupByLibrary.simpleMessage("Clair"), + "lineChart": MessageLookupByLibrary.simpleMessage("Diagramme linéaire"), "lotSize": MessageLookupByLibrary.simpleMessage("Superficie"), - "manageAddresses": MessageLookupByLibrary.simpleMessage("Ajouter un portefeuille"), - "manageEvmAddresses": MessageLookupByLibrary.simpleMessage("Gérer les portefeuilles"), + "manageAddresses": + MessageLookupByLibrary.simpleMessage("Ajouter un portefeuille"), + "manageEvmAddresses": + MessageLookupByLibrary.simpleMessage("Gérer les portefeuilles"), "manualEdit": MessageLookupByLibrary.simpleMessage("Édition Manuelle"), "maps": MessageLookupByLibrary.simpleMessage("Cartes"), - "mfrPortfolio": MessageLookupByLibrary.simpleMessage("Portefeuille MFR"), - "miscellaneousCosts": MessageLookupByLibrary.simpleMessage("Frais Divers"), + "mfrPortfolio": + MessageLookupByLibrary.simpleMessage("Portefeuille MFR"), + "miscellaneousCosts": + MessageLookupByLibrary.simpleMessage("Frais Divers"), "mixedUse": MessageLookupByLibrary.simpleMessage("Usage mixte"), "month": MessageLookupByLibrary.simpleMessage("Mois"), "monthly": MessageLookupByLibrary.simpleMessage("Mensuel"), "multiFamily": MessageLookupByLibrary.simpleMessage("Multi-familiale"), - "nameUnavailable": MessageLookupByLibrary.simpleMessage("Nom indisponible"), + "nameUnavailable": + MessageLookupByLibrary.simpleMessage("Nom indisponible"), "net": MessageLookupByLibrary.simpleMessage("Net"), - "netAnnualRent": MessageLookupByLibrary.simpleMessage("Loyer net annuel"), + "netAnnualRent": + MessageLookupByLibrary.simpleMessage("Loyer net annuel"), "netApyHelp": MessageLookupByLibrary.simpleMessage( "Le rendement net est calculé en ponderant le rendement des portfeuilles (wallet/RMM) et les balances de déposits/borrows avec leurs taux respectifs."), - "netRentMonth": MessageLookupByLibrary.simpleMessage("Loyer net par mois"), + "netRentMonth": + MessageLookupByLibrary.simpleMessage("Loyer net par mois"), "network": MessageLookupByLibrary.simpleMessage("Réseau"), - "nextRondays": MessageLookupByLibrary.simpleMessage("Prochains Rondays"), - "noCommunicatedDate": MessageLookupByLibrary.simpleMessage("Date non communiquée"), - "noDataAvailable": MessageLookupByLibrary.simpleMessage("Aucune donnée disponible, veuillez ajouter un nouveau portefeuille"), - "noFutureRents": MessageLookupByLibrary.simpleMessage("Aucun loyer futur"), - "noImageAvailable": MessageLookupByLibrary.simpleMessage("Lien d\'image non disponible"), - "noPriceEvolution": MessageLookupByLibrary.simpleMessage("Aucune évolution de prix. Le dernier prix est :"), - "noPropertiesForSale": MessageLookupByLibrary.simpleMessage("Aucune propriété à vendre"), - "noRecentUpdates": MessageLookupByLibrary.simpleMessage("Aucune modification récente disponible."), - "noRentReceived": MessageLookupByLibrary.simpleMessage("Aucun loyer reçu"), - "noYieldEvolution": MessageLookupByLibrary.simpleMessage("Aucune évolution du rendement. Le dernier rendement est :"), - "no_market_offers_available": MessageLookupByLibrary.simpleMessage("Aucune offre de marché disponible"), + "nextRondays": + MessageLookupByLibrary.simpleMessage("Prochains Rondays"), + "noCommunicatedDate": + MessageLookupByLibrary.simpleMessage("Date non communiquée"), + "noDataAvailable": MessageLookupByLibrary.simpleMessage( + "Aucune donnée disponible, veuillez ajouter un nouveau portefeuille"), + "noFutureRents": + MessageLookupByLibrary.simpleMessage("Aucun loyer futur"), + "noImageAvailable": MessageLookupByLibrary.simpleMessage( + "Lien d\'image non disponible"), + "noPriceEvolution": MessageLookupByLibrary.simpleMessage( + "Aucune évolution de prix. Le dernier prix est :"), + "noPropertiesForSale": + MessageLookupByLibrary.simpleMessage("Aucune propriété à vendre"), + "noRecentUpdates": MessageLookupByLibrary.simpleMessage( + "Aucune modification récente disponible."), + "noRentReceived": + MessageLookupByLibrary.simpleMessage("Aucun loyer reçu"), + "noYieldEvolution": MessageLookupByLibrary.simpleMessage( + "Aucune évolution du rendement. Le dernier rendement est :"), + "no_market_offers_available": MessageLookupByLibrary.simpleMessage( + "Aucune offre de marché disponible"), "notSpecified": MessageLookupByLibrary.simpleMessage("Non spécifié"), "offer_id": MessageLookupByLibrary.simpleMessage("ID Offre"), "offering": MessageLookupByLibrary.simpleMessage("Offre"), "other": MessageLookupByLibrary.simpleMessage("Autre"), "others": MessageLookupByLibrary.simpleMessage("Autres"), - "othersTitle": MessageLookupByLibrary.simpleMessage("Détails de la section Autres"), + "othersTitle": MessageLookupByLibrary.simpleMessage( + "Détails de la section Autres"), "paypal": MessageLookupByLibrary.simpleMessage("PayPal"), "period": MessageLookupByLibrary.simpleMessage("Période"), "portfolio": MessageLookupByLibrary.simpleMessage("Portefeuille"), "portuguese": MessageLookupByLibrary.simpleMessage("Português"), - "priceEvolution": MessageLookupByLibrary.simpleMessage("Évolution du prix"), - "priceEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Évolution du prix :"), + "priceEvolution": + MessageLookupByLibrary.simpleMessage("Évolution du prix"), + "priceEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Évolution du prix :"), "properties": MessageLookupByLibrary.simpleMessage("Propriétés"), - "propertiesForSale": MessageLookupByLibrary.simpleMessage("Propriétés à vendre"), - "properties_for_sale": MessageLookupByLibrary.simpleMessage("Propriétés à vendre"), - "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage("Entretien de la propriété (mensuel)"), - "propertyManagement": MessageLookupByLibrary.simpleMessage("Gestion de la propriété"), - "propertyStories": MessageLookupByLibrary.simpleMessage("Nombre d\'étages"), - "propertyTaxes": MessageLookupByLibrary.simpleMessage("Taxes foncières"), - "propertyType": MessageLookupByLibrary.simpleMessage("Type de propriété"), - "realTPerformance": MessageLookupByLibrary.simpleMessage("Performance de RealT"), + "propertiesForSale": + MessageLookupByLibrary.simpleMessage("Propriétés à vendre"), + "properties_for_sale": + MessageLookupByLibrary.simpleMessage("Propriétés à vendre"), + "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage( + "Entretien de la propriété (mensuel)"), + "propertyManagement": + MessageLookupByLibrary.simpleMessage("Gestion de la propriété"), + "propertyStories": + MessageLookupByLibrary.simpleMessage("Nombre d\'étages"), + "propertyTaxes": + MessageLookupByLibrary.simpleMessage("Taxes foncières"), + "propertyType": + MessageLookupByLibrary.simpleMessage("Type de propriété"), + "realTPerformance": + MessageLookupByLibrary.simpleMessage("Performance de RealT"), "realTTitle": MessageLookupByLibrary.simpleMessage("RealT"), - "realTokensList": MessageLookupByLibrary.simpleMessage("Liste des RealTokens"), + "realTokensList": + MessageLookupByLibrary.simpleMessage("Liste des RealTokens"), "realt": MessageLookupByLibrary.simpleMessage("RealT"), - "realtListingFee": MessageLookupByLibrary.simpleMessage("Frais d\'Inscription Realt"), - "realtPlatform": MessageLookupByLibrary.simpleMessage("Plateforme RealT"), - "recentChanges": MessageLookupByLibrary.simpleMessage("Évolutions récentes"), - "recentUpdatesTitle": MessageLookupByLibrary.simpleMessage("30 derniers jours"), - "renovationReserve": MessageLookupByLibrary.simpleMessage("Réserve pour Rénovation"), - "rentGraph": MessageLookupByLibrary.simpleMessage("Graphique des loyers reçus"), - "rentStartDate": MessageLookupByLibrary.simpleMessage("Première location"), - "rentStartFuture": MessageLookupByLibrary.simpleMessage("Loyer non démarré"), - "rentalStatus": MessageLookupByLibrary.simpleMessage("Statut de location"), + "realtListingFee": + MessageLookupByLibrary.simpleMessage("Frais d\'Inscription Realt"), + "realtPlatform": + MessageLookupByLibrary.simpleMessage("Plateforme RealT"), + "recentChanges": + MessageLookupByLibrary.simpleMessage("Évolutions récentes"), + "recentUpdatesTitle": + MessageLookupByLibrary.simpleMessage("30 derniers jours"), + "region": MessageLookupByLibrary.simpleMessage("Région"), + "renovationReserve": + MessageLookupByLibrary.simpleMessage("Réserve pour Rénovation"), + "rentDistribution": + MessageLookupByLibrary.simpleMessage("Répartition des loyers"), + "rentGraph": + MessageLookupByLibrary.simpleMessage("Graphique des loyers reçus"), + "rentStartDate": + MessageLookupByLibrary.simpleMessage("Première location"), + "rentStartFuture": + MessageLookupByLibrary.simpleMessage("Loyer non démarré"), + "rentalStatus": + MessageLookupByLibrary.simpleMessage("Statut de location"), "rentalStatusAll": MessageLookupByLibrary.simpleMessage("Tout"), - "rentalStatusNotRented": MessageLookupByLibrary.simpleMessage("Non loué"), - "rentalStatusPartiallyRented": MessageLookupByLibrary.simpleMessage("Partiellement loué"), + "rentalStatusNotRented": + MessageLookupByLibrary.simpleMessage("Non loué"), + "rentalStatusPartiallyRented": + MessageLookupByLibrary.simpleMessage("Partiellement loué"), "rentalStatusRented": MessageLookupByLibrary.simpleMessage("Loué"), "rentalType": MessageLookupByLibrary.simpleMessage("Type de location"), "rented": MessageLookupByLibrary.simpleMessage("Loué"), "rentedUnits": MessageLookupByLibrary.simpleMessage("Unités louées"), "rents": MessageLookupByLibrary.simpleMessage("Loyers"), - "resortBungalow": MessageLookupByLibrary.simpleMessage("Bungalow de villégiature"), + "resortBungalow": + MessageLookupByLibrary.simpleMessage("Bungalow de villégiature"), "revenue": MessageLookupByLibrary.simpleMessage("Revenu"), "rmm": MessageLookupByLibrary.simpleMessage("RMM"), "roiAlertInfo": MessageLookupByLibrary.simpleMessage( "Cette fonction ROI est en beta, elle est pour le moment calculée en fonction des revenus reçus de la propriété et la valeur initiale du token."), "roiHistory": MessageLookupByLibrary.simpleMessage("Historique ROI"), - "roiPerProperties": MessageLookupByLibrary.simpleMessage("ROI de la propriété"), + "roiPerProperties": + MessageLookupByLibrary.simpleMessage("ROI de la propriété"), "rwaHoldings": MessageLookupByLibrary.simpleMessage("RWA Holdings SA"), "save": MessageLookupByLibrary.simpleMessage("Enregistrer"), "searchHint": MessageLookupByLibrary.simpleMessage("Rechercher..."), "secondary": MessageLookupByLibrary.simpleMessage("Secondaire"), - "secondary_offers_related_to_token": MessageLookupByLibrary.simpleMessage("Offres YAMM liées au token"), + "secondary_offers_related_to_token": + MessageLookupByLibrary.simpleMessage("Offres YAMM liées au token"), "section8paid": MessageLookupByLibrary.simpleMessage("Section 8"), "sell_token": MessageLookupByLibrary.simpleMessage("Vendre"), - "sendDonations": MessageLookupByLibrary.simpleMessage("Envoyez vos dons à l\'adresse suivante :"), - "serviceStatusPage": MessageLookupByLibrary.simpleMessage("Statut des services"), + "sendDonations": MessageLookupByLibrary.simpleMessage( + "Envoyez vos dons à l\'adresse suivante :"), + "serviceStatusPage": + MessageLookupByLibrary.simpleMessage("Statut des services"), "settings": MessageLookupByLibrary.simpleMessage("Paramètres"), "settingsTitle": MessageLookupByLibrary.simpleMessage("Paramètres"), - "sfrPortfolio": MessageLookupByLibrary.simpleMessage("Portefeuille SFR"), - "singleFamily": MessageLookupByLibrary.simpleMessage("Maison individuelle"), - "somethingWrong": MessageLookupByLibrary.simpleMessage("Il se pourrait que les données ne soient pas à jour"), + "sfrPortfolio": + MessageLookupByLibrary.simpleMessage("Portefeuille SFR"), + "singleFamily": + MessageLookupByLibrary.simpleMessage("Maison individuelle"), + "somethingWrong": MessageLookupByLibrary.simpleMessage( + "Il se pourrait que les données ne soient pas à jour"), "sortByAPY": MessageLookupByLibrary.simpleMessage("Tri par rendement"), - "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage("Tri par ajout récent"), + "sortByInitialLaunchDate": + MessageLookupByLibrary.simpleMessage("Tri par ajout récent"), "sortByName": MessageLookupByLibrary.simpleMessage("Tri par nom"), "sortByValue": MessageLookupByLibrary.simpleMessage("Tri par valeur"), "spanish": MessageLookupByLibrary.simpleMessage("Español"), - "specialThanks": MessageLookupByLibrary.simpleMessage("Remerciements spéciaux à @Sigri, @ehpst, et @pitsbi pour leur soutien."), - "squareFeet": MessageLookupByLibrary.simpleMessage("Surface intérieure"), + "specialThanks": MessageLookupByLibrary.simpleMessage( + "Remerciements spéciaux à @Sigri, @ehpst, et @pitsbi pour leur soutien."), + "squareFeet": + MessageLookupByLibrary.simpleMessage("Surface intérieure"), "statistics": MessageLookupByLibrary.simpleMessage("Statistiques"), - "supportProject": MessageLookupByLibrary.simpleMessage("Soutenir le projet"), + "supportProject": + MessageLookupByLibrary.simpleMessage("Soutenir le projet"), "textSize": MessageLookupByLibrary.simpleMessage("Taille du texte"), - "thankYouMessage": MessageLookupByLibrary.simpleMessage("Merci à tous ceux qui ont contribué à ce projet."), + "thankYouMessage": MessageLookupByLibrary.simpleMessage( + "Merci à tous ceux qui ont contribué à ce projet."), "thanks": MessageLookupByLibrary.simpleMessage("Remerciements"), "themeUpdated": m2, - "tokenAddress": MessageLookupByLibrary.simpleMessage("Adresse du jeton"), - "tokenDistribution": MessageLookupByLibrary.simpleMessage("Répartition des jetons par type de propriété"), - "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage("Répartition des jetons par ville"), - "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage("Répartition des jetons par pays"), - "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage("Répartition des jetons par région"), + "tokenAddress": + MessageLookupByLibrary.simpleMessage("Adresse du jeton"), + "tokenDistribution": MessageLookupByLibrary.simpleMessage( + "Répartition des jetons par type de propriété"), + "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage( + "Répartition des jetons par ville"), + "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage( + "Répartition des jetons par pays"), + "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage( + "Répartition des jetons par région"), "tokenSymbol": MessageLookupByLibrary.simpleMessage("Symbole du jeton"), - "token_amount": MessageLookupByLibrary.simpleMessage("Quantité de jetons"), + "token_amount": + MessageLookupByLibrary.simpleMessage("Quantité de jetons"), "token_value": MessageLookupByLibrary.simpleMessage("Valeur du jeton"), "tokens": MessageLookupByLibrary.simpleMessage("Jetons"), - "totalExpenses": MessageLookupByLibrary.simpleMessage("Total des dépenses"), - "totalInvestment": MessageLookupByLibrary.simpleMessage("Investissement total"), - "totalPortfolio": MessageLookupByLibrary.simpleMessage("Portefeuille total"), - "totalRentReceived": MessageLookupByLibrary.simpleMessage("Total des revenus"), + "totalExpenses": + MessageLookupByLibrary.simpleMessage("Total des dépenses"), + "totalInvestment": + MessageLookupByLibrary.simpleMessage("Investissement total"), + "totalPortfolio": + MessageLookupByLibrary.simpleMessage("Portefeuille total"), + "totalRentReceived": + MessageLookupByLibrary.simpleMessage("Total des revenus"), "totalTokens": MessageLookupByLibrary.simpleMessage("Jetons totaux"), - "totalUnits": MessageLookupByLibrary.simpleMessage("Nombre total d\'unités"), + "totalUnits": + MessageLookupByLibrary.simpleMessage("Nombre total d\'unités"), "totalValue": MessageLookupByLibrary.simpleMessage("Valeur totale"), - "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage("Prix de l\'actif sous-jacent"), + "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage( + "Prix de l\'actif sous-jacent"), "units": MessageLookupByLibrary.simpleMessage("logements"), "unknown": MessageLookupByLibrary.simpleMessage("Inconnu"), "unknownCity": MessageLookupByLibrary.simpleMessage("Ville inconnue"), "unknownCountry": MessageLookupByLibrary.simpleMessage("Pays inconnu"), "unknownTokenName": MessageLookupByLibrary.simpleMessage("Nom inconnu"), - "usdcBorrowBalance": MessageLookupByLibrary.simpleMessage("Solde des emprunts USDC"), - "usdcDepositBalance": MessageLookupByLibrary.simpleMessage("Solde des dépôts USDC"), + "usdcBorrowBalance": + MessageLookupByLibrary.simpleMessage("Solde des emprunts USDC"), + "usdcDepositBalance": + MessageLookupByLibrary.simpleMessage("Solde des dépôts USDC"), "version": MessageLookupByLibrary.simpleMessage("Version"), "viewOnMap": MessageLookupByLibrary.simpleMessage("Voir sur la carte"), "viewOnRealT": MessageLookupByLibrary.simpleMessage("Voir sur RealT"), "wallet": MessageLookupByLibrary.simpleMessage("Portefeuille"), - "walletBalanceHistory": MessageLookupByLibrary.simpleMessage("Historique du Wallet"), + "walletBalanceHistory": + MessageLookupByLibrary.simpleMessage("Historique du Wallet"), "week": MessageLookupByLibrary.simpleMessage("Semaine"), "weekly": MessageLookupByLibrary.simpleMessage("Hebdomadaire"), "weeks": MessageLookupByLibrary.simpleMessage("Semaines"), - "xdaiBorrowBalance": MessageLookupByLibrary.simpleMessage("Solde des emprunts XDAI"), - "xdaiDepositBalance": MessageLookupByLibrary.simpleMessage("Solde des dépôts XDAI"), + "xdaiBorrowBalance": + MessageLookupByLibrary.simpleMessage("Solde des emprunts XDAI"), + "xdaiDepositBalance": + MessageLookupByLibrary.simpleMessage("Solde des dépôts XDAI"), "year": MessageLookupByLibrary.simpleMessage("Année"), - "yieldEvolution": MessageLookupByLibrary.simpleMessage("Évolution du rendement"), - "yieldEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Évolution du rendement :") + "yieldEvolution": + MessageLookupByLibrary.simpleMessage("Évolution du rendement"), + "yieldEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Évolution du rendement :") }; } diff --git a/lib/generated/intl/messages_it.dart b/lib/generated/intl/messages_it.dart index 6467f75..be6fca0 100644 --- a/lib/generated/intl/messages_it.dart +++ b/lib/generated/intl/messages_it.dart @@ -31,46 +31,64 @@ class MessageLookup extends MessageLookupByLibrary { "about": MessageLookupByLibrary.simpleMessage("Informazioni"), "aboutImportExport": MessageLookupByLibrary.simpleMessage( "Questa funzione consente di salvare e reimportare i dati storici dei saldi (portafoglio e RMM) in un file ZIP."), - "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage("Funzione di Importazione/Esportazione"), - "addressCopied": MessageLookupByLibrary.simpleMessage("Indirizzo copiato negli appunti"), + "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage( + "Funzione di Importazione/Esportazione"), + "addressCopied": MessageLookupByLibrary.simpleMessage( + "Indirizzo copiato negli appunti"), "allCities": MessageLookupByLibrary.simpleMessage("Tutte le città"), - "allWorkCorrectly": MessageLookupByLibrary.simpleMessage("Tutto funziona correttamente"), + "allWorkCorrectly": MessageLookupByLibrary.simpleMessage( + "Tutto funziona correttamente"), "amount": MessageLookupByLibrary.simpleMessage("Importo"), - "annualPercentageYield": MessageLookupByLibrary.simpleMessage("Rendimento annuale"), + "annualPercentageYield": + MessageLookupByLibrary.simpleMessage("Rendimento annuale"), "annualYield": MessageLookupByLibrary.simpleMessage("Rendimento netto"), "annually": MessageLookupByLibrary.simpleMessage("Annuale"), - "appDescription": MessageLookupByLibrary.simpleMessage("app mobile per la comunità"), + "appDescription": + MessageLookupByLibrary.simpleMessage("app mobile per la comunità"), "appName": MessageLookupByLibrary.simpleMessage("RealToken"), "application": MessageLookupByLibrary.simpleMessage("Applicazione"), "apy": MessageLookupByLibrary.simpleMessage("Rendimento annuo"), "apyHistory": MessageLookupByLibrary.simpleMessage("Storico APY"), - "areYouSureClearData": MessageLookupByLibrary.simpleMessage("Sei sicuro di voler cancellare cache e dati?"), + "areYouSureClearData": MessageLookupByLibrary.simpleMessage( + "Sei sicuro di voler cancellare cache e dati?"), "ascending": MessageLookupByLibrary.simpleMessage("Crescente"), "author": MessageLookupByLibrary.simpleMessage("Autore"), "averageApy": MessageLookupByLibrary.simpleMessage("Rendimento medio"), "balance": MessageLookupByLibrary.simpleMessage("Saldo"), + "barChart": MessageLookupByLibrary.simpleMessage("Grafico a barre"), "bedroomBath": MessageLookupByLibrary.simpleMessage("Camera/Bagno"), "blockchain": MessageLookupByLibrary.simpleMessage("Blockchain"), "borrowBalance": MessageLookupByLibrary.simpleMessage("Prestiti"), "brute": MessageLookupByLibrary.simpleMessage("Lordo"), "buy_token": MessageLookupByLibrary.simpleMessage("Acquista"), "cancel": MessageLookupByLibrary.simpleMessage("Annulla"), - "characteristics": MessageLookupByLibrary.simpleMessage("Caratteristiche"), + "characteristics": + MessageLookupByLibrary.simpleMessage("Caratteristiche"), "chinese": MessageLookupByLibrary.simpleMessage("中文"), - "clearCacheData": MessageLookupByLibrary.simpleMessage("Cancella Cache/Dati"), + "city": MessageLookupByLibrary.simpleMessage("Città"), + "clearCacheData": + MessageLookupByLibrary.simpleMessage("Cancella Cache/Dati"), "close": MessageLookupByLibrary.simpleMessage("Chiudi"), "commercial": MessageLookupByLibrary.simpleMessage("Commerciale"), "condominium": MessageLookupByLibrary.simpleMessage("Condominio"), "confirm": MessageLookupByLibrary.simpleMessage("Conferma"), - "confirmAction": MessageLookupByLibrary.simpleMessage("Conferma azione"), - "constructionYear": MessageLookupByLibrary.simpleMessage("Anno di costruzione"), - "contractType": MessageLookupByLibrary.simpleMessage("Tipo di contratto"), - "convertSqft": MessageLookupByLibrary.simpleMessage("Converti sqft in m²"), + "confirmAction": + MessageLookupByLibrary.simpleMessage("Conferma azione"), + "constructionYear": + MessageLookupByLibrary.simpleMessage("Anno di costruzione"), + "contractType": + MessageLookupByLibrary.simpleMessage("Tipo di contratto"), + "convertSqft": + MessageLookupByLibrary.simpleMessage("Converti sqft in m²"), "copy": MessageLookupByLibrary.simpleMessage("Copia"), - "creation_date": MessageLookupByLibrary.simpleMessage("Data di creazione"), + "country": MessageLookupByLibrary.simpleMessage("Paese"), + "creation_date": + MessageLookupByLibrary.simpleMessage("Data di creazione"), "crypto": MessageLookupByLibrary.simpleMessage("Criptovaluta"), - "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage("Indirizzo per le donazioni in criptovaluta"), - "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage("Grafico affitti cumulativi"), + "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage( + "Indirizzo per le donazioni in criptovaluta"), + "cumulativeRentGraph": + MessageLookupByLibrary.simpleMessage("Grafico affitti cumulativi"), "currency": MessageLookupByLibrary.simpleMessage("Valuta"), "daily": MessageLookupByLibrary.simpleMessage("Giornaliero"), "dark": MessageLookupByLibrary.simpleMessage("Scuro"), @@ -79,189 +97,289 @@ class MessageLookup extends MessageLookupByLibrary { "date": MessageLookupByLibrary.simpleMessage("Data"), "day": MessageLookupByLibrary.simpleMessage("Giorno"), "days": MessageLookupByLibrary.simpleMessage("Giorni"), - "delta_price": MessageLookupByLibrary.simpleMessage("Differenza di prezzo"), + "delta_price": + MessageLookupByLibrary.simpleMessage("Differenza di prezzo"), "depositBalance": MessageLookupByLibrary.simpleMessage("Depositi"), "descending": MessageLookupByLibrary.simpleMessage("Decrescente"), "donate": MessageLookupByLibrary.simpleMessage("Donare"), - "donationMessage": MessageLookupByLibrary.simpleMessage("Se ti piace questa app e vuoi supportare il suo sviluppo, puoi donare."), + "donationMessage": MessageLookupByLibrary.simpleMessage( + "Se ti piace questa app e vuoi supportare il suo sviluppo, puoi donare."), "duplex": MessageLookupByLibrary.simpleMessage("Duplex"), - "duplicate": MessageLookupByLibrary.simpleMessage("Proprietà presenti in più portafogli/RMM"), - "duplicate_title": MessageLookupByLibrary.simpleMessage("Proprietà duplicate"), + "duplicate": MessageLookupByLibrary.simpleMessage( + "Proprietà presenti in più portafogli/RMM"), + "duplicate_title": + MessageLookupByLibrary.simpleMessage("Proprietà duplicate"), "edit": MessageLookupByLibrary.simpleMessage("Modifica"), - "editWalletBalance": MessageLookupByLibrary.simpleMessage("Modifica Storico del Wallet"), + "editWalletBalance": + MessageLookupByLibrary.simpleMessage("Modifica Storico del Wallet"), "english": MessageLookupByLibrary.simpleMessage("English"), - "enterValidNumber": MessageLookupByLibrary.simpleMessage("Per favore, inserisci un numero valido"), + "enterValidNumber": MessageLookupByLibrary.simpleMessage( + "Per favore, inserisci un numero valido"), "error_occurred": m0, - "ethereumContract": MessageLookupByLibrary.simpleMessage("Contratto Ethereum"), + "ethereumContract": + MessageLookupByLibrary.simpleMessage("Contratto Ethereum"), "exportData": MessageLookupByLibrary.simpleMessage("Esporta dati"), - "exportFailed": MessageLookupByLibrary.simpleMessage("Esportazione dati fallita"), - "exportSuccess": MessageLookupByLibrary.simpleMessage("Dati esportati con successo"), + "exportFailed": + MessageLookupByLibrary.simpleMessage("Esportazione dati fallita"), + "exportSuccess": + MessageLookupByLibrary.simpleMessage("Dati esportati con successo"), "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "finances": MessageLookupByLibrary.simpleMessage("Finanze"), "french": MessageLookupByLibrary.simpleMessage("Francais"), "futureRents": MessageLookupByLibrary.simpleMessage("Affitti futuri"), - "gnosisContract": MessageLookupByLibrary.simpleMessage("Contratto Gnosis"), - "grossRentMonth": MessageLookupByLibrary.simpleMessage("Affitto lordo al mese"), + "gnosisContract": + MessageLookupByLibrary.simpleMessage("Contratto Gnosis"), + "grossRentMonth": + MessageLookupByLibrary.simpleMessage("Affitto lordo al mese"), "groupedRentGraph": MessageLookupByLibrary.simpleMessage("Affitti"), "hello": MessageLookupByLibrary.simpleMessage("Ciao"), "hours": MessageLookupByLibrary.simpleMessage("Ore"), "importData": MessageLookupByLibrary.simpleMessage("Importa dati"), - "importExportData": MessageLookupByLibrary.simpleMessage("Importa o esporta dati (zip)"), - "importFailed": MessageLookupByLibrary.simpleMessage("Importazione dati fallita"), - "importSuccess": MessageLookupByLibrary.simpleMessage("Dati importati con successo"), - "initialLaunchDate": MessageLookupByLibrary.simpleMessage("Data di lancio iniziale"), - "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage("Riserva di manutenzione"), - "initialPrice": MessageLookupByLibrary.simpleMessage("Prezzo medio d\'acquisto"), - "initialPriceRemoved": MessageLookupByLibrary.simpleMessage("Prezzo medio d\'acquisto rimosso"), - "initialPriceUpdated": MessageLookupByLibrary.simpleMessage("Prezzo medio d\'acquisto aggiornato"), + "importExportData": MessageLookupByLibrary.simpleMessage( + "Importa o esporta dati (zip)"), + "importFailed": + MessageLookupByLibrary.simpleMessage("Importazione dati fallita"), + "importSuccess": + MessageLookupByLibrary.simpleMessage("Dati importati con successo"), + "initialLaunchDate": + MessageLookupByLibrary.simpleMessage("Data di lancio iniziale"), + "initialMaintenanceReserve": + MessageLookupByLibrary.simpleMessage("Riserva di manutenzione"), + "initialPrice": + MessageLookupByLibrary.simpleMessage("Prezzo medio d\'acquisto"), + "initialPriceRemoved": MessageLookupByLibrary.simpleMessage( + "Prezzo medio d\'acquisto rimosso"), + "initialPriceUpdated": MessageLookupByLibrary.simpleMessage( + "Prezzo medio d\'acquisto aggiornato"), "insights": MessageLookupByLibrary.simpleMessage("Approfondimenti"), "insurance": MessageLookupByLibrary.simpleMessage("Assicurazione"), "italian": MessageLookupByLibrary.simpleMessage("Italiano"), "language": MessageLookupByLibrary.simpleMessage("Lingua"), "languageUpdated": m1, - "lastExecution": MessageLookupByLibrary.simpleMessage("Ultimo aggiornamento"), - "lastRentReceived": MessageLookupByLibrary.simpleMessage("Il tuo ultimo affitto ricevuto ammonta a "), + "lastExecution": + MessageLookupByLibrary.simpleMessage("Ultimo aggiornamento"), + "lastRentReceived": MessageLookupByLibrary.simpleMessage( + "Il tuo ultimo affitto ricevuto ammonta a "), "light": MessageLookupByLibrary.simpleMessage("Chiaro"), + "lineChart": MessageLookupByLibrary.simpleMessage("Grafico a linee"), "lotSize": MessageLookupByLibrary.simpleMessage("Superficie del lotto"), - "manageAddresses": MessageLookupByLibrary.simpleMessage("Aggiungi portafoglio"), - "manageEvmAddresses": MessageLookupByLibrary.simpleMessage("Gestisci Portafogli"), + "manageAddresses": + MessageLookupByLibrary.simpleMessage("Aggiungi portafoglio"), + "manageEvmAddresses": + MessageLookupByLibrary.simpleMessage("Gestisci Portafogli"), "manualEdit": MessageLookupByLibrary.simpleMessage("Modifica Manuale"), "maps": MessageLookupByLibrary.simpleMessage("Mappe"), "mfrPortfolio": MessageLookupByLibrary.simpleMessage("Portafoglio MFR"), - "miscellaneousCosts": MessageLookupByLibrary.simpleMessage("Costi Vari"), + "miscellaneousCosts": + MessageLookupByLibrary.simpleMessage("Costi Vari"), "mixedUse": MessageLookupByLibrary.simpleMessage("Uso misto"), "month": MessageLookupByLibrary.simpleMessage("Mese"), "monthly": MessageLookupByLibrary.simpleMessage("Mensile"), "multiFamily": MessageLookupByLibrary.simpleMessage("Multifamiliare"), - "nameUnavailable": MessageLookupByLibrary.simpleMessage("Nome non disponibile"), + "nameUnavailable": + MessageLookupByLibrary.simpleMessage("Nome non disponibile"), "net": MessageLookupByLibrary.simpleMessage("Netto"), - "netAnnualRent": MessageLookupByLibrary.simpleMessage("Affitto netto annuale"), + "netAnnualRent": + MessageLookupByLibrary.simpleMessage("Affitto netto annuale"), "netApyHelp": MessageLookupByLibrary.simpleMessage( "Il rendimento netto viene calcolato ponderando i rendimenti dei portafogli (wallet/RMM) e i saldi di deposito/prestito con i rispettivi tassi."), - "netRentMonth": MessageLookupByLibrary.simpleMessage("Affitto netto al mese"), + "netRentMonth": + MessageLookupByLibrary.simpleMessage("Affitto netto al mese"), "network": MessageLookupByLibrary.simpleMessage("Rete"), "nextRondays": MessageLookupByLibrary.simpleMessage("Prossimi Rondays"), - "noCommunicatedDate": MessageLookupByLibrary.simpleMessage("Data non fornita"), - "noDataAvailable": MessageLookupByLibrary.simpleMessage("Nessun dato disponibile, per favore aggiungi un nuovo portafoglio"), - "noFutureRents": MessageLookupByLibrary.simpleMessage("Nessun affitto futuro"), - "noImageAvailable": MessageLookupByLibrary.simpleMessage("Link immagine non disponibile"), - "noPriceEvolution": MessageLookupByLibrary.simpleMessage("Nessuna evoluzione del prezzo. L\'ultimo prezzo è:"), - "noPropertiesForSale": MessageLookupByLibrary.simpleMessage("Nessuna proprietà in vendita"), - "noRecentUpdates": MessageLookupByLibrary.simpleMessage("Nessun cambiamento recente disponibile."), - "noRentReceived": MessageLookupByLibrary.simpleMessage("Nessun affitto ricevuto"), - "noYieldEvolution": MessageLookupByLibrary.simpleMessage("Nessuna evoluzione del rendimento. L\'ultimo rendimento è:"), - "no_market_offers_available": MessageLookupByLibrary.simpleMessage("Nessuna offerta di mercato disponibile"), + "noCommunicatedDate": + MessageLookupByLibrary.simpleMessage("Data non fornita"), + "noDataAvailable": MessageLookupByLibrary.simpleMessage( + "Nessun dato disponibile, per favore aggiungi un nuovo portafoglio"), + "noFutureRents": + MessageLookupByLibrary.simpleMessage("Nessun affitto futuro"), + "noImageAvailable": MessageLookupByLibrary.simpleMessage( + "Link immagine non disponibile"), + "noPriceEvolution": MessageLookupByLibrary.simpleMessage( + "Nessuna evoluzione del prezzo. L\'ultimo prezzo è:"), + "noPropertiesForSale": MessageLookupByLibrary.simpleMessage( + "Nessuna proprietà in vendita"), + "noRecentUpdates": MessageLookupByLibrary.simpleMessage( + "Nessun cambiamento recente disponibile."), + "noRentReceived": + MessageLookupByLibrary.simpleMessage("Nessun affitto ricevuto"), + "noYieldEvolution": MessageLookupByLibrary.simpleMessage( + "Nessuna evoluzione del rendimento. L\'ultimo rendimento è:"), + "no_market_offers_available": MessageLookupByLibrary.simpleMessage( + "Nessuna offerta di mercato disponibile"), "notSpecified": MessageLookupByLibrary.simpleMessage("Non specificato"), "offer_id": MessageLookupByLibrary.simpleMessage("ID Offerta"), "offering": MessageLookupByLibrary.simpleMessage("Offerta"), "other": MessageLookupByLibrary.simpleMessage("Altro"), "others": MessageLookupByLibrary.simpleMessage("Altri"), - "othersTitle": MessageLookupByLibrary.simpleMessage("Dettagli della sezione Altri"), + "othersTitle": MessageLookupByLibrary.simpleMessage( + "Dettagli della sezione Altri"), "paypal": MessageLookupByLibrary.simpleMessage("PayPal"), "period": MessageLookupByLibrary.simpleMessage("Periodo"), "portfolio": MessageLookupByLibrary.simpleMessage("Portafoglio"), "portuguese": MessageLookupByLibrary.simpleMessage("Português"), - "priceEvolution": MessageLookupByLibrary.simpleMessage("Evoluzione del prezzo"), - "priceEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Evoluzione del prezzo:"), + "priceEvolution": + MessageLookupByLibrary.simpleMessage("Evoluzione del prezzo"), + "priceEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Evoluzione del prezzo:"), "properties": MessageLookupByLibrary.simpleMessage("Proprietà"), - "propertiesForSale": MessageLookupByLibrary.simpleMessage("Proprietà in vendita"), - "properties_for_sale": MessageLookupByLibrary.simpleMessage("Proprietà in vendita"), - "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage("Manutenzione della proprietà (mensile)"), - "propertyManagement": MessageLookupByLibrary.simpleMessage("Gestione della proprietà"), - "propertyStories": MessageLookupByLibrary.simpleMessage("Numero di piani"), - "propertyTaxes": MessageLookupByLibrary.simpleMessage("Tasse sulla proprietà"), - "propertyType": MessageLookupByLibrary.simpleMessage("Tipo di proprietà"), - "realTPerformance": MessageLookupByLibrary.simpleMessage("Performance di RealT"), + "propertiesForSale": + MessageLookupByLibrary.simpleMessage("Proprietà in vendita"), + "properties_for_sale": + MessageLookupByLibrary.simpleMessage("Proprietà in vendita"), + "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage( + "Manutenzione della proprietà (mensile)"), + "propertyManagement": + MessageLookupByLibrary.simpleMessage("Gestione della proprietà"), + "propertyStories": + MessageLookupByLibrary.simpleMessage("Numero di piani"), + "propertyTaxes": + MessageLookupByLibrary.simpleMessage("Tasse sulla proprietà"), + "propertyType": + MessageLookupByLibrary.simpleMessage("Tipo di proprietà"), + "realTPerformance": + MessageLookupByLibrary.simpleMessage("Performance di RealT"), "realTTitle": MessageLookupByLibrary.simpleMessage("RealT"), - "realTokensList": MessageLookupByLibrary.simpleMessage("Elenco RealTokens"), + "realTokensList": + MessageLookupByLibrary.simpleMessage("Elenco RealTokens"), "realt": MessageLookupByLibrary.simpleMessage("RealT"), - "realtListingFee": MessageLookupByLibrary.simpleMessage("Tassa di Annuncio Realt"), - "realtPlatform": MessageLookupByLibrary.simpleMessage("Piattaforma RealT"), - "recentChanges": MessageLookupByLibrary.simpleMessage("Cambiamenti recenti"), - "recentUpdatesTitle": MessageLookupByLibrary.simpleMessage("Ultimi 30 giorni"), - "renovationReserve": MessageLookupByLibrary.simpleMessage("Fondo di Ristrutturazione"), - "rentGraph": MessageLookupByLibrary.simpleMessage("Grafico degli affitti ricevuti"), + "realtListingFee": + MessageLookupByLibrary.simpleMessage("Tassa di Annuncio Realt"), + "realtPlatform": + MessageLookupByLibrary.simpleMessage("Piattaforma RealT"), + "recentChanges": + MessageLookupByLibrary.simpleMessage("Cambiamenti recenti"), + "recentUpdatesTitle": + MessageLookupByLibrary.simpleMessage("Ultimi 30 giorni"), + "region": MessageLookupByLibrary.simpleMessage("Regione"), + "renovationReserve": + MessageLookupByLibrary.simpleMessage("Fondo di Ristrutturazione"), + "rentDistribution": + MessageLookupByLibrary.simpleMessage("Distribuzione degli affitti"), + "rentGraph": MessageLookupByLibrary.simpleMessage( + "Grafico degli affitti ricevuti"), "rentStartDate": MessageLookupByLibrary.simpleMessage("Primo affitto"), - "rentStartFuture": MessageLookupByLibrary.simpleMessage("Affitto non ancora iniziato"), - "rentalStatus": MessageLookupByLibrary.simpleMessage("Stato dell\'affitto"), + "rentStartFuture": + MessageLookupByLibrary.simpleMessage("Affitto non ancora iniziato"), + "rentalStatus": + MessageLookupByLibrary.simpleMessage("Stato dell\'affitto"), "rentalStatusAll": MessageLookupByLibrary.simpleMessage("Tutti"), - "rentalStatusNotRented": MessageLookupByLibrary.simpleMessage("Non affittato"), - "rentalStatusPartiallyRented": MessageLookupByLibrary.simpleMessage("Parzialmente affittato"), + "rentalStatusNotRented": + MessageLookupByLibrary.simpleMessage("Non affittato"), + "rentalStatusPartiallyRented": + MessageLookupByLibrary.simpleMessage("Parzialmente affittato"), "rentalStatusRented": MessageLookupByLibrary.simpleMessage("Affittato"), "rentalType": MessageLookupByLibrary.simpleMessage("Tipo di affitto"), "rented": MessageLookupByLibrary.simpleMessage("Affittato"), "rentedUnits": MessageLookupByLibrary.simpleMessage("Unità affittate"), "rents": MessageLookupByLibrary.simpleMessage("Affitti"), - "resortBungalow": MessageLookupByLibrary.simpleMessage("Bungalow di villeggiatura"), + "resortBungalow": + MessageLookupByLibrary.simpleMessage("Bungalow di villeggiatura"), "revenue": MessageLookupByLibrary.simpleMessage("Entrate"), "rmm": MessageLookupByLibrary.simpleMessage("RMM"), "roiAlertInfo": MessageLookupByLibrary.simpleMessage( "Questa funzione ROI è in fase beta ed è attualmente calcolata in base ai ricavi ricevuti dalla proprietà e al valore iniziale del token."), "roiHistory": MessageLookupByLibrary.simpleMessage("Storico ROI"), - "roiPerProperties": MessageLookupByLibrary.simpleMessage("ROI per proprietà"), + "roiPerProperties": + MessageLookupByLibrary.simpleMessage("ROI per proprietà"), "rwaHoldings": MessageLookupByLibrary.simpleMessage("RWA Holdings SA"), "save": MessageLookupByLibrary.simpleMessage("Salva"), "searchHint": MessageLookupByLibrary.simpleMessage("Cerca..."), "secondary": MessageLookupByLibrary.simpleMessage("Secondario"), - "secondary_offers_related_to_token": MessageLookupByLibrary.simpleMessage("Offerte YAMM legate al token"), + "secondary_offers_related_to_token": + MessageLookupByLibrary.simpleMessage( + "Offerte YAMM legate al token"), "section8paid": MessageLookupByLibrary.simpleMessage("Sezione 8"), "sell_token": MessageLookupByLibrary.simpleMessage("Vendere"), - "sendDonations": MessageLookupByLibrary.simpleMessage("Invia le tue donazioni al seguente indirizzo:"), - "serviceStatusPage": MessageLookupByLibrary.simpleMessage("Stato dei servizi"), + "sendDonations": MessageLookupByLibrary.simpleMessage( + "Invia le tue donazioni al seguente indirizzo:"), + "serviceStatusPage": + MessageLookupByLibrary.simpleMessage("Stato dei servizi"), "settings": MessageLookupByLibrary.simpleMessage("Impostazioni"), "settingsTitle": MessageLookupByLibrary.simpleMessage("Impostazioni"), "sfrPortfolio": MessageLookupByLibrary.simpleMessage("Portafoglio SFR"), "singleFamily": MessageLookupByLibrary.simpleMessage("Casa singola"), - "somethingWrong": MessageLookupByLibrary.simpleMessage("I dati potrebbero non essere aggiornati"), - "sortByAPY": MessageLookupByLibrary.simpleMessage("Ordina per rendimento annuo"), - "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage("Ordina per data di aggiunta"), + "somethingWrong": MessageLookupByLibrary.simpleMessage( + "I dati potrebbero non essere aggiornati"), + "sortByAPY": + MessageLookupByLibrary.simpleMessage("Ordina per rendimento annuo"), + "sortByInitialLaunchDate": + MessageLookupByLibrary.simpleMessage("Ordina per data di aggiunta"), "sortByName": MessageLookupByLibrary.simpleMessage("Ordina per nome"), - "sortByValue": MessageLookupByLibrary.simpleMessage("Ordina per valore"), + "sortByValue": + MessageLookupByLibrary.simpleMessage("Ordina per valore"), "spanish": MessageLookupByLibrary.simpleMessage("Español"), - "specialThanks": MessageLookupByLibrary.simpleMessage("Ringraziamenti speciali a @Sigri, @ehpst e @pitsbi per il loro supporto."), - "squareFeet": MessageLookupByLibrary.simpleMessage("Dimensione interna"), + "specialThanks": MessageLookupByLibrary.simpleMessage( + "Ringraziamenti speciali a @Sigri, @ehpst e @pitsbi per il loro supporto."), + "squareFeet": + MessageLookupByLibrary.simpleMessage("Dimensione interna"), "statistics": MessageLookupByLibrary.simpleMessage("Statistiche"), - "supportProject": MessageLookupByLibrary.simpleMessage("Sostieni il progetto"), - "textSize": MessageLookupByLibrary.simpleMessage("Dimensione del testo"), - "thankYouMessage": MessageLookupByLibrary.simpleMessage("Grazie a tutti coloro che hanno contribuito a questo progetto."), + "supportProject": + MessageLookupByLibrary.simpleMessage("Sostieni il progetto"), + "textSize": + MessageLookupByLibrary.simpleMessage("Dimensione del testo"), + "thankYouMessage": MessageLookupByLibrary.simpleMessage( + "Grazie a tutti coloro che hanno contribuito a questo progetto."), "thanks": MessageLookupByLibrary.simpleMessage("Grazie"), "themeUpdated": m2, - "tokenAddress": MessageLookupByLibrary.simpleMessage("Indirizzo del token"), - "tokenDistribution": MessageLookupByLibrary.simpleMessage("Distribuzione dei token per tipo di proprietà"), - "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage("Distribuzione dei token per città"), - "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage("Distribuzione dei token per paese"), - "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage("Distribuzione dei token per regione"), - "tokenSymbol": MessageLookupByLibrary.simpleMessage("Simbolo del token"), - "token_amount": MessageLookupByLibrary.simpleMessage("Quantità di token"), + "tokenAddress": + MessageLookupByLibrary.simpleMessage("Indirizzo del token"), + "tokenDistribution": MessageLookupByLibrary.simpleMessage( + "Distribuzione dei token per tipo di proprietà"), + "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage( + "Distribuzione dei token per città"), + "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage( + "Distribuzione dei token per paese"), + "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage( + "Distribuzione dei token per regione"), + "tokenSymbol": + MessageLookupByLibrary.simpleMessage("Simbolo del token"), + "token_amount": + MessageLookupByLibrary.simpleMessage("Quantità di token"), "token_value": MessageLookupByLibrary.simpleMessage("Valore del token"), "tokens": MessageLookupByLibrary.simpleMessage("Token"), "totalExpenses": MessageLookupByLibrary.simpleMessage("Spese Totali"), - "totalInvestment": MessageLookupByLibrary.simpleMessage("Investimento totale"), - "totalPortfolio": MessageLookupByLibrary.simpleMessage("Portafoglio Totale"), - "totalRentReceived": MessageLookupByLibrary.simpleMessage("Totale delle entrate"), + "totalInvestment": + MessageLookupByLibrary.simpleMessage("Investimento totale"), + "totalPortfolio": + MessageLookupByLibrary.simpleMessage("Portafoglio Totale"), + "totalRentReceived": + MessageLookupByLibrary.simpleMessage("Totale delle entrate"), "totalTokens": MessageLookupByLibrary.simpleMessage("Totale Token"), - "totalUnits": MessageLookupByLibrary.simpleMessage("Numero totale di unità"), + "totalUnits": + MessageLookupByLibrary.simpleMessage("Numero totale di unità"), "totalValue": MessageLookupByLibrary.simpleMessage("Valore totale"), - "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage("Prezzo dell\'asset"), + "underlyingAssetPrice": + MessageLookupByLibrary.simpleMessage("Prezzo dell\'asset"), "units": MessageLookupByLibrary.simpleMessage("unità"), "unknown": MessageLookupByLibrary.simpleMessage("Sconosciuto"), - "unknownCity": MessageLookupByLibrary.simpleMessage("Città sconosciuta"), - "unknownCountry": MessageLookupByLibrary.simpleMessage("Paese sconosciuto"), - "unknownTokenName": MessageLookupByLibrary.simpleMessage("Nome sconosciuto"), - "usdcBorrowBalance": MessageLookupByLibrary.simpleMessage("Saldo prestiti USDC"), - "usdcDepositBalance": MessageLookupByLibrary.simpleMessage("Saldo depositi USDC"), + "unknownCity": + MessageLookupByLibrary.simpleMessage("Città sconosciuta"), + "unknownCountry": + MessageLookupByLibrary.simpleMessage("Paese sconosciuto"), + "unknownTokenName": + MessageLookupByLibrary.simpleMessage("Nome sconosciuto"), + "usdcBorrowBalance": + MessageLookupByLibrary.simpleMessage("Saldo prestiti USDC"), + "usdcDepositBalance": + MessageLookupByLibrary.simpleMessage("Saldo depositi USDC"), "version": MessageLookupByLibrary.simpleMessage("Versione"), "viewOnMap": MessageLookupByLibrary.simpleMessage("Vedi sulla mappa"), "viewOnRealT": MessageLookupByLibrary.simpleMessage("Vedi su RealT"), "wallet": MessageLookupByLibrary.simpleMessage("Portafoglio"), - "walletBalanceHistory": MessageLookupByLibrary.simpleMessage("Storico del Saldo del Wallet"), + "walletBalanceHistory": MessageLookupByLibrary.simpleMessage( + "Storico del Saldo del Wallet"), "week": MessageLookupByLibrary.simpleMessage("Settimana"), "weekly": MessageLookupByLibrary.simpleMessage("Settimanale"), "weeks": MessageLookupByLibrary.simpleMessage("Settimane"), - "xdaiBorrowBalance": MessageLookupByLibrary.simpleMessage("Saldo prestiti XDAI"), - "xdaiDepositBalance": MessageLookupByLibrary.simpleMessage("Saldo depositi XDAI"), + "xdaiBorrowBalance": + MessageLookupByLibrary.simpleMessage("Saldo prestiti XDAI"), + "xdaiDepositBalance": + MessageLookupByLibrary.simpleMessage("Saldo depositi XDAI"), "year": MessageLookupByLibrary.simpleMessage("Anno"), - "yieldEvolution": MessageLookupByLibrary.simpleMessage("Evoluzione del rendimento"), - "yieldEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Evoluzione del rendimento:") + "yieldEvolution": + MessageLookupByLibrary.simpleMessage("Evoluzione del rendimento"), + "yieldEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Evoluzione del rendimento:") }; } diff --git a/lib/generated/intl/messages_pt.dart b/lib/generated/intl/messages_pt.dart index 5a8d17f..8e4184e 100644 --- a/lib/generated/intl/messages_pt.dart +++ b/lib/generated/intl/messages_pt.dart @@ -29,48 +29,66 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { "about": MessageLookupByLibrary.simpleMessage("Sobre"), - "aboutImportExport": - MessageLookupByLibrary.simpleMessage("Esta função permite salvar e reimportar os dados do histórico de saldos (carteira e RMM) em um arquivo ZIP."), - "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage("Função de Importação/Exportação"), - "addressCopied": MessageLookupByLibrary.simpleMessage("Endereço copiado para a área de transferência"), + "aboutImportExport": MessageLookupByLibrary.simpleMessage( + "Esta função permite salvar e reimportar os dados do histórico de saldos (carteira e RMM) em um arquivo ZIP."), + "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage( + "Função de Importação/Exportação"), + "addressCopied": MessageLookupByLibrary.simpleMessage( + "Endereço copiado para a área de transferência"), "allCities": MessageLookupByLibrary.simpleMessage("Todas as Cidades"), - "allWorkCorrectly": MessageLookupByLibrary.simpleMessage("Tudo está funcionando corretamente"), + "allWorkCorrectly": MessageLookupByLibrary.simpleMessage( + "Tudo está funcionando corretamente"), "amount": MessageLookupByLibrary.simpleMessage("Quantidade"), - "annualPercentageYield": MessageLookupByLibrary.simpleMessage("Rendimento Anual (%)"), - "annualYield": MessageLookupByLibrary.simpleMessage("Rendimento líquido"), + "annualPercentageYield": + MessageLookupByLibrary.simpleMessage("Rendimento Anual (%)"), + "annualYield": + MessageLookupByLibrary.simpleMessage("Rendimento líquido"), "annually": MessageLookupByLibrary.simpleMessage("Anual"), - "appDescription": MessageLookupByLibrary.simpleMessage("aplicativo móvel para a Comunidade"), + "appDescription": MessageLookupByLibrary.simpleMessage( + "aplicativo móvel para a Comunidade"), "appName": MessageLookupByLibrary.simpleMessage("RealToken"), "application": MessageLookupByLibrary.simpleMessage("Aplicativo"), "apy": MessageLookupByLibrary.simpleMessage("Rendimento Anual"), "apyHistory": MessageLookupByLibrary.simpleMessage("Histórico APY"), - "areYouSureClearData": MessageLookupByLibrary.simpleMessage("Tem certeza de que deseja limpar o cache e os dados?"), + "areYouSureClearData": MessageLookupByLibrary.simpleMessage( + "Tem certeza de que deseja limpar o cache e os dados?"), "ascending": MessageLookupByLibrary.simpleMessage("Ascendente"), "author": MessageLookupByLibrary.simpleMessage("Autor"), "averageApy": MessageLookupByLibrary.simpleMessage("Rendimento Médio"), "balance": MessageLookupByLibrary.simpleMessage("Saldo"), + "barChart": MessageLookupByLibrary.simpleMessage("Gráfico de barras"), "bedroomBath": MessageLookupByLibrary.simpleMessage("Quarto/Banheiro"), "blockchain": MessageLookupByLibrary.simpleMessage("Blockchain"), "borrowBalance": MessageLookupByLibrary.simpleMessage("Empréstimos"), "brute": MessageLookupByLibrary.simpleMessage("Bruto"), "buy_token": MessageLookupByLibrary.simpleMessage("Comprar"), "cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), - "characteristics": MessageLookupByLibrary.simpleMessage("Características"), + "characteristics": + MessageLookupByLibrary.simpleMessage("Características"), "chinese": MessageLookupByLibrary.simpleMessage("中文"), - "clearCacheData": MessageLookupByLibrary.simpleMessage("Limpar Cache/Dados"), + "city": MessageLookupByLibrary.simpleMessage("Cidade"), + "clearCacheData": + MessageLookupByLibrary.simpleMessage("Limpar Cache/Dados"), "close": MessageLookupByLibrary.simpleMessage("Fechar"), "commercial": MessageLookupByLibrary.simpleMessage("Comercial"), "condominium": MessageLookupByLibrary.simpleMessage("Condomínio"), "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), "confirmAction": MessageLookupByLibrary.simpleMessage("Confirmar Ação"), - "constructionYear": MessageLookupByLibrary.simpleMessage("Ano de Construção"), - "contractType": MessageLookupByLibrary.simpleMessage("Tipo de Contrato"), - "convertSqft": MessageLookupByLibrary.simpleMessage("Converter sqft para m²"), + "constructionYear": + MessageLookupByLibrary.simpleMessage("Ano de Construção"), + "contractType": + MessageLookupByLibrary.simpleMessage("Tipo de Contrato"), + "convertSqft": + MessageLookupByLibrary.simpleMessage("Converter sqft para m²"), "copy": MessageLookupByLibrary.simpleMessage("Copiar"), - "creation_date": MessageLookupByLibrary.simpleMessage("Data de criação"), + "country": MessageLookupByLibrary.simpleMessage("País"), + "creation_date": + MessageLookupByLibrary.simpleMessage("Data de criação"), "crypto": MessageLookupByLibrary.simpleMessage("Cripto"), - "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage("Endereço para Doações em Cripto"), - "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage("Gráfico de Aluguéis Acumulados"), + "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage( + "Endereço para Doações em Cripto"), + "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage( + "Gráfico de Aluguéis Acumulados"), "currency": MessageLookupByLibrary.simpleMessage("Moeda"), "daily": MessageLookupByLibrary.simpleMessage("Diário"), "dark": MessageLookupByLibrary.simpleMessage("Escuro"), @@ -79,189 +97,291 @@ class MessageLookup extends MessageLookupByLibrary { "date": MessageLookupByLibrary.simpleMessage("Data"), "day": MessageLookupByLibrary.simpleMessage("Dia"), "days": MessageLookupByLibrary.simpleMessage("Dias"), - "delta_price": MessageLookupByLibrary.simpleMessage("Diferença de preço"), + "delta_price": + MessageLookupByLibrary.simpleMessage("Diferença de preço"), "depositBalance": MessageLookupByLibrary.simpleMessage("Depósitos"), "descending": MessageLookupByLibrary.simpleMessage("Descendente"), "donate": MessageLookupByLibrary.simpleMessage("Doar"), - "donationMessage": MessageLookupByLibrary.simpleMessage("Se você gosta deste aplicativo e deseja apoiar seu desenvolvimento, você pode doar."), + "donationMessage": MessageLookupByLibrary.simpleMessage( + "Se você gosta deste aplicativo e deseja apoiar seu desenvolvimento, você pode doar."), "duplex": MessageLookupByLibrary.simpleMessage("Duplex"), - "duplicate": MessageLookupByLibrary.simpleMessage("Propriedades presentes em várias carteiras/RMM"), - "duplicate_title": MessageLookupByLibrary.simpleMessage("Propriedades Duplicadas"), + "duplicate": MessageLookupByLibrary.simpleMessage( + "Propriedades presentes em várias carteiras/RMM"), + "duplicate_title": + MessageLookupByLibrary.simpleMessage("Propriedades Duplicadas"), "edit": MessageLookupByLibrary.simpleMessage("Editar"), - "editWalletBalance": MessageLookupByLibrary.simpleMessage("Editar Histórico do Wallet"), + "editWalletBalance": + MessageLookupByLibrary.simpleMessage("Editar Histórico do Wallet"), "english": MessageLookupByLibrary.simpleMessage("English"), - "enterValidNumber": MessageLookupByLibrary.simpleMessage("Por favor, insira um número válido"), + "enterValidNumber": MessageLookupByLibrary.simpleMessage( + "Por favor, insira um número válido"), "error_occurred": m0, - "ethereumContract": MessageLookupByLibrary.simpleMessage("Contrato Ethereum"), + "ethereumContract": + MessageLookupByLibrary.simpleMessage("Contrato Ethereum"), "exportData": MessageLookupByLibrary.simpleMessage("Exportar Dados"), - "exportFailed": MessageLookupByLibrary.simpleMessage("Falha ao exportar dados"), - "exportSuccess": MessageLookupByLibrary.simpleMessage("Dados exportados com sucesso"), + "exportFailed": + MessageLookupByLibrary.simpleMessage("Falha ao exportar dados"), + "exportSuccess": MessageLookupByLibrary.simpleMessage( + "Dados exportados com sucesso"), "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "finances": MessageLookupByLibrary.simpleMessage("Finanças"), "french": MessageLookupByLibrary.simpleMessage("Francais"), "futureRents": MessageLookupByLibrary.simpleMessage("Aluguéis Futuros"), - "gnosisContract": MessageLookupByLibrary.simpleMessage("Contrato Gnosis"), - "grossRentMonth": MessageLookupByLibrary.simpleMessage("Aluguel Bruto por Mês"), + "gnosisContract": + MessageLookupByLibrary.simpleMessage("Contrato Gnosis"), + "grossRentMonth": + MessageLookupByLibrary.simpleMessage("Aluguel Bruto por Mês"), "groupedRentGraph": MessageLookupByLibrary.simpleMessage("Aluguéis"), "hello": MessageLookupByLibrary.simpleMessage("Olá"), "hours": MessageLookupByLibrary.simpleMessage("Horas"), "importData": MessageLookupByLibrary.simpleMessage("Importar Dados"), - "importExportData": MessageLookupByLibrary.simpleMessage("Importar ou exportar dados (zip)"), - "importFailed": MessageLookupByLibrary.simpleMessage("Falha ao importar dados"), - "importSuccess": MessageLookupByLibrary.simpleMessage("Dados importados com sucesso"), - "initialLaunchDate": MessageLookupByLibrary.simpleMessage("Data de Lançamento Inicial"), - "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage("Reserva de Manutenção Inicial"), - "initialPrice": MessageLookupByLibrary.simpleMessage("Preço médio de compra"), - "initialPriceRemoved": MessageLookupByLibrary.simpleMessage("Preço médio de compra removido"), - "initialPriceUpdated": MessageLookupByLibrary.simpleMessage("Preço médio de compra atualizado"), + "importExportData": MessageLookupByLibrary.simpleMessage( + "Importar ou exportar dados (zip)"), + "importFailed": + MessageLookupByLibrary.simpleMessage("Falha ao importar dados"), + "importSuccess": MessageLookupByLibrary.simpleMessage( + "Dados importados com sucesso"), + "initialLaunchDate": + MessageLookupByLibrary.simpleMessage("Data de Lançamento Inicial"), + "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage( + "Reserva de Manutenção Inicial"), + "initialPrice": + MessageLookupByLibrary.simpleMessage("Preço médio de compra"), + "initialPriceRemoved": MessageLookupByLibrary.simpleMessage( + "Preço médio de compra removido"), + "initialPriceUpdated": MessageLookupByLibrary.simpleMessage( + "Preço médio de compra atualizado"), "insights": MessageLookupByLibrary.simpleMessage("Insights"), "insurance": MessageLookupByLibrary.simpleMessage("Seguro"), "italian": MessageLookupByLibrary.simpleMessage("Italiano"), "language": MessageLookupByLibrary.simpleMessage("Idioma"), "languageUpdated": m1, - "lastExecution": MessageLookupByLibrary.simpleMessage("Última atualização"), - "lastRentReceived": MessageLookupByLibrary.simpleMessage("O último aluguel recebido foi de "), + "lastExecution": + MessageLookupByLibrary.simpleMessage("Última atualização"), + "lastRentReceived": MessageLookupByLibrary.simpleMessage( + "O último aluguel recebido foi de "), "light": MessageLookupByLibrary.simpleMessage("Claro"), + "lineChart": MessageLookupByLibrary.simpleMessage("Gráfico de linhas"), "lotSize": MessageLookupByLibrary.simpleMessage("Tamanho do Lote"), - "manageAddresses": MessageLookupByLibrary.simpleMessage("Adicionar carteira"), - "manageEvmAddresses": MessageLookupByLibrary.simpleMessage("Gerenciar Carteiras"), + "manageAddresses": + MessageLookupByLibrary.simpleMessage("Adicionar carteira"), + "manageEvmAddresses": + MessageLookupByLibrary.simpleMessage("Gerenciar Carteiras"), "manualEdit": MessageLookupByLibrary.simpleMessage("Edição Manual"), "maps": MessageLookupByLibrary.simpleMessage("Mapas"), "mfrPortfolio": MessageLookupByLibrary.simpleMessage("Portfólio MFR"), - "miscellaneousCosts": MessageLookupByLibrary.simpleMessage("Custos Diversos"), + "miscellaneousCosts": + MessageLookupByLibrary.simpleMessage("Custos Diversos"), "mixedUse": MessageLookupByLibrary.simpleMessage("Uso Misto"), "month": MessageLookupByLibrary.simpleMessage("Mês"), "monthly": MessageLookupByLibrary.simpleMessage("Mensal"), - "multiFamily": MessageLookupByLibrary.simpleMessage("Casa Multifamiliar"), - "nameUnavailable": MessageLookupByLibrary.simpleMessage("Nome Indisponível"), + "multiFamily": + MessageLookupByLibrary.simpleMessage("Casa Multifamiliar"), + "nameUnavailable": + MessageLookupByLibrary.simpleMessage("Nome Indisponível"), "net": MessageLookupByLibrary.simpleMessage("Líquido"), - "netAnnualRent": MessageLookupByLibrary.simpleMessage("Aluguel Líquido Anual"), + "netAnnualRent": + MessageLookupByLibrary.simpleMessage("Aluguel Líquido Anual"), "netApyHelp": MessageLookupByLibrary.simpleMessage( "O rendimento líquido é calculado ponderando os rendimentos das carteiras (wallet/RMM) e os saldos de depósitos/empréstimos com as suas respetivas taxas."), - "netRentMonth": MessageLookupByLibrary.simpleMessage("Aluguel Líquido por Mês"), + "netRentMonth": + MessageLookupByLibrary.simpleMessage("Aluguel Líquido por Mês"), "network": MessageLookupByLibrary.simpleMessage("Rede"), "nextRondays": MessageLookupByLibrary.simpleMessage("Próximos Rondays"), - "noCommunicatedDate": MessageLookupByLibrary.simpleMessage("Data não informada"), - "noDataAvailable": MessageLookupByLibrary.simpleMessage("Nenhum dado disponível, por favor adicione uma nova carteira"), - "noFutureRents": MessageLookupByLibrary.simpleMessage("Sem aluguéis futuros"), - "noImageAvailable": MessageLookupByLibrary.simpleMessage("Link de imagem não disponível"), - "noPriceEvolution": MessageLookupByLibrary.simpleMessage("Sem evolução de preço. O último preço é:"), - "noPropertiesForSale": MessageLookupByLibrary.simpleMessage("Nenhuma propriedade à venda"), - "noRecentUpdates": MessageLookupByLibrary.simpleMessage("Nenhuma alteração recente disponível."), - "noRentReceived": MessageLookupByLibrary.simpleMessage("Nenhum aluguel recebido"), - "noYieldEvolution": MessageLookupByLibrary.simpleMessage("Sem evolução de rendimento. O último rendimento é:"), - "no_market_offers_available": MessageLookupByLibrary.simpleMessage("Nenhuma oferta de mercado disponível"), - "notSpecified": MessageLookupByLibrary.simpleMessage("Não Especificado"), + "noCommunicatedDate": + MessageLookupByLibrary.simpleMessage("Data não informada"), + "noDataAvailable": MessageLookupByLibrary.simpleMessage( + "Nenhum dado disponível, por favor adicione uma nova carteira"), + "noFutureRents": + MessageLookupByLibrary.simpleMessage("Sem aluguéis futuros"), + "noImageAvailable": MessageLookupByLibrary.simpleMessage( + "Link de imagem não disponível"), + "noPriceEvolution": MessageLookupByLibrary.simpleMessage( + "Sem evolução de preço. O último preço é:"), + "noPropertiesForSale": + MessageLookupByLibrary.simpleMessage("Nenhuma propriedade à venda"), + "noRecentUpdates": MessageLookupByLibrary.simpleMessage( + "Nenhuma alteração recente disponível."), + "noRentReceived": + MessageLookupByLibrary.simpleMessage("Nenhum aluguel recebido"), + "noYieldEvolution": MessageLookupByLibrary.simpleMessage( + "Sem evolução de rendimento. O último rendimento é:"), + "no_market_offers_available": MessageLookupByLibrary.simpleMessage( + "Nenhuma oferta de mercado disponível"), + "notSpecified": + MessageLookupByLibrary.simpleMessage("Não Especificado"), "offer_id": MessageLookupByLibrary.simpleMessage("ID Oferta"), "offering": MessageLookupByLibrary.simpleMessage("Oferta"), "other": MessageLookupByLibrary.simpleMessage("Outro"), "others": MessageLookupByLibrary.simpleMessage("Outros"), - "othersTitle": MessageLookupByLibrary.simpleMessage("Detalhes da seção Outros"), + "othersTitle": + MessageLookupByLibrary.simpleMessage("Detalhes da seção Outros"), "paypal": MessageLookupByLibrary.simpleMessage("PayPal"), "period": MessageLookupByLibrary.simpleMessage("Período"), "portfolio": MessageLookupByLibrary.simpleMessage("Portfólio"), "portuguese": MessageLookupByLibrary.simpleMessage("Português"), - "priceEvolution": MessageLookupByLibrary.simpleMessage("Evolução do Preço"), - "priceEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Evolução do preço:"), + "priceEvolution": + MessageLookupByLibrary.simpleMessage("Evolução do Preço"), + "priceEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Evolução do preço:"), "properties": MessageLookupByLibrary.simpleMessage("Propriedades"), - "propertiesForSale": MessageLookupByLibrary.simpleMessage("Propriedades à venda"), - "properties_for_sale": MessageLookupByLibrary.simpleMessage("Propriedades à venda"), - "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage("Manutenção da propriedade (mensal)"), - "propertyManagement": MessageLookupByLibrary.simpleMessage("Gestão de propriedades"), - "propertyStories": MessageLookupByLibrary.simpleMessage("Número de Andares"), - "propertyTaxes": MessageLookupByLibrary.simpleMessage("Impostos sobre a propriedade"), - "propertyType": MessageLookupByLibrary.simpleMessage("Tipo de propriedade"), - "realTPerformance": MessageLookupByLibrary.simpleMessage("Desempenho do RealT"), + "propertiesForSale": + MessageLookupByLibrary.simpleMessage("Propriedades à venda"), + "properties_for_sale": + MessageLookupByLibrary.simpleMessage("Propriedades à venda"), + "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage( + "Manutenção da propriedade (mensal)"), + "propertyManagement": + MessageLookupByLibrary.simpleMessage("Gestão de propriedades"), + "propertyStories": + MessageLookupByLibrary.simpleMessage("Número de Andares"), + "propertyTaxes": MessageLookupByLibrary.simpleMessage( + "Impostos sobre a propriedade"), + "propertyType": + MessageLookupByLibrary.simpleMessage("Tipo de propriedade"), + "realTPerformance": + MessageLookupByLibrary.simpleMessage("Desempenho do RealT"), "realTTitle": MessageLookupByLibrary.simpleMessage("RealT"), - "realTokensList": MessageLookupByLibrary.simpleMessage("Lista de RealTokens"), + "realTokensList": + MessageLookupByLibrary.simpleMessage("Lista de RealTokens"), "realt": MessageLookupByLibrary.simpleMessage("RealT"), - "realtListingFee": MessageLookupByLibrary.simpleMessage("Taxa de Listagem Realt"), - "realtPlatform": MessageLookupByLibrary.simpleMessage("Plataforma RealT"), - "recentChanges": MessageLookupByLibrary.simpleMessage("Alterações Recentes"), - "recentUpdatesTitle": MessageLookupByLibrary.simpleMessage("Últimos 30 dias"), - "renovationReserve": MessageLookupByLibrary.simpleMessage("Reserva de Renovação"), - "rentGraph": MessageLookupByLibrary.simpleMessage("Gráfico de Aluguéis Recebidos"), - "rentStartDate": MessageLookupByLibrary.simpleMessage("Primeiro Aluguel"), - "rentStartFuture": MessageLookupByLibrary.simpleMessage("Aluguel não iniciado"), - "rentalStatus": MessageLookupByLibrary.simpleMessage("Status do Aluguel"), + "realtListingFee": + MessageLookupByLibrary.simpleMessage("Taxa de Listagem Realt"), + "realtPlatform": + MessageLookupByLibrary.simpleMessage("Plataforma RealT"), + "recentChanges": + MessageLookupByLibrary.simpleMessage("Alterações Recentes"), + "recentUpdatesTitle": + MessageLookupByLibrary.simpleMessage("Últimos 30 dias"), + "region": MessageLookupByLibrary.simpleMessage("Região"), + "renovationReserve": + MessageLookupByLibrary.simpleMessage("Reserva de Renovação"), + "rentDistribution": + MessageLookupByLibrary.simpleMessage("Distribuição de aluguéis"), + "rentGraph": MessageLookupByLibrary.simpleMessage( + "Gráfico de Aluguéis Recebidos"), + "rentStartDate": + MessageLookupByLibrary.simpleMessage("Primeiro Aluguel"), + "rentStartFuture": + MessageLookupByLibrary.simpleMessage("Aluguel não iniciado"), + "rentalStatus": + MessageLookupByLibrary.simpleMessage("Status do Aluguel"), "rentalStatusAll": MessageLookupByLibrary.simpleMessage("Todos"), - "rentalStatusNotRented": MessageLookupByLibrary.simpleMessage("Não Alugado"), - "rentalStatusPartiallyRented": MessageLookupByLibrary.simpleMessage("Parcialmente Alugado"), + "rentalStatusNotRented": + MessageLookupByLibrary.simpleMessage("Não Alugado"), + "rentalStatusPartiallyRented": + MessageLookupByLibrary.simpleMessage("Parcialmente Alugado"), "rentalStatusRented": MessageLookupByLibrary.simpleMessage("Alugado"), "rentalType": MessageLookupByLibrary.simpleMessage("Tipo de Aluguel"), "rented": MessageLookupByLibrary.simpleMessage("Alugado"), - "rentedUnits": MessageLookupByLibrary.simpleMessage("Unidades Alugadas"), + "rentedUnits": + MessageLookupByLibrary.simpleMessage("Unidades Alugadas"), "rents": MessageLookupByLibrary.simpleMessage("Aluguéis"), - "resortBungalow": MessageLookupByLibrary.simpleMessage("Bangalô de Resort"), + "resortBungalow": + MessageLookupByLibrary.simpleMessage("Bangalô de Resort"), "revenue": MessageLookupByLibrary.simpleMessage("Receita"), "rmm": MessageLookupByLibrary.simpleMessage("RMM"), "roiAlertInfo": MessageLookupByLibrary.simpleMessage( "Esta função ROI está em fase beta e é atualmente calculada com base na renda recebida da propriedade e no valor inicial do token."), "roiHistory": MessageLookupByLibrary.simpleMessage("Histórico ROI"), - "roiPerProperties": MessageLookupByLibrary.simpleMessage("ROI por Propriedade"), + "roiPerProperties": + MessageLookupByLibrary.simpleMessage("ROI por Propriedade"), "rwaHoldings": MessageLookupByLibrary.simpleMessage("RWA Holdings SA"), "save": MessageLookupByLibrary.simpleMessage("Salvar"), "searchHint": MessageLookupByLibrary.simpleMessage("Buscar..."), "secondary": MessageLookupByLibrary.simpleMessage("Secundário"), - "secondary_offers_related_to_token": MessageLookupByLibrary.simpleMessage("Ofertas YAMM relacionadas ao token"), + "secondary_offers_related_to_token": + MessageLookupByLibrary.simpleMessage( + "Ofertas YAMM relacionadas ao token"), "section8paid": MessageLookupByLibrary.simpleMessage("Seção 8"), "sell_token": MessageLookupByLibrary.simpleMessage("Vender"), - "sendDonations": MessageLookupByLibrary.simpleMessage("Envie suas doações para o endereço abaixo:"), - "serviceStatusPage": MessageLookupByLibrary.simpleMessage("Status dos Serviços"), + "sendDonations": MessageLookupByLibrary.simpleMessage( + "Envie suas doações para o endereço abaixo:"), + "serviceStatusPage": + MessageLookupByLibrary.simpleMessage("Status dos Serviços"), "settings": MessageLookupByLibrary.simpleMessage("Configurações"), "settingsTitle": MessageLookupByLibrary.simpleMessage("Configurações"), "sfrPortfolio": MessageLookupByLibrary.simpleMessage("Portfólio SFR"), - "singleFamily": MessageLookupByLibrary.simpleMessage("Casa Unifamiliar"), - "somethingWrong": MessageLookupByLibrary.simpleMessage("Os dados podem não estar atualizados"), - "sortByAPY": MessageLookupByLibrary.simpleMessage("Ordenar por Rendimento"), - "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage("Ordenar por Recente"), + "singleFamily": + MessageLookupByLibrary.simpleMessage("Casa Unifamiliar"), + "somethingWrong": MessageLookupByLibrary.simpleMessage( + "Os dados podem não estar atualizados"), + "sortByAPY": + MessageLookupByLibrary.simpleMessage("Ordenar por Rendimento"), + "sortByInitialLaunchDate": + MessageLookupByLibrary.simpleMessage("Ordenar por Recente"), "sortByName": MessageLookupByLibrary.simpleMessage("Ordenar por Nome"), - "sortByValue": MessageLookupByLibrary.simpleMessage("Ordenar por Valor"), + "sortByValue": + MessageLookupByLibrary.simpleMessage("Ordenar por Valor"), "spanish": MessageLookupByLibrary.simpleMessage("Español"), - "specialThanks": MessageLookupByLibrary.simpleMessage("Agradecimentos especiais a @Sigri, @ehpst, e @pitsbi pelo apoio."), + "specialThanks": MessageLookupByLibrary.simpleMessage( + "Agradecimentos especiais a @Sigri, @ehpst, e @pitsbi pelo apoio."), "squareFeet": MessageLookupByLibrary.simpleMessage("Tamanho Interno"), "statistics": MessageLookupByLibrary.simpleMessage("Estatísticas"), - "supportProject": MessageLookupByLibrary.simpleMessage("Apoiar o Projeto"), + "supportProject": + MessageLookupByLibrary.simpleMessage("Apoiar o Projeto"), "textSize": MessageLookupByLibrary.simpleMessage("Tamanho do Texto"), - "thankYouMessage": MessageLookupByLibrary.simpleMessage("Obrigado a todos que contribuíram para este projeto."), + "thankYouMessage": MessageLookupByLibrary.simpleMessage( + "Obrigado a todos que contribuíram para este projeto."), "thanks": MessageLookupByLibrary.simpleMessage("Agradecimentos"), "themeUpdated": m2, - "tokenAddress": MessageLookupByLibrary.simpleMessage("Endereço do Token"), - "tokenDistribution": MessageLookupByLibrary.simpleMessage("Distribuição de Tokens por Tipo de Propriedade"), - "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage("Distribuição de Tokens por Cidade"), - "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage("Distribuição de Tokens por País"), - "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage("Distribuição de Tokens por Região"), + "tokenAddress": + MessageLookupByLibrary.simpleMessage("Endereço do Token"), + "tokenDistribution": MessageLookupByLibrary.simpleMessage( + "Distribuição de Tokens por Tipo de Propriedade"), + "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage( + "Distribuição de Tokens por Cidade"), + "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage( + "Distribuição de Tokens por País"), + "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage( + "Distribuição de Tokens por Região"), "tokenSymbol": MessageLookupByLibrary.simpleMessage("Símbolo do Token"), - "token_amount": MessageLookupByLibrary.simpleMessage("Quantidade de tokens"), + "token_amount": + MessageLookupByLibrary.simpleMessage("Quantidade de tokens"), "token_value": MessageLookupByLibrary.simpleMessage("Valor do token"), "tokens": MessageLookupByLibrary.simpleMessage("Tokens"), - "totalExpenses": MessageLookupByLibrary.simpleMessage("Despesas Totais"), - "totalInvestment": MessageLookupByLibrary.simpleMessage("Investimento Total"), - "totalPortfolio": MessageLookupByLibrary.simpleMessage("Portfólio Total"), - "totalRentReceived": MessageLookupByLibrary.simpleMessage("Total de Receitas"), + "totalExpenses": + MessageLookupByLibrary.simpleMessage("Despesas Totais"), + "totalInvestment": + MessageLookupByLibrary.simpleMessage("Investimento Total"), + "totalPortfolio": + MessageLookupByLibrary.simpleMessage("Portfólio Total"), + "totalRentReceived": + MessageLookupByLibrary.simpleMessage("Total de Receitas"), "totalTokens": MessageLookupByLibrary.simpleMessage("Total de Tokens"), "totalUnits": MessageLookupByLibrary.simpleMessage("Total de Unidades"), "totalValue": MessageLookupByLibrary.simpleMessage("Valor Total"), - "underlyingAssetPrice": MessageLookupByLibrary.simpleMessage("Preço do Ativo Subjacente"), + "underlyingAssetPrice": + MessageLookupByLibrary.simpleMessage("Preço do Ativo Subjacente"), "units": MessageLookupByLibrary.simpleMessage("unidades"), "unknown": MessageLookupByLibrary.simpleMessage("Desconhecido"), - "unknownCity": MessageLookupByLibrary.simpleMessage("Cidade Desconhecida"), - "unknownCountry": MessageLookupByLibrary.simpleMessage("País desconhecido"), - "unknownTokenName": MessageLookupByLibrary.simpleMessage("Nome Desconhecido"), - "usdcBorrowBalance": MessageLookupByLibrary.simpleMessage("Saldo de Empréstimo USDC"), - "usdcDepositBalance": MessageLookupByLibrary.simpleMessage("Saldo de Depósito USDC"), + "unknownCity": + MessageLookupByLibrary.simpleMessage("Cidade Desconhecida"), + "unknownCountry": + MessageLookupByLibrary.simpleMessage("País desconhecido"), + "unknownTokenName": + MessageLookupByLibrary.simpleMessage("Nome Desconhecido"), + "usdcBorrowBalance": + MessageLookupByLibrary.simpleMessage("Saldo de Empréstimo USDC"), + "usdcDepositBalance": + MessageLookupByLibrary.simpleMessage("Saldo de Depósito USDC"), "version": MessageLookupByLibrary.simpleMessage("Versão"), "viewOnMap": MessageLookupByLibrary.simpleMessage("Ver no Mapa"), "viewOnRealT": MessageLookupByLibrary.simpleMessage("Ver no RealT"), "wallet": MessageLookupByLibrary.simpleMessage("Carteira"), - "walletBalanceHistory": MessageLookupByLibrary.simpleMessage("Histórico de Saldo do Wallet"), + "walletBalanceHistory": MessageLookupByLibrary.simpleMessage( + "Histórico de Saldo do Wallet"), "week": MessageLookupByLibrary.simpleMessage("Semana"), "weekly": MessageLookupByLibrary.simpleMessage("Semanal"), "weeks": MessageLookupByLibrary.simpleMessage("Semanas"), - "xdaiBorrowBalance": MessageLookupByLibrary.simpleMessage("Saldo de Empréstimo XDAI"), - "xdaiDepositBalance": MessageLookupByLibrary.simpleMessage("Saldo de Depósito XDAI"), + "xdaiBorrowBalance": + MessageLookupByLibrary.simpleMessage("Saldo de Empréstimo XDAI"), + "xdaiDepositBalance": + MessageLookupByLibrary.simpleMessage("Saldo de Depósito XDAI"), "year": MessageLookupByLibrary.simpleMessage("Ano"), - "yieldEvolution": MessageLookupByLibrary.simpleMessage("Evolução do Rendimento"), - "yieldEvolutionPercentage": MessageLookupByLibrary.simpleMessage("Evolução do rendimento:") + "yieldEvolution": + MessageLookupByLibrary.simpleMessage("Evolução do Rendimento"), + "yieldEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("Evolução do rendimento:") }; } diff --git a/lib/generated/intl/messages_zh.dart b/lib/generated/intl/messages_zh.dart index e01469d..42a8f85 100644 --- a/lib/generated/intl/messages_zh.dart +++ b/lib/generated/intl/messages_zh.dart @@ -29,8 +29,10 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { "about": MessageLookupByLibrary.simpleMessage("关于"), - "aboutImportExport": MessageLookupByLibrary.simpleMessage("此功能允许您将钱包和RMM的余额历史保存并重新导入到ZIP文件中。"), - "aboutImportExportTitle": MessageLookupByLibrary.simpleMessage("导入/导出功能"), + "aboutImportExport": MessageLookupByLibrary.simpleMessage( + "此功能允许您将钱包和RMM的余额历史保存并重新导入到ZIP文件中。"), + "aboutImportExportTitle": + MessageLookupByLibrary.simpleMessage("导入/导出功能"), "addressCopied": MessageLookupByLibrary.simpleMessage("地址已复制到剪贴板"), "allCities": MessageLookupByLibrary.simpleMessage("所有城市"), "allWorkCorrectly": MessageLookupByLibrary.simpleMessage("一切正常"), @@ -43,11 +45,13 @@ class MessageLookup extends MessageLookupByLibrary { "application": MessageLookupByLibrary.simpleMessage("应用"), "apy": MessageLookupByLibrary.simpleMessage("年收益率"), "apyHistory": MessageLookupByLibrary.simpleMessage("APY 历史"), - "areYouSureClearData": MessageLookupByLibrary.simpleMessage("您确定要清除缓存和数据吗?"), + "areYouSureClearData": + MessageLookupByLibrary.simpleMessage("您确定要清除缓存和数据吗?"), "ascending": MessageLookupByLibrary.simpleMessage("升序"), "author": MessageLookupByLibrary.simpleMessage("作者"), "averageApy": MessageLookupByLibrary.simpleMessage("平均年收益率"), "balance": MessageLookupByLibrary.simpleMessage("余额"), + "barChart": MessageLookupByLibrary.simpleMessage("柱状图"), "bedroomBath": MessageLookupByLibrary.simpleMessage("卧室/浴室"), "blockchain": MessageLookupByLibrary.simpleMessage("区块链"), "borrowBalance": MessageLookupByLibrary.simpleMessage("借款"), @@ -56,6 +60,7 @@ class MessageLookup extends MessageLookupByLibrary { "cancel": MessageLookupByLibrary.simpleMessage("取消"), "characteristics": MessageLookupByLibrary.simpleMessage("特征"), "chinese": MessageLookupByLibrary.simpleMessage("中文"), + "city": MessageLookupByLibrary.simpleMessage("城市"), "clearCacheData": MessageLookupByLibrary.simpleMessage("清除缓存/数据"), "close": MessageLookupByLibrary.simpleMessage("关闭"), "commercial": MessageLookupByLibrary.simpleMessage("商业"), @@ -66,9 +71,11 @@ class MessageLookup extends MessageLookupByLibrary { "contractType": MessageLookupByLibrary.simpleMessage("合约类型"), "convertSqft": MessageLookupByLibrary.simpleMessage("将平方英尺转换为平方米"), "copy": MessageLookupByLibrary.simpleMessage("复制"), + "country": MessageLookupByLibrary.simpleMessage("国家"), "creation_date": MessageLookupByLibrary.simpleMessage("创建日期"), "crypto": MessageLookupByLibrary.simpleMessage("加密货币"), - "cryptoDonationAddress": MessageLookupByLibrary.simpleMessage("加密货币捐赠地址"), + "cryptoDonationAddress": + MessageLookupByLibrary.simpleMessage("加密货币捐赠地址"), "cumulativeRentGraph": MessageLookupByLibrary.simpleMessage("累积租金图表"), "currency": MessageLookupByLibrary.simpleMessage("货币"), "daily": MessageLookupByLibrary.simpleMessage("每日"), @@ -82,7 +89,8 @@ class MessageLookup extends MessageLookupByLibrary { "depositBalance": MessageLookupByLibrary.simpleMessage("存款"), "descending": MessageLookupByLibrary.simpleMessage("降序"), "donate": MessageLookupByLibrary.simpleMessage("捐赠"), - "donationMessage": MessageLookupByLibrary.simpleMessage("如果您喜欢此应用并希望支持其开发,您可以捐款。"), + "donationMessage": + MessageLookupByLibrary.simpleMessage("如果您喜欢此应用并希望支持其开发,您可以捐款。"), "duplex": MessageLookupByLibrary.simpleMessage("复式住宅"), "duplicate": MessageLookupByLibrary.simpleMessage("存在于多个钱包/RMM中的物业"), "duplicate_title": MessageLookupByLibrary.simpleMessage("重复的物业"), @@ -105,14 +113,18 @@ class MessageLookup extends MessageLookupByLibrary { "hello": MessageLookupByLibrary.simpleMessage("你好"), "hours": MessageLookupByLibrary.simpleMessage("小时"), "importData": MessageLookupByLibrary.simpleMessage("导入数据"), - "importExportData": MessageLookupByLibrary.simpleMessage("导入或导出数据 (zip)"), + "importExportData": + MessageLookupByLibrary.simpleMessage("导入或导出数据 (zip)"), "importFailed": MessageLookupByLibrary.simpleMessage("数据导入失败"), "importSuccess": MessageLookupByLibrary.simpleMessage("数据已成功导入"), "initialLaunchDate": MessageLookupByLibrary.simpleMessage("初始推出日期"), - "initialMaintenanceReserve": MessageLookupByLibrary.simpleMessage("维护储备金"), + "initialMaintenanceReserve": + MessageLookupByLibrary.simpleMessage("维护储备金"), "initialPrice": MessageLookupByLibrary.simpleMessage("平均购买价格"), - "initialPriceRemoved": MessageLookupByLibrary.simpleMessage("平均购买价格已删除"), - "initialPriceUpdated": MessageLookupByLibrary.simpleMessage("平均购买价格已更新"), + "initialPriceRemoved": + MessageLookupByLibrary.simpleMessage("平均购买价格已删除"), + "initialPriceUpdated": + MessageLookupByLibrary.simpleMessage("平均购买价格已更新"), "insights": MessageLookupByLibrary.simpleMessage("见解"), "insurance": MessageLookupByLibrary.simpleMessage("保险"), "italian": MessageLookupByLibrary.simpleMessage("Italiano"), @@ -121,6 +133,7 @@ class MessageLookup extends MessageLookupByLibrary { "lastExecution": MessageLookupByLibrary.simpleMessage("最后更新"), "lastRentReceived": MessageLookupByLibrary.simpleMessage("您收到的最后一笔租金为"), "light": MessageLookupByLibrary.simpleMessage("浅色"), + "lineChart": MessageLookupByLibrary.simpleMessage("折线图"), "lotSize": MessageLookupByLibrary.simpleMessage("地块面积"), "manageAddresses": MessageLookupByLibrary.simpleMessage("添加钱包"), "manageEvmAddresses": MessageLookupByLibrary.simpleMessage("管理钱包"), @@ -135,7 +148,8 @@ class MessageLookup extends MessageLookupByLibrary { "nameUnavailable": MessageLookupByLibrary.simpleMessage("名称不可用"), "net": MessageLookupByLibrary.simpleMessage("净值"), "netAnnualRent": MessageLookupByLibrary.simpleMessage("净年租金"), - "netApyHelp": MessageLookupByLibrary.simpleMessage("净收益通过根据各自的利率对投资组合(钱包/RMM)和存款/借款余额的收益进行加权计算。"), + "netApyHelp": MessageLookupByLibrary.simpleMessage( + "净收益通过根据各自的利率对投资组合(钱包/RMM)和存款/借款余额的收益进行加权计算。"), "netRentMonth": MessageLookupByLibrary.simpleMessage("每月净租金"), "network": MessageLookupByLibrary.simpleMessage("网络"), "nextRondays": MessageLookupByLibrary.simpleMessage("下一个 Rondays"), @@ -143,12 +157,15 @@ class MessageLookup extends MessageLookupByLibrary { "noDataAvailable": MessageLookupByLibrary.simpleMessage("无数据,请添加新钱包"), "noFutureRents": MessageLookupByLibrary.simpleMessage("无未来租金"), "noImageAvailable": MessageLookupByLibrary.simpleMessage("没有可用的图片链接"), - "noPriceEvolution": MessageLookupByLibrary.simpleMessage("没有价格演变。最新价格为:"), + "noPriceEvolution": + MessageLookupByLibrary.simpleMessage("没有价格演变。最新价格为:"), "noPropertiesForSale": MessageLookupByLibrary.simpleMessage("没有待售房产"), "noRecentUpdates": MessageLookupByLibrary.simpleMessage("没有可用的最新更改。"), "noRentReceived": MessageLookupByLibrary.simpleMessage("未收到租金"), - "noYieldEvolution": MessageLookupByLibrary.simpleMessage("没有收益演变。最新收益为:"), - "no_market_offers_available": MessageLookupByLibrary.simpleMessage("没有可用的市场报价"), + "noYieldEvolution": + MessageLookupByLibrary.simpleMessage("没有收益演变。最新收益为:"), + "no_market_offers_available": + MessageLookupByLibrary.simpleMessage("没有可用的市场报价"), "notSpecified": MessageLookupByLibrary.simpleMessage("未指定"), "offer_id": MessageLookupByLibrary.simpleMessage("报价ID"), "offering": MessageLookupByLibrary.simpleMessage("供应"), @@ -160,11 +177,13 @@ class MessageLookup extends MessageLookupByLibrary { "portfolio": MessageLookupByLibrary.simpleMessage("投资组合"), "portuguese": MessageLookupByLibrary.simpleMessage("Português"), "priceEvolution": MessageLookupByLibrary.simpleMessage("价格演变"), - "priceEvolutionPercentage": MessageLookupByLibrary.simpleMessage("价格演变:"), + "priceEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("价格演变:"), "properties": MessageLookupByLibrary.simpleMessage("物业"), "propertiesForSale": MessageLookupByLibrary.simpleMessage("待售房产"), "properties_for_sale": MessageLookupByLibrary.simpleMessage("待售物业"), - "propertyMaintenanceMonthly": MessageLookupByLibrary.simpleMessage("物业维护(每月)"), + "propertyMaintenanceMonthly": + MessageLookupByLibrary.simpleMessage("物业维护(每月)"), "propertyManagement": MessageLookupByLibrary.simpleMessage("物业管理"), "propertyStories": MessageLookupByLibrary.simpleMessage("楼层数"), "propertyTaxes": MessageLookupByLibrary.simpleMessage("物业税"), @@ -177,14 +196,17 @@ class MessageLookup extends MessageLookupByLibrary { "realtPlatform": MessageLookupByLibrary.simpleMessage("RealT 平台"), "recentChanges": MessageLookupByLibrary.simpleMessage("最近更改"), "recentUpdatesTitle": MessageLookupByLibrary.simpleMessage("最近30天"), + "region": MessageLookupByLibrary.simpleMessage("地区"), "renovationReserve": MessageLookupByLibrary.simpleMessage("装修储备金"), + "rentDistribution": MessageLookupByLibrary.simpleMessage("租金分配"), "rentGraph": MessageLookupByLibrary.simpleMessage("租金收取图表"), "rentStartDate": MessageLookupByLibrary.simpleMessage("首次租金"), "rentStartFuture": MessageLookupByLibrary.simpleMessage("租赁尚未开始"), "rentalStatus": MessageLookupByLibrary.simpleMessage("租赁状态"), "rentalStatusAll": MessageLookupByLibrary.simpleMessage("全部"), "rentalStatusNotRented": MessageLookupByLibrary.simpleMessage("未租出"), - "rentalStatusPartiallyRented": MessageLookupByLibrary.simpleMessage("部分租出"), + "rentalStatusPartiallyRented": + MessageLookupByLibrary.simpleMessage("部分租出"), "rentalStatusRented": MessageLookupByLibrary.simpleMessage("已租出"), "rentalType": MessageLookupByLibrary.simpleMessage("租赁类型"), "rented": MessageLookupByLibrary.simpleMessage("已租出"), @@ -193,14 +215,16 @@ class MessageLookup extends MessageLookupByLibrary { "resortBungalow": MessageLookupByLibrary.simpleMessage("度假村平房"), "revenue": MessageLookupByLibrary.simpleMessage("收入"), "rmm": MessageLookupByLibrary.simpleMessage("RMM"), - "roiAlertInfo": MessageLookupByLibrary.simpleMessage("该ROI功能处于测试阶段,当前根据从物业收到的收入和代币初始价值计算。"), + "roiAlertInfo": MessageLookupByLibrary.simpleMessage( + "该ROI功能处于测试阶段,当前根据从物业收到的收入和代币初始价值计算。"), "roiHistory": MessageLookupByLibrary.simpleMessage("ROI 历史"), "roiPerProperties": MessageLookupByLibrary.simpleMessage("每个物业的 ROI"), "rwaHoldings": MessageLookupByLibrary.simpleMessage("RWA Holdings SA"), "save": MessageLookupByLibrary.simpleMessage("保存"), "searchHint": MessageLookupByLibrary.simpleMessage("搜索..."), "secondary": MessageLookupByLibrary.simpleMessage("次要"), - "secondary_offers_related_to_token": MessageLookupByLibrary.simpleMessage("与代币相关的YAMM报价"), + "secondary_offers_related_to_token": + MessageLookupByLibrary.simpleMessage("与代币相关的YAMM报价"), "section8paid": MessageLookupByLibrary.simpleMessage("第8条"), "sell_token": MessageLookupByLibrary.simpleMessage("卖出"), "sendDonations": MessageLookupByLibrary.simpleMessage("将您的捐款发送至以下地址:"), @@ -211,23 +235,29 @@ class MessageLookup extends MessageLookupByLibrary { "singleFamily": MessageLookupByLibrary.simpleMessage("单户住宅"), "somethingWrong": MessageLookupByLibrary.simpleMessage("数据可能未更新"), "sortByAPY": MessageLookupByLibrary.simpleMessage("按年收益率排序"), - "sortByInitialLaunchDate": MessageLookupByLibrary.simpleMessage("按最近添加排序"), + "sortByInitialLaunchDate": + MessageLookupByLibrary.simpleMessage("按最近添加排序"), "sortByName": MessageLookupByLibrary.simpleMessage("按名称排序"), "sortByValue": MessageLookupByLibrary.simpleMessage("按价值排序"), "spanish": MessageLookupByLibrary.simpleMessage("Español"), - "specialThanks": MessageLookupByLibrary.simpleMessage("特别感谢 @Sigri, @ehpst 和 @pitsbi 的支持。"), + "specialThanks": MessageLookupByLibrary.simpleMessage( + "特别感谢 @Sigri, @ehpst 和 @pitsbi 的支持。"), "squareFeet": MessageLookupByLibrary.simpleMessage("室内面积"), "statistics": MessageLookupByLibrary.simpleMessage("统计数据"), "supportProject": MessageLookupByLibrary.simpleMessage("支持项目"), "textSize": MessageLookupByLibrary.simpleMessage("文字大小"), - "thankYouMessage": MessageLookupByLibrary.simpleMessage("感谢所有为此项目作出贡献的人。"), + "thankYouMessage": + MessageLookupByLibrary.simpleMessage("感谢所有为此项目作出贡献的人。"), "thanks": MessageLookupByLibrary.simpleMessage("感谢"), "themeUpdated": m2, "tokenAddress": MessageLookupByLibrary.simpleMessage("代币地址"), "tokenDistribution": MessageLookupByLibrary.simpleMessage("按物业类型分配代币"), - "tokenDistributionByCity": MessageLookupByLibrary.simpleMessage("按城市分配代币"), - "tokenDistributionByCountry": MessageLookupByLibrary.simpleMessage("按国家分配代币"), - "tokenDistributionByRegion": MessageLookupByLibrary.simpleMessage("按地区分配代币"), + "tokenDistributionByCity": + MessageLookupByLibrary.simpleMessage("按城市分配代币"), + "tokenDistributionByCountry": + MessageLookupByLibrary.simpleMessage("按国家分配代币"), + "tokenDistributionByRegion": + MessageLookupByLibrary.simpleMessage("按地区分配代币"), "tokenSymbol": MessageLookupByLibrary.simpleMessage("代币符号"), "token_amount": MessageLookupByLibrary.simpleMessage("代币数量"), "token_value": MessageLookupByLibrary.simpleMessage("代币价值"), @@ -259,6 +289,7 @@ class MessageLookup extends MessageLookupByLibrary { "xdaiDepositBalance": MessageLookupByLibrary.simpleMessage("XDAI 存款余额"), "year": MessageLookupByLibrary.simpleMessage("年"), "yieldEvolution": MessageLookupByLibrary.simpleMessage("收益演变"), - "yieldEvolutionPercentage": MessageLookupByLibrary.simpleMessage("收益演变:") + "yieldEvolutionPercentage": + MessageLookupByLibrary.simpleMessage("收益演变:") }; } diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index d578626..098012d 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -18,14 +18,17 @@ class S { static S? _current; static S get current { - assert(_current != null, 'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.'); + assert(_current != null, + 'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.'); return _current!; } static const AppLocalizationDelegate delegate = AppLocalizationDelegate(); static Future load(Locale locale) { - final name = (locale.countryCode?.isEmpty ?? false) ? locale.languageCode : locale.toString(); + final name = (locale.countryCode?.isEmpty ?? false) + ? locale.languageCode + : locale.toString(); final localeName = Intl.canonicalizedLocale(name); return initializeMessages(localeName).then((_) { Intl.defaultLocale = localeName; @@ -38,7 +41,8 @@ class S { static S of(BuildContext context) { final instance = S.maybeOf(context); - assert(instance != null, 'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?'); + assert(instance != null, + 'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?'); return instance!; } @@ -2346,6 +2350,66 @@ class S { ); } + /// `Bar Chart` + String get barChart { + return Intl.message( + 'Bar Chart', + name: 'barChart', + desc: '', + args: [], + ); + } + + /// `Line Chart` + String get lineChart { + return Intl.message( + 'Line Chart', + name: 'lineChart', + desc: '', + args: [], + ); + } + + /// `Rent Distribution` + String get rentDistribution { + return Intl.message( + 'Rent Distribution', + name: 'rentDistribution', + desc: '', + args: [], + ); + } + + /// `Country` + String get country { + return Intl.message( + 'Country', + name: 'country', + desc: '', + args: [], + ); + } + + /// `Region` + String get region { + return Intl.message( + 'Region', + name: 'region', + desc: '', + args: [], + ); + } + + /// `City` + String get city { + return Intl.message( + 'City', + name: 'city', + desc: '', + args: [], + ); + } + /// `Bedroom/Bath` String get bedroomBath { return Intl.message( diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 0f6324e..8c90d73 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -231,6 +231,12 @@ "secondary": "Secondary", "apyHistory": "APY History", "roiHistory": "ROI History", + "barChart": "Bar Chart", + "lineChart": "Line Chart", + "rentDistribution": "Rent Distribution", + "country": "Country", + "region": "Region", + "city": "City", "@propertyMaintenanceMonthly": { "description": "Monthly maintenance expenses for the property" }, diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 2c68f7e..c3f44ec 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -231,6 +231,12 @@ "secondary": "Secundario", "apyHistory": "Historial APY", "roiHistory": "Historial ROI", + "barChart": "Gráfico de barras", + "lineChart": "Gráfico de líneas", + "rentDistribution": "Distribución de alquileres", + "country": "País", + "region": "Región", + "city": "Ciudad", "@propertyMaintenanceMonthly": { "description": "Gastos mensuales de mantenimiento de la propiedad" }, diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 0eb8f49..9cd4c3f 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -231,6 +231,12 @@ "secondary": "Secondaire", "apyHistory": "Historique APY", "roiHistory": "Historique ROI", + "barChart": "Diagramme en barres", + "lineChart": "Diagramme linéaire", + "rentDistribution": "Répartition des loyers", + "country": "Pays", + "region": "Région", + "city": "Ville", "@propertyMaintenanceMonthly": { "description": "Dépenses mensuelles d'entretien de la propriété" }, diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 26586ff..7de6c55 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -231,6 +231,12 @@ "secondary": "Secondario", "apyHistory": "Storico APY", "roiHistory": "Storico ROI", + "barChart": "Grafico a barre", + "lineChart": "Grafico a linee", + "rentDistribution": "Distribuzione degli affitti", + "country": "Paese", + "region": "Regione", + "city": "Città", "@propertyMaintenanceMonthly": { "description": "Spese mensili di manutenzione della proprietà" }, diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 5e15833..11845c3 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -231,6 +231,12 @@ "secondary": "Secundário", "apyHistory": "Histórico APY", "roiHistory": "Histórico ROI", + "barChart": "Gráfico de barras", + "lineChart": "Gráfico de linhas", + "rentDistribution": "Distribuição de aluguéis", + "country": "País", + "region": "Região", + "city": "Cidade", "@propertyMaintenanceMonthly": { "description": "Despesas mensais de manutenção da propriedade" }, diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index fc94c74..6303c49 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -231,6 +231,12 @@ "secondary": "次要", "apyHistory": "APY 历史", "roiHistory": "ROI 历史", + "barChart": "柱状图", + "lineChart": "折线图", + "rentDistribution": "租金分配", + "country": "国家", + "region": "地区", + "city": "城市", "@propertyMaintenanceMonthly": { "description": "物业的每月维护费用" }, diff --git a/lib/pages/Statistics/portfolio_stats.dart b/lib/pages/Statistics/portfolio_stats.dart index 9282fb7..dc9fe7b 100644 --- a/lib/pages/Statistics/portfolio_stats.dart +++ b/lib/pages/Statistics/portfolio_stats.dart @@ -23,10 +23,13 @@ class _PortfolioStats extends State { static final logger = Logger(); // Initialiser une instance de logger late String _selectedPeriod; +late String _selectedFilter; // Ajoutez une variable pour le filtre @override void initState() { super.initState(); + _selectedFilter = 'Region'; // Valeur par défaut + SchedulerBinding.instance.addPostFrameCallback((_) async { try { final dataManager = Provider.of(context, listen: false); @@ -150,26 +153,163 @@ class _PortfolioStats extends State { // Return widgets based on index switch (index) { case 0: - return _buildTokenDistributionCard(dataManager!); + return _buildRentDistributionCard(dataManager!); case 1: - return _buildTokenDistributionByCountryCard(dataManager!); + return _buildTokenDistributionCard(dataManager!); case 2: - return _buildTokenDistributionByRegionCard(dataManager!); + return _buildTokenDistributionByCountryCard(dataManager!); case 3: + return _buildTokenDistributionByRegionCard(dataManager!); + case 4: return _buildTokenDistributionByCityCard(dataManager!); default: return Container(); } }, - childCount: 4, // Total number of chart widgets + childCount: 5, // Total number of chart widgets + ), + ), + ), + ], + ), + ); + } + +Widget _buildRentDistributionCard(DataManager dataManager) { + final appState = Provider.of(context); + + return Card( + elevation: 0, + color: Theme.of(context).cardColor, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + S.of(context).rentDistribution, + style: TextStyle( + fontSize: 20 + appState.getTextSizeOffset(), + fontWeight: FontWeight.bold, + ), + ), + DropdownButton( + value: _selectedFilter, + items: [ + DropdownMenuItem(value: 'Country', child: Text(S.of(context).country)), + DropdownMenuItem(value: 'Region', child: Text(S.of(context).region)), + DropdownMenuItem(value: 'City', child: Text(S.of(context).city)), + ], + onChanged: (String? value) { + setState(() { + _selectedFilter = value!; + }); + }, + ), + ], + ), + const SizedBox(height: 20), + SizedBox( + height: 200, + child: PieChart( + PieChartData( + sections: _buildRentDonutChartData(dataManager), + centerSpaceRadius: 50, + sectionsSpace: 2, + borderData: FlBorderData(show: false), ), ), ), + const SizedBox(height: 20), + _buildRentLegend(dataManager), + ], + ), + ), + ); +} + +Widget _buildRentLegend(DataManager dataManager) { + final Map groupedData = _groupRentDataBySelectedFilter(dataManager); + final appState = Provider.of(context); + + return Wrap( + spacing: 8.0, + runSpacing: 4.0, + children: groupedData.entries.map((entry) { + final index = groupedData.keys.toList().indexOf(entry.key); + final color = generateColor(index); + + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 16, + height: 16, + color: color, + ), + const SizedBox(width: 4), + Text( + '${entry.key}: ${Utils.formatCurrency(dataManager.convert(entry.value), dataManager.currencySymbol)}', + style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + ), ], + ); + }).toList(), + ); +} + + +List _buildRentDonutChartData(DataManager dataManager) { + final Map groupedData = _groupRentDataBySelectedFilter(dataManager); + + final totalRent = groupedData.values.fold(0.0, (sum, value) => sum + value); + + return groupedData.entries.map((entry) { + final percentage = (entry.value / totalRent) * 100; + return PieChartSectionData( + value: entry.value, + title: '${percentage.toStringAsFixed(1)}%', + color: generateColor(groupedData.keys.toList().indexOf(entry.key)), + radius: 50, + titleStyle: TextStyle( + fontSize: 10 + Provider.of(context).getTextSizeOffset(), + color: Colors.white, + fontWeight: FontWeight.bold, ), ); + }).toList(); +} + +Map _groupRentDataBySelectedFilter(DataManager dataManager) { + Map groupedData = {}; + + for (var token in dataManager.portfolio) { + String key; + switch (_selectedFilter) { + case 'Country': + key = token['country'] ?? 'Unknown Country'; + break; + case 'Region': + key = token['regionCode'] ?? 'Unknown Region'; + break; + case 'City': + key = token['city'] ?? 'Unknown City'; + break; + default: + key = 'Unknown'; + } + + // Additionner les revenus locatifs (monthlyIncome) + groupedData[key] = (groupedData[key] ?? 0) + (token['monthlyIncome'] ?? 0.0); } + return groupedData; +} + + Widget _buildTokenDistributionCard(DataManager dataManager) { final appState = Provider.of(context); diff --git a/lib/pages/Statistics/wallet_stats.dart b/lib/pages/Statistics/wallet_stats.dart index a771b0b..f2cd94c 100644 --- a/lib/pages/Statistics/wallet_stats.dart +++ b/lib/pages/Statistics/wallet_stats.dart @@ -9,7 +9,9 @@ import 'package:realtokens_apps/api/data_manager.dart'; import 'package:realtokens_apps/generated/l10n.dart'; // Import pour les traductions import 'package:realtokens_apps/app_state.dart'; // Import AppState import 'package:logger/logger.dart'; -import 'dart:math'; // Import the math library +import 'dart:math'; + +import 'package:shared_preferences/shared_preferences.dart'; // Import the math library class WalletStats extends StatefulWidget { const WalletStats({super.key}); @@ -22,11 +24,24 @@ class _WalletStats extends State { static final logger = Logger(); // Initialiser une instance de logger late String _selectedPeriod; + bool apyIsBarChart = true; // Basculer entre BarChart et LineChart + bool roiIsBarChart = false; // Basculer entre BarChart et LineChart + bool walletIsBarChart = false; // Basculer entre BarChart et LineChart +late SharedPreferences prefs; @override void initState() { super.initState(); SchedulerBinding.instance.addPostFrameCallback((_) async { + prefs = await SharedPreferences.getInstance(); + + setState(() { + // Charger les préférences sauvegardées ou utiliser des valeurs par défaut + apyIsBarChart = prefs.getBool('apyIsBarChart') ?? true; + roiIsBarChart = prefs.getBool('roiIsBarChart') ?? false; + walletIsBarChart = prefs.getBool('walletIsBarChart') ?? false; + }); + try { final dataManager = Provider.of(context, listen: false); logger.i("Fetching rent data and property data..."); @@ -348,421 +363,678 @@ class _WalletStats extends State { ); } - Widget _buildWalletBalanceCard(DataManager dataManager) { - final appState = Provider.of(context); - - // Récupérer les données de l'historique des balances du wallet - List walletBalanceData = _buildWalletBalanceChartData(dataManager); - - return Card( - elevation: 0, - color: Theme.of(context).cardColor, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text( - S.of(context).walletBalanceHistory, // Clé de traduction pour "Historique du Wallet" - style: TextStyle( - fontSize: 20 + appState.getTextSizeOffset(), - fontWeight: FontWeight.bold, - ), - ), - Spacer(), - IconButton( - icon: Icon(Icons.edit), - iconSize: 16.0, // Réduisez la taille ici - onPressed: () => _showEditModal(context, dataManager), - tooltip: S.of(context).edit, // Clé de traduction pour "Éditer" +Widget _buildWalletBalanceCard(DataManager dataManager) { + final appState = Provider.of(context); + + // Récupérer les données pour les graphiques + List walletBalanceData = _buildWalletBalanceChartData(dataManager); + List barChartData = _buildWalletBalanceBarChartData(dataManager); + + return Card( + elevation: 0, + color: Theme.of(context).cardColor, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + S.of(context).walletBalanceHistory, // Titre principal + style: TextStyle( + fontSize: 20 + appState.getTextSizeOffset(), + fontWeight: FontWeight.bold, ), - ], - ), - const SizedBox(height: 20), - SizedBox( - height: 250, - child: LineChart( - LineChartData( - gridData: FlGridData(show: true, drawVerticalLine: false), - titlesData: FlTitlesData( - topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 45, - getTitlesWidget: (value, meta) { - // Remplacez `highestValue` par la valeur maximale que vous souhaitez ignorer - final highestValue = walletBalanceData.map((e) => e.y).reduce((a, b) => a > b ? a : b); - - // Vérifier si la valeur est la plus haute pour l'ignorer - if (value == highestValue) { - return const SizedBox.shrink(); - } - - // Vérifier si la valeur dépasse 1000 et formater en "1k$" si nécessaire - final displayValue = value >= 1000 - ? '${(value / 1000).toStringAsFixed(1)} k${dataManager.currencySymbol}' // Formater en "1.0k" - : Utils.formatCurrency(value, dataManager.currencySymbol); - - return Transform.rotate( - angle: -0.5, - child: Text( - displayValue, - style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + const Spacer(), + IconButton( + icon: const Icon(Icons.settings, size: 20.0,), + onPressed: () { + showModalBottomSheet( + context: context, + builder: (context) { + return Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + leading: const Icon(Icons.bar_chart), + title: Text(S.of(context).barChart), + onTap: () { + setState(() { + walletIsBarChart = true; + _saveChartPreference('walletIsBarChart', walletIsBarChart); + + }); + Navigator.of(context).pop(); + }, + ), + ListTile( + leading: const Icon(Icons.show_chart), + title: Text(S.of(context).lineChart), + onTap: () { + setState(() { + walletIsBarChart = false; + _saveChartPreference('walletIsBarChart', walletIsBarChart); + + }); + Navigator.of(context).pop(); + }, + ), + const Divider(), + ListTile( + leading: const Icon(Icons.edit), + title: Text(S.of(context).edit), + onTap: () { + Navigator.of(context).pop(); + _showEditModal(context, dataManager); + }, ), - ); - }, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - interval: 1, // Une étiquette par point - getTitlesWidget: (value, meta) { - List labels = _buildDateLabelsForWallet(dataManager); - - // Vérifie si l'indice est valide - if (value.toInt() >= 0 && value.toInt() < labels.length) { - return Padding( - padding: const EdgeInsets.only(top: 10.0), // Décalage vers le bas - child: Transform.rotate( - angle: -0.5, - child: Text( - labels[value.toInt()], - style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), - ), - ), - ); - } else { - return const SizedBox.shrink(); // Pas d'étiquette si hors des limites - } - }, - ), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - borderData: FlBorderData( - show: true, // Affiche les bordures - border: Border( - left: BorderSide(color: Colors.transparent), // Axe gauche - bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), // Axe bas - right: BorderSide(color: Colors.transparent), // Masque l'axe droit - top: BorderSide(color: Colors.transparent), // Masque l'axe supérieur - ), - ), - minX: 0, - maxX: (walletBalanceData.length - 1).toDouble(), - minY: 0, // Définit la valeur minimale de l'axe de gauche à 0 - lineBarsData: [ - LineChartBarData( - spots: walletBalanceData, - isCurved: false, - barWidth: 2, - color: Colors.purple, - dotData: FlDotData(show: false), - belowBarData: BarAreaData( - show: true, - gradient: LinearGradient( - colors: [ - Colors.purple.withOpacity(0.4), - Colors.purple.withOpacity(0), ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, ), - ), - ), - ], - lineTouchData: LineTouchData( - touchTooltipData: LineTouchTooltipData( - tooltipRoundedRadius: 8, // Arrondi des bords du tooltip - tooltipMargin: 8, // Marge entre le point et le tooltip - getTooltipItems: (List touchedSpots) { - return touchedSpots.map((touchedSpot) { - final index = touchedSpot.x.toInt(); - - // Récupérer la valeur et la date associées au point touché - final value = touchedSpot.y; - final date = _buildDateLabelsForWallet(dataManager)[index]; // Récupère la date - - // Formater la valeur - final formattedValue = Utils.formatCurrency(dataManager.convert(value), dataManager.currencySymbol); - - return LineTooltipItem( - '$date\n$formattedValue', // Combine la date et la valeur - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold), - ); - }).toList(); - }, - ), - touchCallback: (FlTouchEvent event, LineTouchResponse? touchResponse) { - if (touchResponse != null && touchResponse.lineBarSpots != null) { - debugPrint('Point touché : ${touchResponse.lineBarSpots?.first.x}'); - } + ); }, - handleBuiltInTouches: true, // Active les interactions tactiles intégrées - ), - ), + ); + }, ), - ), - ], - ), - ), - ); - } - - Widget _buildRoiHistoryCard(DataManager dataManager) { - final appState = Provider.of(context); - - // Récupérer les données de l'historique des balances du wallet - List roiHistoryData = _buildRoiHistoryChartData(dataManager); - - return Card( - elevation: 0, - color: Theme.of(context).cardColor, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text( - S.of(context).roiHistory, // Clé de traduction pour "Historique du Wallet" - style: TextStyle( - fontSize: 20 + appState.getTextSizeOffset(), - fontWeight: FontWeight.bold, - ), - ), - Spacer(), - ], - ), - const SizedBox(height: 20), - SizedBox( - height: 250, - child: LineChart( - LineChartData( - gridData: FlGridData(show: true, drawVerticalLine: false), - titlesData: FlTitlesData( - topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 45, - getTitlesWidget: (value, meta) { - // Remplacez `highestValue` par la valeur maximale que vous souhaitez ignorer - final highestValue = roiHistoryData.map((e) => e.y).reduce((a, b) => a > b ? a : b); - - // Vérifier si la valeur est la plus haute pour l'ignorer - if (value == highestValue) { - return const SizedBox.shrink(); - } - - return Transform.rotate( - angle: -0.5, - child: Text( - '${value.toStringAsFixed(0)}%', - style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ], + ), + const SizedBox(height: 20), + SizedBox( + height: 250, + child: StatefulBuilder( + builder: (context, setState) { + return walletIsBarChart + ? BarChart( + BarChartData( + gridData: FlGridData(show: true, drawVerticalLine: false), + titlesData: FlTitlesData( + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 45, + getTitlesWidget: (value, meta) { + final displayValue = value >= 1000 + ? '${(value / 1000).toStringAsFixed(1)} k${dataManager.currencySymbol}' + : Utils.formatCurrency(value, dataManager.currencySymbol); + return Text( + displayValue, + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ); + }, + + ), ), - ); - }, - ), - ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (value, meta) { - List labels = _buildDateLabelsForRoi(dataManager); - - // Vérifie si l'indice est valide - if (value.toInt() >= 0 && value.toInt() < labels.length) { - return Padding( - padding: const EdgeInsets.only(top: 10.0), // Décalage vers le bas - child: Transform.rotate( - angle: -0.5, - child: Text( - labels[value.toInt()], - style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + List labels = _buildDateLabelsForWallet(dataManager); + if (value.toInt() >= 0 && value.toInt() < labels.length) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Transform.rotate( + angle: -0.5, + child: Text( + labels[value.toInt()], + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + ), + ); + } else { + return const SizedBox.shrink(); + } + }, + ), + ), + + topTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ),), + borderData: FlBorderData( + show: true, + border: Border( + left: BorderSide(color: Colors.transparent), + bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), + right: BorderSide(color: Colors.transparent), + top: BorderSide(color: Colors.transparent), + ), + ), + barGroups: barChartData, + ), + ) + : LineChart( + LineChartData( + gridData: FlGridData(show: true, drawVerticalLine: false), + titlesData: FlTitlesData( + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 45, + getTitlesWidget: (value, meta) { + final displayValue = value >= 1000 + ? '${(value / 1000).toStringAsFixed(1)} k${dataManager.currencySymbol}' + : Utils.formatCurrency(value, dataManager.currencySymbol); + return Text( + displayValue, + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ); + }, + ), + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + List labels = _buildDateLabelsForWallet(dataManager); + if (value.toInt() >= 0 && value.toInt() < labels.length) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Transform.rotate( + angle: -0.5, + child: Text( + labels[value.toInt()], + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + ), + ); + } else { + return const SizedBox.shrink(); + } + }, + ), + ), + topTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + ), + borderData: FlBorderData( + show: true, + border: Border( + left: BorderSide(color: Colors.transparent), + bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), + right: BorderSide(color: Colors.transparent), + top: BorderSide(color: Colors.transparent), + ), + ), + lineBarsData: [ + LineChartBarData( + spots: walletBalanceData, + isCurved: false, + barWidth: 2, + color: Colors.purple, + dotData: FlDotData(show: false), + belowBarData: BarAreaData( + show: true, + gradient: LinearGradient( + colors: [ + Colors.purple.withOpacity(0.4), + Colors.purple.withOpacity(0), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, ), ), - ); - } else { - return const SizedBox.shrink(); // Pas d'étiquette en dehors de la plage - } - }, - reservedSize: 30, // Ajuste la hauteur réservée pour les étiquettes - interval: 1, // Force un intervalle correspondant à vos points - ), - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - ), - borderData: FlBorderData( - show: true, // Affiche les bordures - border: Border( - left: BorderSide(color: Colors.transparent), // Axe gauche - bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), // Axe bas - right: BorderSide(color: Colors.transparent), // Masque l'axe droit - top: BorderSide(color: Colors.transparent), // Masque l'axe supérieur - ), - ), - minX: 0, - maxX: (roiHistoryData.length - 1).toDouble(), - minY: 0, // Définit la valeur minimale de l'axe de gauche à 0 - maxY: 100, - lineBarsData: [ - LineChartBarData( - spots: roiHistoryData, - isCurved: false, - barWidth: 2, - color: Colors.cyan, - dotData: FlDotData(show: false), - belowBarData: BarAreaData( - show: true, - gradient: LinearGradient( - colors: [ - Colors.cyan.withOpacity(0.4), - Colors.cyan.withOpacity(0), + ), ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, ), - ), - ), - ], - lineTouchData: LineTouchData( - touchTooltipData: LineTouchTooltipData( - tooltipRoundedRadius: 8, // Arrondi des bords du tooltip - tooltipMargin: 8, // Marge entre le point et le tooltip - getTooltipItems: (List touchedSpots) { - return touchedSpots.map((touchedSpot) { - final index = touchedSpot.x.toInt(); - - // Récupérer la valeur et la date associées au point touché - final value = touchedSpot.y; - final date = _buildDateLabelsForRoi(dataManager)[index]; // Récupère la date - - // Construire le texte du tooltip avec la date et la valeur - final formattedValue = '${value.toStringAsFixed(2)}%'; + ); + }, + ), + ), + ], + ), + ), + ); +} - return LineTooltipItem( - '$date\n$formattedValue', // Combine la date et la valeur - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold), - ); - }).toList(); - }, - ), - touchCallback: (FlTouchEvent event, LineTouchResponse? touchResponse) { - if (touchResponse != null && touchResponse.lineBarSpots != null) { - debugPrint('Point touché : ${touchResponse.lineBarSpots?.first.x}'); - } - }, - handleBuiltInTouches: true, // Active les interactions tactiles intégrées - ), - ), - ), +List _buildWalletBalanceBarChartData(DataManager dataManager) { + List walletBalanceData = _buildWalletBalanceChartData(dataManager); + return walletBalanceData + .asMap() + .entries + .map( + (entry) => BarChartGroupData( + x: entry.key, + barRods: [ + BarChartRodData( + toY: entry.value.y, + color: Colors.purple, + width: 8, ), ], ), - ), - ); - } - - Widget _buildApyHistoryCard(DataManager dataManager) { - final appState = Provider.of(context); - - List apyHistoryData = _buildApyHistoryBarChartData(dataManager); - - int? selectedIndex; // Variable pour stocker l'index sélectionné + ) + .toList(); +} - return Card( - elevation: 0, - color: Theme.of(context).cardColor, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text( - S.of(context).apyHistory, - style: TextStyle( - fontSize: 20 + appState.getTextSizeOffset(), - fontWeight: FontWeight.bold, - ), +Widget _buildRoiHistoryCard(DataManager dataManager) { + final appState = Provider.of(context); + + // Récupérer les données pour les graphiques + List roiHistoryData = _buildRoiHistoryChartData(dataManager); + List barChartData = _buildRoiHistoryBarChartData(dataManager); + + return Card( + elevation: 0, + color: Theme.of(context).cardColor, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + S.of(context).roiHistory, // Titre principal + style: TextStyle( + fontSize: 20 + appState.getTextSizeOffset(), + fontWeight: FontWeight.bold, ), - Spacer(), - ], - ), - const SizedBox(height: 20), - SizedBox( - height: 250, - child: StatefulBuilder( - builder: (context, setState) { - return BarChart( - BarChartData( - gridData: FlGridData(show: true, drawVerticalLine: false), - titlesData: FlTitlesData( - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, // Afficher les titres à gauche - reservedSize: 45, - getTitlesWidget: (value, meta) { - return Text( - '${value.toStringAsFixed(0)}%', - style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), - ); - }, + ), + const Spacer(), + IconButton( + icon: const Icon(Icons.settings, size: 20.0), + onPressed: () { + showModalBottomSheet( + context: context, + builder: (context) { + return Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + leading: const Icon(Icons.bar_chart), + title: Text(S.of(context).barChart), + onTap: () { + setState(() { + roiIsBarChart = true; + _saveChartPreference('roiIsBarChart', roiIsBarChart); + + }); + Navigator.of(context).pop(); + }, + ), + ListTile( + leading: const Icon(Icons.show_chart), + title: Text(S.of(context).lineChart), + onTap: () { + setState(() { + roiIsBarChart = false; + _saveChartPreference('roiIsBarChart', roiIsBarChart); + + }); + Navigator.of(context).pop(); + }, + ), + ], + ), + ); + }, + ); + }, + ), + ], + ), + const SizedBox(height: 20), + SizedBox( + height: 250, + child: StatefulBuilder( + builder: (context, setState) { + // Basculer entre BarChart et LineChart + return roiIsBarChart + ? BarChart( + BarChartData( + gridData: FlGridData(show: true, drawVerticalLine: false), + titlesData: FlTitlesData( + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 45, + getTitlesWidget: (value, meta) { + return Text( + '${value.toStringAsFixed(0)}%', + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ); + }, + ), + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + List labels = _buildDateLabelsForRoi(dataManager); + if (value.toInt() >= 0 && value.toInt() < labels.length) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Transform.rotate( + angle: -0.5, + child: Text( + labels[value.toInt()], + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + ), + ); + } else { + return const SizedBox.shrink(); + } + }, + ), + ), + topTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), ), + borderData: FlBorderData( + show: true, + border: Border( + left: BorderSide(color: Colors.transparent), + bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), + right: BorderSide(color: Colors.transparent), + top: BorderSide(color: Colors.transparent), + ), + ), + barGroups: barChartData, ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - getTitlesWidget: (value, meta) { - List labels = _buildDateLabelsForApy(dataManager); - if (value.toInt() >= 0 && value.toInt() < labels.length) { - return Padding( - padding: const EdgeInsets.only(top: 10.0), // Décalage vers le bas - child: Transform.rotate( + ) + : LineChart( + LineChartData( + gridData: FlGridData(show: true, drawVerticalLine: false), + titlesData: FlTitlesData( + topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 45, + getTitlesWidget: (value, meta) { + final highestValue = roiHistoryData.map((e) => e.y).reduce((a, b) => a > b ? a : b); + + if (value == highestValue) { + return const SizedBox.shrink(); + } + + return Transform.rotate( angle: -0.5, child: Text( - labels[value.toInt()], + '${value.toStringAsFixed(0)}%', style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), ), - ), - ); - } else { - return const Text(''); + ); + }, + ), + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + List labels = _buildDateLabelsForRoi(dataManager); + + if (value.toInt() >= 0 && value.toInt() < labels.length) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Transform.rotate( + angle: -0.5, + child: Text( + labels[value.toInt()], + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + ), + ); + } else { + return const SizedBox.shrink(); + } + }, + reservedSize: 30, + interval: 1, + ), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + ), + borderData: FlBorderData( + show: true, + border: Border( + left: BorderSide(color: Colors.transparent), + bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), + right: BorderSide(color: Colors.transparent), + top: BorderSide(color: Colors.transparent), + ), + ), + minX: 0, + maxX: (roiHistoryData.length - 1).toDouble(), + minY: 0, + maxY: 100, + lineBarsData: [ + LineChartBarData( + spots: roiHistoryData, + isCurved: false, + barWidth: 2, + color: Colors.cyan, + dotData: FlDotData(show: false), + belowBarData: BarAreaData( + show: true, + gradient: LinearGradient( + colors: [ + Colors.cyan.withOpacity(0.4), + Colors.cyan.withOpacity(0), + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ), + ), + ), + ], + lineTouchData: LineTouchData( + touchTooltipData: LineTouchTooltipData( + tooltipRoundedRadius: 8, + tooltipMargin: 8, + getTooltipItems: (List touchedSpots) { + return touchedSpots.map((touchedSpot) { + final index = touchedSpot.x.toInt(); + final value = touchedSpot.y; + final date = _buildDateLabelsForRoi(dataManager)[index]; + + final formattedValue = '${value.toStringAsFixed(2)}%'; + + return LineTooltipItem( + '$date\n$formattedValue', + const TextStyle(color: Colors.white, fontWeight: FontWeight.bold), + ); + }).toList(); + }, + ), + touchCallback: (FlTouchEvent event, LineTouchResponse? touchResponse) { + if (touchResponse != null && touchResponse.lineBarSpots != null) { + debugPrint('Point touché : ${touchResponse.lineBarSpots?.first.x}'); } }, + handleBuiltInTouches: true, ), ), - topTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), // Masquer les titres en haut - ), - rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), // Masquer les titres à droite - ), - ), - borderData: FlBorderData( - show: true, // Affiche les bordures - border: Border( - left: BorderSide(color: Colors.transparent), // Axe gauche - bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), // Axe bas - right: BorderSide(color: Colors.transparent), // Masque l'axe droit - top: BorderSide(color: Colors.transparent), // Masque l'axe supérieur + ); + }, + ), + ), + ], + ), + ), + ); +} + +List _buildRoiHistoryBarChartData(DataManager dataManager) { + // Convertir les données de FlSpot pour le BarChart + List roiHistoryData = _buildRoiHistoryChartData(dataManager); + return roiHistoryData + .asMap() + .entries + .map( + (entry) => BarChartGroupData( + x: entry.key, + barRods: [ + BarChartRodData( + toY: entry.value.y, + color: Colors.cyan, + width: 8, + ), + ], + ), + ) + .toList(); +} + +Widget _buildApyHistoryCard(DataManager dataManager) { + final appState = Provider.of(context); + + List apyHistoryData = _buildApyHistoryBarChartData(dataManager); + List lineChartData = _buildApyHistoryLineChartData(dataManager); + + int? selectedIndex; // Variable pour stocker l'index sélectionné + + return Card( + elevation: 0, + color: Theme.of(context).cardColor, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + S.of(context).apyHistory, + style: TextStyle( + fontSize: 20 + appState.getTextSizeOffset(), + fontWeight: FontWeight.bold, + ), + ), + const Spacer(), + IconButton( + icon: const Icon(Icons.settings, size: 20.0), + onPressed: () { + showModalBottomSheet( + context: context, + builder: (context) { + return Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + leading: const Icon(Icons.bar_chart), + title: Text(S.of(context).barChart), + onTap: () { + setState(() { + apyIsBarChart = true; + _saveChartPreference('apyIsBarChart', apyIsBarChart); + + }); + Navigator.of(context).pop(); + }, + ), + ListTile( + leading: const Icon(Icons.show_chart), + title: Text(S.of(context).lineChart), + onTap: () { + setState(() { + apyIsBarChart = false; + _saveChartPreference('apyIsBarChart', apyIsBarChart); + + }); + Navigator.of(context).pop(); + }, + ), + ], ), - ), - alignment: BarChartAlignment.center, - barGroups: apyHistoryData, - maxY: 20, - barTouchData: BarTouchData( + ); + }, + ); + }, + ), + ], + ), + const SizedBox(height: 20), + SizedBox( + height: 250, + child: StatefulBuilder( + builder: (context, setState) { + return apyIsBarChart + ? BarChart( + BarChartData( + gridData: FlGridData(show: true, drawVerticalLine: false), + titlesData: FlTitlesData( + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 45, + getTitlesWidget: (value, meta) { + return Text( + '${value.toStringAsFixed(0)}%', + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ); + }, + ), + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + List labels = _buildDateLabelsForApy(dataManager); + if (value.toInt() >= 0 && value.toInt() < labels.length) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Transform.rotate( + angle: -0.5, + child: Text( + labels[value.toInt()], + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + ), + ); + } else { + return const Text(''); + } + }, + ), + ), + topTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: false, + + ), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: false, + + ), + ), + ), + borderData: FlBorderData( + show: true, + border: Border( + left: BorderSide(color: Colors.transparent), + bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), + right: BorderSide(color: Colors.transparent), + top: BorderSide(color: Colors.transparent), + ), + ), + alignment: BarChartAlignment.center, + barGroups: apyHistoryData, + maxY: 20, + barTouchData: BarTouchData( touchTooltipData: BarTouchTooltipData( getTooltipItem: (group, groupIndex, rod, rodIndex) { // Affiche uniquement le tooltip si l'index est sélectionné @@ -792,16 +1064,120 @@ class _WalletStats extends State { }, handleBuiltInTouches: true, ), - ), - ); - }, - ), + ), + ) + : LineChart( + LineChartData( + gridData: FlGridData(show: true, drawVerticalLine: false), + titlesData: FlTitlesData( + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 45, + getTitlesWidget: (value, meta) { + return Text( + '${value.toStringAsFixed(0)}%', + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ); + }, + ), + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + List labels = _buildDateLabelsForApy(dataManager); + if (value.toInt() >= 0 && value.toInt() < labels.length) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Transform.rotate( + angle: -0.5, + child: Text( + labels[value.toInt()], + style: TextStyle(fontSize: 10 + appState.getTextSizeOffset()), + ), + ), + ); + } else { + return const Text(''); + } + }, + ), + ), + topTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: false, + + ), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: false, + + ), + ), + ), + borderData: FlBorderData( + show: true, + border: Border( + left: BorderSide(color: Colors.transparent), + bottom: BorderSide(color: Colors.blueGrey.shade700, width: 0.5), + right: BorderSide(color: Colors.transparent), + top: BorderSide(color: Colors.transparent), + ), + ), + lineBarsData: lineChartData, + minY:0, + maxY: 20, + ), + ); + }, ), - ], - ), + ), + ], ), - ); - } + ), + ); +} + +List _buildApyHistoryLineChartData(DataManager dataManager) { + final groupedData = _groupApyByDate(dataManager); // Regroupe les données comme pour le BarChart + + final grossSpots = []; + final netSpots = []; + + int index = 0; + groupedData.forEach((date, values) { + grossSpots.add(FlSpot(index.toDouble(), values['gross']!)); + netSpots.add(FlSpot(index.toDouble(), values['net']!)); + index++; + }); + + return [ + LineChartBarData( + spots: grossSpots, + isCurved: true, + color: Colors.blue, + barWidth: 2, + belowBarData: BarAreaData( + show: true, + color: Colors.blue.withOpacity(0.1), + ), + dotData: FlDotData(show: false), + ), + LineChartBarData( + spots: netSpots, + isCurved: true, + color: Colors.green, + barWidth: 2, + belowBarData: BarAreaData( + show: true, + color: Colors.green.withOpacity(0.1), + ), + dotData: FlDotData(show: false), + ), + ]; +} List _buildApyHistoryBarChartData(DataManager dataManager) { final groupedData = _groupApyByDate(dataManager); @@ -1123,7 +1499,7 @@ class _WalletStats extends State { }, child: Container( decoration: BoxDecoration( - color: isSelected ? Colors.blue : Colors.grey[300], + color: isSelected ? Colors.blue : Theme.of(context).secondaryHeaderColor, borderRadius: BorderRadius.horizontal( left: isFirst ? const Radius.circular(8) : Radius.zero, right: isLast ? const Radius.circular(8) : Radius.zero, @@ -1135,7 +1511,7 @@ class _WalletStats extends State { period, style: TextStyle( fontSize: 14 + appState.getTextSizeOffset(), - color: isSelected ? Colors.white : Colors.black, + color: isSelected ? Colors.white : Theme.of(context).textTheme.bodyLarge?.color, fontWeight: isSelected ? FontWeight.bold : FontWeight.normal, ), ), @@ -1154,4 +1530,8 @@ class _WalletStats extends State { } return spots; } + +void _saveChartPreference(String key, bool value) { + prefs.setBool(key, value); +} } diff --git a/lib/pages/dashboard/dashboard_page.dart b/lib/pages/dashboard/dashboard_page.dart index 24162c1..e09e7e8 100644 --- a/lib/pages/dashboard/dashboard_page.dart +++ b/lib/pages/dashboard/dashboard_page.dart @@ -18,7 +18,8 @@ class DashboardPage extends StatefulWidget { } class DashboardPageState extends State { - bool _showAmounts = true; // Variable pour contrôler la visibilité des montants + bool _showAmounts = + true; // Variable pour contrôler la visibilité des montants bool _isPageLoading = true; @override @@ -47,7 +48,8 @@ class DashboardPageState extends State { Future _loadPrivacyMode() async { SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() { - _showAmounts = prefs.getBool('showAmounts') ?? true; // Par défaut, les montants sont visibles + _showAmounts = prefs.getBool('showAmounts') ?? + true; // Par défaut, les montants sont visibles }); } @@ -59,11 +61,13 @@ class DashboardPageState extends State { return S.of(context).noRentReceived; } - rentData.sort((a, b) => DateTime.parse(b['date']).compareTo(DateTime.parse(a['date']))); + rentData.sort((a, b) => + DateTime.parse(b['date']).compareTo(DateTime.parse(a['date']))); final lastRent = rentData.first['rent']; // Utiliser _getFormattedAmount pour masquer ou afficher la valeur - return Utils.getFormattedAmount(dataManager.convert(lastRent), dataManager.currencySymbol, _showAmounts); + return Utils.getFormattedAmount(dataManager.convert(lastRent), + dataManager.currencySymbol, _showAmounts); } // Groupement mensuel sur les 12 derniers mois glissants pour la carte Rendement @@ -76,15 +80,18 @@ class DashboardPageState extends State { for (var rentEntry in rentData) { DateTime date = DateTime.parse(rentEntry['date']); // Exclure le mois en cours et ne garder que les données des 12 mois précédents - if (date.isBefore(DateTime(currentDate.year, currentDate.month)) && date.isAfter(DateTime(currentDate.year, currentDate.month - 12, 1))) { + if (date.isBefore(DateTime(currentDate.year, currentDate.month)) && + date.isAfter(DateTime(currentDate.year, currentDate.month - 12, 1))) { String monthKey = DateFormat('yyyy-MM').format(date); - monthlyRent[monthKey] = (monthlyRent[monthKey] ?? 0) + rentEntry['rent']; + monthlyRent[monthKey] = + (monthlyRent[monthKey] ?? 0) + rentEntry['rent']; } } // Assurer que nous avons les 12 derniers mois dans l'ordre (sans le mois en cours) List sortedMonths = List.generate(12, (index) { - DateTime date = DateTime(currentDate.year, currentDate.month - 1 - index, 1); // Commence à partir du mois précédent + DateTime date = DateTime(currentDate.year, currentDate.month - 1 - index, + 1); // Commence à partir du mois précédent return DateFormat('yyyy-MM').format(date); }).reversed.toList(); @@ -133,15 +140,141 @@ class DashboardPageState extends State { ), ], borderData: FlBorderData(show: false), - sectionsSpace: 2, // Un léger espace entre les sections pour les démarquer + sectionsSpace: + 2, // Un léger espace entre les sections pour les démarquer centerSpaceRadius: 23, // Taille de l'espace central ), - swapAnimationDuration: const Duration(milliseconds: 800), // Durée de l'animation - swapAnimationCurve: Curves.easeInOut, // Courbe pour rendre l'animation fluide + swapAnimationDuration: + const Duration(milliseconds: 800), // Durée de l'animation + swapAnimationCurve: + Curves.easeInOut, // Courbe pour rendre l'animation fluide ), ); } +Widget _buildVerticalGauges(double factor, BuildContext context, DataManager dataManager) { + double progress1 = (factor / 10).clamp(0.0, 1.0); // Jauge 1 + double progress2 = ((dataManager.totalUsdcBorrowBalance + + dataManager.totalXdaiBorrowBalance) / + dataManager.rmmValue * + 100) + .clamp(0.0, 100.0) / + 100; // Jauge 2 (en %) + + // Couleur dynamique pour la première jauge + Color progress1Color = Color.lerp(Colors.red, Colors.green, progress1)!; + + // Couleur dynamique pour la deuxième jauge (0% = vert, 100% = rouge) + Color progress2Color = Color.lerp(Colors.green.shade300, Colors.red, progress2)!; + + return SizedBox( + width: 100, // Largeur totale pour la disposition + height: 180, // Hauteur totale + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + // Jauge 1 (HF) + Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + // Titre de la jauge + Text( + 'HF', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Theme.of(context).textTheme.bodyMedium?.color, + ), + ), + const SizedBox(height: 8), // Espacement entre le titre et la jauge + Stack( + alignment: Alignment.bottomCenter, // Alignement pour jauge verticale + children: [ + // Fond de la jauge + Container( + width: 20, // Largeur fixe pour jauge verticale + height: 100, // Hauteur totale de la jauge + decoration: BoxDecoration( + color: const Color.fromARGB(255, 78, 78, 78).withOpacity(0.3), + borderRadius: BorderRadius.circular(5), + ), + ), + // Progression de la jauge + Container( + width: 20, // Largeur fixe pour jauge verticale + height: progress1 * 100, // Hauteur dynamique + decoration: BoxDecoration( + color: progress1Color, // Couleur dynamique + borderRadius: BorderRadius.circular(5), + ), + ), + ], + ), + const SizedBox(height: 5), // Espacement entre la jauge et le texte + Text( + '${(progress1 * 10).toStringAsFixed(1)}', + style: TextStyle( + fontSize: 12, + color: Theme.of(context).textTheme.bodyMedium?.color, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + // Jauge 2 (LTV) + Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + // Titre de la jauge + Text( + 'LTV', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Theme.of(context).textTheme.bodyMedium?.color, + ), + ), + const SizedBox(height: 8), // Espacement entre le titre et la jauge + Stack( + alignment: Alignment.bottomCenter, // Alignement pour jauge verticale + children: [ + // Fond de la jauge + Container( + width: 20, // Largeur fixe pour jauge verticale + height: 100, // Hauteur totale de la jauge + decoration: BoxDecoration( + color: const Color.fromARGB(255, 78, 78, 78).withOpacity(0.3), + borderRadius: BorderRadius.circular(5), + ), + ), + // Progression de la jauge + Container( + width: 20, // Largeur fixe pour jauge verticale + height: progress2 * 100, // Hauteur dynamique + decoration: BoxDecoration( + color: progress2Color, // Couleur dynamique + borderRadius: BorderRadius.circular(5), + ), + ), + ], + ), + const SizedBox(height: 5), // Espacement entre la jauge et le texte + Text( + '${(progress2 * 100).toStringAsFixed(1)}%', + style: TextStyle( + fontSize: 12, + color: Theme.of(context).textTheme.bodyMedium?.color, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ], + ), + ); +} + // Méthode pour créer un graphique en barres en tant que jauge Widget _buildVerticalGauge(double value, BuildContext context) { // Utiliser une valeur par défaut si 'value' est NaN ou négatif @@ -150,14 +283,18 @@ class DashboardPageState extends State { return Padding( padding: const EdgeInsets.only(right: 12.0), child: Column( - mainAxisSize: MainAxisSize.min, // Ajuster la taille de la colonne au contenu + mainAxisSize: + MainAxisSize.min, // Ajuster la taille de la colonne au contenu children: [ Row( mainAxisSize: MainAxisSize.min, children: [ Text( "ROI", // Titre de la jauge - style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold, color: Theme.of(context).textTheme.bodyLarge?.color), + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Theme.of(context).textTheme.bodyLarge?.color), ), const SizedBox(width: 8), // Espacement entre le texte et l'icône GestureDetector( @@ -166,8 +303,10 @@ class DashboardPageState extends State { context: context, builder: (BuildContext context) { return AlertDialog( - title: Text(S.of(context).roiPerProperties), // Titre du popup - content: Text(S.of(context).roiAlertInfo), // Texte du popup + title: Text( + S.of(context).roiPerProperties), // Titre du popup + content: + Text(S.of(context).roiAlertInfo), // Texte du popup actions: [ TextButton( onPressed: () { @@ -197,7 +336,8 @@ class DashboardPageState extends State { alignment: BarChartAlignment.center, maxY: 100, // Échelle sur 100% barTouchData: BarTouchData( - enabled: true, // Activer l'interaction pour l'animation au toucher + enabled: + true, // Activer l'interaction pour l'animation au toucher touchTooltipData: BarTouchTooltipData( getTooltipItem: (group, groupIndex, rod, rodIndex) { return BarTooltipItem( @@ -219,16 +359,22 @@ class DashboardPageState extends State { if (value % 25 == 0) { return Text( value.toInt().toString(), - style: TextStyle(fontSize: 10, color: Colors.black54), // Définir la taille et couleur du texte + style: TextStyle( + fontSize: 10, + color: Colors + .black54), // Définir la taille et couleur du texte ); } return Container(); }, ), ), - rightTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), - topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), - bottomTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), + rightTitles: + AxisTitles(sideTitles: SideTitles(showTitles: false)), + topTitles: + AxisTitles(sideTitles: SideTitles(showTitles: false)), + bottomTitles: + AxisTitles(sideTitles: SideTitles(showTitles: false)), ), gridData: FlGridData(show: false), // Désactiver la grille borderData: FlBorderData(show: false), @@ -239,7 +385,8 @@ class DashboardPageState extends State { BarChartRodData( toY: displayValue, // Utiliser la valeur corrigée width: 20, // Largeur de la barre - borderRadius: BorderRadius.circular(4), // Bordures arrondies + borderRadius: + BorderRadius.circular(4), // Bordures arrondies color: Colors.transparent, // Couleur transparente pour appliquer le dégradé gradient: LinearGradient( colors: [Colors.blueAccent, Colors.lightBlueAccent], @@ -249,10 +396,12 @@ class DashboardPageState extends State { backDrawRodData: BackgroundBarChartRodData( show: true, toY: 100, // Fond de la jauge - color: const Color.fromARGB(255, 78, 78, 78).withOpacity(0.3), // Couleur du fond grisé + color: const Color.fromARGB(255, 78, 78, 78) + .withOpacity(0.3), // Couleur du fond grisé ), rodStackItems: [ - BarChartRodStackItem(0, displayValue, Colors.blueAccent.withOpacity(0.6)), + BarChartRodStackItem(0, displayValue, + Colors.blueAccent.withOpacity(0.6)), ], ), ], @@ -276,7 +425,8 @@ class DashboardPageState extends State { } // Méthode pour créer un mini graphique pour la carte Rendement - Widget _buildMiniGraphForRendement(List data, BuildContext context, DataManager dataManager) { + Widget _buildMiniGraphForRendement( + List data, BuildContext context, DataManager dataManager) { return Align( alignment: Alignment.center, child: SizedBox( @@ -294,7 +444,8 @@ class DashboardPageState extends State { lineBarsData: [ LineChartBarData( spots: List.generate(data.length, (index) { - double roundedValue = double.parse(dataManager.convert(data[index]).toStringAsFixed(2)); + double roundedValue = double.parse( + dataManager.convert(data[index]).toStringAsFixed(2)); return FlSpot(index.toDouble(), roundedValue); }), isCurved: true, @@ -302,7 +453,8 @@ class DashboardPageState extends State { color: Colors.blue, dotData: FlDotData( show: true, - getDotPainter: (spot, percent, barData, index) => FlDotCirclePainter( + getDotPainter: (spot, percent, barData, index) => + FlDotCirclePainter( radius: 2, color: Colors.blue, strokeWidth: 0, @@ -312,8 +464,10 @@ class DashboardPageState extends State { show: true, gradient: LinearGradient( colors: [ - Colors.blue.withOpacity(0.4), // Couleur plus opaque en haut - Colors.blue.withOpacity(0), // Couleur plus transparente en bas + Colors.blue + .withOpacity(0.4), // Couleur plus opaque en haut + Colors.blue + .withOpacity(0), // Couleur plus transparente en bas ], begin: Alignment.topCenter, end: Alignment.bottomCenter, @@ -376,9 +530,11 @@ class DashboardPageState extends State { Icon( icon, size: 24 + appState.getTextSizeOffset(), - color: _getIconColor(title, context), // Appelle une fonction pour déterminer la couleur + color: _getIconColor(title, + context), // Appelle une fonction pour déterminer la couleur ), - const SizedBox(width: 8), // Espacement entre l'icône et le texte + const SizedBox( + width: 8), // Espacement entre l'icône et le texte Text( title, style: TextStyle( @@ -387,13 +543,15 @@ class DashboardPageState extends State { color: Theme.of(context).textTheme.bodyLarge?.color, ), ), - const SizedBox(width: 12), // Espacement entre le texte et l'icône + const SizedBox( + width: 12), // Espacement entre le texte et l'icône if (title == S.of(context).rents) GestureDetector( onTap: () { Navigator.of(context).push( MaterialPageRoute( - builder: (context) => const DashboardRentsDetailsPage(), + builder: (context) => + const DashboardRentsDetailsPage(), ), ); }, @@ -415,7 +573,8 @@ class DashboardPageState extends State { ], ), const Spacer(), - if (hasGraph && rightWidget != null) rightWidget, // Affiche le graphique + if (hasGraph && rightWidget != null) + rightWidget, // Affiche le graphique ], ), ), @@ -432,13 +591,18 @@ class DashboardPageState extends State { style: TextStyle( fontSize: 16 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold, - color: Theme.of(context).textTheme.bodyLarge?.color // Mettre la valeur en gras + color: Theme.of(context) + .textTheme + .bodyLarge + ?.color // Mettre la valeur en gras ), ), const SizedBox(width: 6), Text( text, - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyLarge?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context).textTheme.bodyLarge?.color), ), ], ); @@ -452,11 +616,15 @@ class DashboardPageState extends State { child: Padding( padding: const EdgeInsets.all(8.0), child: Column( - mainAxisSize: MainAxisSize.min, // Ajuster la taille de la colonne au contenu - crossAxisAlignment: CrossAxisAlignment.center, // Centrer le contenu horizontalement + mainAxisSize: + MainAxisSize.min, // Ajuster la taille de la colonne au contenu + crossAxisAlignment: + CrossAxisAlignment.center, // Centrer le contenu horizontalement children: [ Text( - S.of(context).noDataAvailable, // Utilisation de la traduction pour "Aucun wallet trouvé" + S + .of(context) + .noDataAvailable, // Utilisation de la traduction pour "Aucun wallet trouvé" style: const TextStyle( fontSize: 16, fontWeight: FontWeight.bold, @@ -471,7 +639,8 @@ class DashboardPageState extends State { onPressed: () { Navigator.of(context).push( MaterialPageRoute( - builder: (context) => const ManageEvmAddressesPage(), // Ouvre la page de gestion des adresses + builder: (context) => + const ManageEvmAddressesPage(), // Ouvre la page de gestion des adresses ), ); }, @@ -500,7 +669,10 @@ class DashboardPageState extends State { ); final lastRentReceived = _getLastRentReceived(dataManager); - final totalRentReceived = Utils.getFormattedAmount(dataManager.convert(dataManager.getTotalRentReceived()), dataManager.currencySymbol, _showAmounts); + final totalRentReceived = Utils.getFormattedAmount( + dataManager.convert(dataManager.getTotalRentReceived()), + dataManager.currencySymbol, + _showAmounts); return Scaffold( backgroundColor: Theme.of(context).scaffoldBackgroundColor, @@ -512,7 +684,8 @@ class DashboardPageState extends State { child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), child: Padding( - padding: EdgeInsets.only(top: Utils.getAppBarHeight(context), left: 8.0, right: 8.0), + padding: EdgeInsets.only( + top: Utils.getAppBarHeight(context), left: 8.0, right: 8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -521,12 +694,19 @@ class DashboardPageState extends State { children: [ Text( S.of(context).hello, - style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Theme.of(context).textTheme.bodyLarge?.color), + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: + Theme.of(context).textTheme.bodyLarge?.color), ), visibilityButton, ], ), - if (!_isPageLoading && (dataManager.rentData.isEmpty || dataManager.walletValue == 0)) _buildNoWalletCard(context), + if (!_isPageLoading && + (dataManager.rentData.isEmpty || + dataManager.walletValue == 0)) + _buildNoWalletCard(context), const SizedBox(height: 8), RichText( text: TextSpan( @@ -535,7 +715,8 @@ class DashboardPageState extends State { text: S.of(context).lastRentReceived, style: TextStyle( fontSize: 15 + appState.getTextSizeOffset(), - color: Theme.of(context).textTheme.bodyMedium?.color, + color: + Theme.of(context).textTheme.bodyMedium?.color, ), ), TextSpan( @@ -543,14 +724,16 @@ class DashboardPageState extends State { style: TextStyle( fontSize: 18 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold, - color: Theme.of(context).textTheme.bodyLarge?.color, + color: + Theme.of(context).textTheme.bodyLarge?.color, ), ), TextSpan( text: '\n${S.of(context).totalRentReceived}: ', style: TextStyle( fontSize: 16 + appState.getTextSizeOffset(), - color: Theme.of(context).textTheme.bodyMedium?.color, + color: + Theme.of(context).textTheme.bodyMedium?.color, ), ), TextSpan( @@ -558,7 +741,8 @@ class DashboardPageState extends State { style: TextStyle( fontSize: 18 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold, - color: Theme.of(context).textTheme.bodyLarge?.color, + color: + Theme.of(context).textTheme.bodyLarge?.color, ), ), ], @@ -566,12 +750,16 @@ class DashboardPageState extends State { ), const SizedBox(height: 20), _buildCard( - S.of(context).portfolio, + S.of(context).wallet, Icons.dashboard, _buildValueBeforeText( - Utils.getFormattedAmount(dataManager.convert(dataManager.totalWalletValue), dataManager.currencySymbol, _showAmounts), + Utils.getFormattedAmount( + dataManager.convert(dataManager.totalWalletValue), + dataManager.currencySymbol, + _showAmounts), S.of(context).totalPortfolio, ), + [ _buildIndentedBalance( S.of(context).wallet, @@ -597,14 +785,18 @@ class DashboardPageState extends State { const SizedBox(height: 10), _buildIndentedBalance( S.of(context).depositBalance, - dataManager.convert(dataManager.totalUsdcDepositBalance + dataManager.totalXdaiDepositBalance), + dataManager.convert( + dataManager.totalUsdcDepositBalance + + dataManager.totalXdaiDepositBalance), dataManager.currencySymbol, true, context, ), _buildIndentedBalance( S.of(context).borrowBalance, - dataManager.convert(dataManager.totalUsdcBorrowBalance + dataManager.totalXdaiBorrowBalance), + dataManager.convert( + dataManager.totalUsdcBorrowBalance + + dataManager.totalXdaiBorrowBalance), dataManager.currencySymbol, false, context, @@ -613,7 +805,81 @@ class DashboardPageState extends State { dataManager, context, hasGraph: true, - rightWidget: _buildVerticalGauge(_getPortfolioBarGraphData(dataManager), context), + rightWidget: _buildVerticalGauge( + _getPortfolioBarGraphData(dataManager), context), + ), + const SizedBox(height: 8), + if (dataManager.rmmValue != 0 || dataManager.totalUsdcBorrowBalance != 0 || dataManager.totalXdaiBorrowBalance != 0 || dataManager.totalXdaiDepositBalance != 0 || dataManager.totalUsdcDepositBalance != 0 ) + _buildCard( + S.of(context).rmm, + Icons.currency_exchange, + _buildValueBeforeText( + ((dataManager.rmmValue * 0.7) / + (dataManager.totalUsdcBorrowBalance + + dataManager.totalXdaiBorrowBalance)) + .toStringAsFixed(1), + 'Health factor', + ), + [ + _buildValueBeforeText( + ((dataManager.totalUsdcBorrowBalance + dataManager.totalXdaiBorrowBalance) / dataManager.rmmValue *100) + .toStringAsFixed(1), + 'Current LTV', + ), + const SizedBox(height: 10), + + Text( + 'Xdai ${S.of(context).depositBalance}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.totalXdaiDepositBalance), dataManager.currencySymbol, _showAmounts)}', + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), + ), + Text( + 'USDC ${S.of(context).depositBalance}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.totalUsdcDepositBalance), dataManager.currencySymbol, _showAmounts)}', + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), + ), + Text( + 'USDC ${S.of(context).borrowBalance}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.totalUsdcBorrowBalance), dataManager.currencySymbol, _showAmounts)}', + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), + ), + Text( + 'Xdai ${S.of(context).borrowBalance}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.totalXdaiBorrowBalance), dataManager.currencySymbol, _showAmounts)}', + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), + ) + ], + dataManager, + context, + hasGraph: true, + rightWidget: Builder( + builder: (context) { + double factor = (dataManager.rmmValue * 0.7) / + (dataManager.totalUsdcBorrowBalance + + dataManager.totalXdaiBorrowBalance); + factor = factor.isNaN || factor < 0 ? 0 : factor.clamp(0.0, 10.0); + + return _buildVerticalGauges(factor, context, dataManager); + }, +), + + ), const SizedBox(height: 8), _buildCard( @@ -626,17 +892,32 @@ class DashboardPageState extends State { [ Text( '${S.of(context).properties}: ${dataManager.totalTokenCount}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), Text( ' ${S.of(context).wallet}: ${dataManager.walletTokenCount}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), Row( children: [ Text( ' ${S.of(context).rmm}: ${dataManager.rmmTokenCount.toInt()}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), SizedBox(width: 6), GestureDetector( @@ -645,30 +926,43 @@ class DashboardPageState extends State { context: context, builder: (BuildContext context) { return AlertDialog( - title: Text(S.of(context).duplicate_title), // Titre de la popup + title: Text(S + .of(context) + .duplicate_title), // Titre de la popup content: Text( '${dataManager.duplicateTokenCount.toInt()} ${S.of(context).duplicate}', // Contenu de la popup - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + style: TextStyle( + fontSize: 13 + + appState.getTextSizeOffset()), ), actions: [ TextButton( onPressed: () { - Navigator.of(context).pop(); // Fermer la popup + Navigator.of(context) + .pop(); // Fermer la popup }, - child: Text(S.of(context).close), // Bouton de fermeture + child: Text(S + .of(context) + .close), // Bouton de fermeture ), ], ); }, ); }, - child: Icon(Icons.info_outline, size: 15), // Icône sans padding implicite + child: Icon(Icons.info_outline, + size: 15), // Icône sans padding implicite ), ], ), Text( '${S.of(context).rentedUnits}: ${dataManager.rentedUnits} / ${dataManager.totalUnits}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), ], dataManager, @@ -676,11 +970,15 @@ class DashboardPageState extends State { hasGraph: true, rightWidget: Builder( builder: (context) { - double rentedPercentage = dataManager.rentedUnits / dataManager.totalUnits * 100; + double rentedPercentage = dataManager.rentedUnits / + dataManager.totalUnits * + 100; if (rentedPercentage.isNaN || rentedPercentage < 0) { - rentedPercentage = 0; // Remplacer NaN par une valeur par défaut comme 0 + rentedPercentage = + 0; // Remplacer NaN par une valeur par défaut comme 0 } - return _buildPieChart(rentedPercentage, context); // Ajout du camembert avec la vérification + return _buildPieChart(rentedPercentage, + context); // Ajout du camembert avec la vérification }, ), ), @@ -688,15 +986,27 @@ class DashboardPageState extends State { _buildCard( S.of(context).tokens, Icons.account_balance_wallet, - _buildValueBeforeText(dataManager.totalTokens.toStringAsFixed(2), S.of(context).totalTokens), + _buildValueBeforeText( + dataManager.totalTokens.toStringAsFixed(2), + S.of(context).totalTokens), [ Text( '${S.of(context).wallet}: ${dataManager.walletTokensSums.toStringAsFixed(2)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), Text( '${S.of(context).rmm}: ${dataManager.rmmTokensSums.toStringAsFixed(2)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), ], dataManager, @@ -704,11 +1014,16 @@ class DashboardPageState extends State { hasGraph: true, rightWidget: Builder( builder: (context) { - double rentedPercentage = dataManager.walletTokensSums / dataManager.totalTokens * 100; + double rentedPercentage = + dataManager.walletTokensSums / + dataManager.totalTokens * + 100; if (rentedPercentage.isNaN || rentedPercentage < 0) { - rentedPercentage = 0; // Remplacer NaN par une valeur par défaut comme 0 + rentedPercentage = + 0; // Remplacer NaN par une valeur par défaut comme 0 } - return _buildPieChart(rentedPercentage, context); // Ajout du camembert avec la vérification + return _buildPieChart(rentedPercentage, + context); // Ajout du camembert avec la vérification }, ), ), @@ -718,7 +1033,9 @@ class DashboardPageState extends State { Icons.attach_money, Row( children: [ - _buildValueBeforeText('${dataManager.netGlobalApy.toStringAsFixed(2)}%', S.of(context).annualYield), + _buildValueBeforeText( + '${dataManager.netGlobalApy.toStringAsFixed(2)}%', + S.of(context).annualYield), SizedBox(width: 6), GestureDetector( onTap: () { @@ -726,54 +1043,91 @@ class DashboardPageState extends State { context: context, builder: (BuildContext context) { return AlertDialog( - title: Text(S.of(context).apy), // Titre de la popup + title: Text( + S.of(context).apy), // Titre de la popup content: Text( - S.of(context).netApyHelp, // Contenu de la popup - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + S + .of(context) + .netApyHelp, // Contenu de la popup + style: TextStyle( + fontSize: 13 + + appState.getTextSizeOffset()), ), actions: [ TextButton( onPressed: () { - Navigator.of(context).pop(); // Fermer la popup + Navigator.of(context) + .pop(); // Fermer la popup }, - child: Text(S.of(context).close), // Bouton de fermeture + child: Text(S + .of(context) + .close), // Bouton de fermeture ), ], ); }, ); }, - child: Icon(Icons.info_outline, size: 15), // Icône sans padding implicite + child: Icon(Icons.info_outline, + size: 15), // Icône sans padding implicite ), ], ), [ Text( 'APY brut: ${dataManager.averageAnnualYield.toStringAsFixed(2)} %', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), const SizedBox(height: 10), Text( '${S.of(context).daily}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.dailyRent), dataManager.currencySymbol, _showAmounts)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), Text( '${S.of(context).weekly}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.weeklyRent), dataManager.currencySymbol, _showAmounts)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), Text( '${S.of(context).monthly}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.monthlyRent), dataManager.currencySymbol, _showAmounts)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), Text( '${S.of(context).annually}: ${Utils.getFormattedAmount(dataManager.convert(dataManager.yearlyRent), dataManager.currencySymbol, _showAmounts)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color), ), ], dataManager, context, hasGraph: true, - rightWidget: _buildMiniGraphForRendement(_getLast12MonthsRent(dataManager), context, dataManager), + rightWidget: _buildMiniGraphForRendement( + _getLast12MonthsRent(dataManager), + context, + dataManager), ), const SizedBox(height: 8), _buildCard( @@ -816,20 +1170,25 @@ class DashboardPageState extends State { // Vérifier si la date est déjà dans le Set if (displayedDates.contains(rentStartDate)) { - return SizedBox.shrink(); // Ne rien afficher si la date est déjà affichée + return SizedBox + .shrink(); // Ne rien afficher si la date est déjà affichée } else { // Ajouter la date au Set displayedDates.add(rentStartDate); // Vérifier si la date est "3000-01-01" et afficher 'date non connu' - String displayDate = rentStartDate == DateTime(3000, 1, 1) ? 'Date non communiquée' : DateFormat('yyyy-MM-dd').format(rentStartDate); + String displayDate = rentStartDate == DateTime(3000, 1, 1) + ? 'Date non communiquée' + : DateFormat('yyyy-MM-dd').format(rentStartDate); // Afficher la date et le loyer cumulé return Padding( padding: const EdgeInsets.symmetric(vertical: 0), child: Text( '$displayDate: ${Utils.getFormattedAmount(dataManager.convert(entry['cumulativeRent']), dataManager.currencySymbol, _showAmounts)}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color), + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + color: Theme.of(context).textTheme.bodyMedium?.color), ), ); } @@ -838,15 +1197,20 @@ class DashboardPageState extends State { } // Fonction utilitaire pour ajouter un "+" ou "-" et afficher entre parenthèses - Widget _buildIndentedBalance(String label, double value, String symbol, bool isPositive, BuildContext context) { + Widget _buildIndentedBalance(String label, double value, String symbol, + bool isPositive, BuildContext context) { // Utiliser la fonction _getFormattedAmount pour gérer la visibilité des montants final appState = Provider.of(context); String formattedAmount = _showAmounts - ? (isPositive ? "+ ${Utils.formatCurrency(value, symbol)}" : "- ${Utils.formatCurrency(value, symbol)}") - : (isPositive ? "+ " : "- ") + ('*' * 10); // Affiche une série d'astérisques si masqué + ? (isPositive + ? "+ ${Utils.formatCurrency(value, symbol)}" + : "- ${Utils.formatCurrency(value, symbol)}") + : (isPositive ? "+ " : "- ") + + ('*' * 10); // Affiche une série d'astérisques si masqué return Padding( - padding: const EdgeInsets.only(left: 15.0), // Ajoute une indentation pour décaler à droite + padding: const EdgeInsets.only( + left: 15.0), // Ajoute une indentation pour décaler à droite child: Row( children: [ Text( @@ -854,15 +1218,22 @@ class DashboardPageState extends State { style: TextStyle( fontSize: 13, // Taille du texte ajustée fontWeight: FontWeight.bold, - color: Theme.of(context).textTheme.bodyMedium?.color, // Couleur en fonction du thème + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color, // Couleur en fonction du thème ), ), const SizedBox(width: 8), // Espace entre le montant et le label Text( label, // Affiche le label après le montant style: TextStyle( - fontSize: 11 + appState.getTextSizeOffset(), // Texte légèrement plus petit - color: Theme.of(context).textTheme.bodyMedium?.color, // Couleur en fonction du thème + fontSize: 11 + + appState.getTextSizeOffset(), // Texte légèrement plus petit + color: Theme.of(context) + .textTheme + .bodyMedium + ?.color, // Couleur en fonction du thème ), ), ], @@ -872,12 +1243,15 @@ class DashboardPageState extends State { // Fonction pour obtenir la couleur en fonction du titre traduit Color _getIconColor(String title, BuildContext context) { - final String translatedTitle = title.trim(); // Supprime les espaces éventuels + final String translatedTitle = + title.trim(); // Supprime les espaces éventuels if (translatedTitle == S.of(context).rents) { return Colors.green; } else if (translatedTitle == S.of(context).tokens) { return Colors.orange; + } else if (translatedTitle == S.of(context).rmm) { + return Colors.teal; } else if (translatedTitle == S.of(context).properties) { return Colors.blue; } else if (translatedTitle == S.of(context).portfolio) { diff --git a/lib/pages/portfolio/portfolio_display_1.dart b/lib/pages/portfolio/portfolio_display_1.dart index 388adda..7ad23c3 100644 --- a/lib/pages/portfolio/portfolio_display_1.dart +++ b/lib/pages/portfolio/portfolio_display_1.dart @@ -315,7 +315,7 @@ class PortfolioDisplay1 extends StatelessWidget { ], ), Text( - '${S.of(context).totalValue}: ${Utils.formatCurrency(token['totalValue'] ?? 0, dataManager.currencySymbol)}', + '${S.of(context).totalValue}: ${Utils.formatCurrency(dataManager.convert(token['totalValue']), dataManager.currencySymbol)}', style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), ), Text( @@ -342,21 +342,21 @@ class PortfolioDisplay1 extends StatelessWidget { Column( children: [ Text(S.of(context).week, style: TextStyle(fontSize: 13 + appState.getTextSizeOffset())), - Text(Utils.formatCurrency(token['dailyIncome'] * 7 ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['dailyIncome']) * 7, dataManager.currencySymbol), style: TextStyle(fontSize: 13 + appState.getTextSizeOffset())), ], ), Column( children: [ Text(S.of(context).month, style: TextStyle(fontSize: 13 + appState.getTextSizeOffset())), - Text(Utils.formatCurrency(token['monthlyIncome'] ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['monthlyIncome']), dataManager.currencySymbol), style: TextStyle(fontSize: 13 + appState.getTextSizeOffset())), ], ), Column( children: [ Text(S.of(context).year, style: TextStyle(fontSize: 13 + appState.getTextSizeOffset())), - Text(Utils.formatCurrency(token['yearlyIncome'] ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['yearlyIncome']), dataManager.currencySymbol), style: TextStyle(fontSize: 13 + appState.getTextSizeOffset())), ], ), diff --git a/lib/pages/portfolio/portfolio_display_2.dart b/lib/pages/portfolio/portfolio_display_2.dart index 958a505..92287d9 100644 --- a/lib/pages/portfolio/portfolio_display_2.dart +++ b/lib/pages/portfolio/portfolio_display_2.dart @@ -286,7 +286,7 @@ class PortfolioDisplay2State extends State { const SizedBox(height: 8), Text( - '${S.of(context).totalValue}: ${Utils.formatCurrency(token['totalValue'], dataManager.currencySymbol)}', + '${S.of(context).totalValue}: ${Utils.formatCurrency(dataManager.convert(token['totalValue']), dataManager.currencySymbol)}', style: TextStyle( fontSize: 15 + appState.getTextSizeOffset(), ), @@ -322,7 +322,7 @@ class PortfolioDisplay2State extends State { style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), - Text(Utils.formatCurrency(token['dailyIncome'] ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['dailyIncome']), dataManager.currencySymbol), style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), @@ -334,7 +334,7 @@ class PortfolioDisplay2State extends State { style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), - Text(Utils.formatCurrency(token['dailyIncome'] * 7 ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['dailyIncome']) * 7, dataManager.currencySymbol), style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), @@ -346,7 +346,7 @@ class PortfolioDisplay2State extends State { style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), - Text(Utils.formatCurrency(token['monthlyIncome'] ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['monthlyIncome']), dataManager.currencySymbol), style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), @@ -358,7 +358,7 @@ class PortfolioDisplay2State extends State { style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), - Text(Utils.formatCurrency(token['yearlyIncome'] ?? 0, dataManager.currencySymbol), + Text(Utils.formatCurrency(dataManager.convert(token['yearlyIncome'] ), dataManager.currencySymbol), style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), )), diff --git a/lib/pages/token_bottom_sheet.dart b/lib/pages/token_bottom_sheet.dart index c38b6a5..2cce926 100644 --- a/lib/pages/token_bottom_sheet.dart +++ b/lib/pages/token_bottom_sheet.dart @@ -14,8 +14,13 @@ import 'portfolio/FullScreenCarousel.dart'; import 'package:realtokens_apps/utils/utils.dart'; import 'package:realtokens_apps/app_state.dart'; -Future>> _getFilteredOffers(DataManager dataManager, String tokenUuid) async { - return dataManager.yamMarket.where((offer) => offer['token_to_sell'] == tokenUuid.toLowerCase() || offer['token_to_buy'] == tokenUuid.toLowerCase()).toList(); +Future>> _getFilteredOffers( + DataManager dataManager, String tokenUuid) async { + return dataManager.yamMarket + .where((offer) => + offer['token_to_sell'] == tokenUuid.toLowerCase() || + offer['token_to_buy'] == tokenUuid.toLowerCase()) + .toList(); } void _openMapModal(BuildContext context, dynamic lat, dynamic lng) { @@ -54,18 +59,21 @@ void _openMapModal(BuildContext context, dynamic lat, dynamic lng) { children: [ FlutterMap( options: MapOptions( - initialCenter: LatLng(latitude, longitude), // Utilise les valeurs converties + initialCenter: LatLng( + latitude, longitude), // Utilise les valeurs converties initialZoom: 10.0, ), children: [ TileLayer( - urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + urlTemplate: + 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', subdomains: ['a', 'b', 'c'], ), MarkerLayer( markers: [ Marker( - point: LatLng(latitude, longitude), // Coordonnées du marqueur + point: LatLng( + latitude, longitude), // Coordonnées du marqueur width: 50, // Largeur du marqueur height: 50, // Hauteur du marqueur child: const Icon( @@ -84,7 +92,8 @@ void _openMapModal(BuildContext context, dynamic lat, dynamic lng) { child: FloatingActionButton( onPressed: () { // Lancer Google Street View - final googleStreetViewUrl = 'https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=$latitude,$longitude'; + final googleStreetViewUrl = + 'https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=$latitude,$longitude'; Utils.launchURL(googleStreetViewUrl); }, backgroundColor: Colors.blue, @@ -113,15 +122,18 @@ String _formatSquareFeet(double sqft, bool convertToSquareMeters) { } // Fonction réutilisable pour afficher la BottomModalSheet avec les détails du token -Future showTokenDetails(BuildContext context, Map token) async { +Future showTokenDetails( + BuildContext context, Map token) async { final dataManager = Provider.of(context, listen: false); final prefs = await SharedPreferences.getInstance(); bool convertToSquareMeters = prefs.getBool('convertToSquareMeters') ?? false; final appState = Provider.of(context, listen: false); final ValueNotifier showDetailsNotifier = ValueNotifier(false); - final ValueNotifier showRentDetailsNotifier = ValueNotifier(false); - final ValueNotifier showTextField = ValueNotifier(false); // Contrôle de la visibilité + final ValueNotifier showRentDetailsNotifier = + ValueNotifier(false); + final ValueNotifier showTextField = + ValueNotifier(false); // Contrôle de la visibilité final Color listingFeeColor = Colors.red; final Color maintenanceReserveColor = Colors.orange; final Color renovationReserveColor = Colors.purple; @@ -134,11 +146,12 @@ Future showTokenDetails(BuildContext context, Map token) (token['renovationReserve']?.toDouble() ?? 0.0) + (token['miscellaneousCosts']?.toDouble() ?? 0.0); - double totalRentCosts = (token['propertyMaintenanceMonthly']?.toDouble() ?? 0.0) + - (token['propertyManagement']?.toDouble() ?? 0.0) + - (token['realtPlatform']?.toDouble() ?? 0.0) + - (token['insurance']?.toDouble() ?? 0.0) + - (token['propertyTaxes']?.toDouble() ?? 0.0); + double totalRentCosts = + (token['propertyMaintenanceMonthly']?.toDouble() ?? 0.0) + + (token['propertyManagement']?.toDouble() ?? 0.0) + + (token['realtPlatform']?.toDouble() ?? 0.0) + + (token['insurance']?.toDouble() ?? 0.0) + + (token['propertyTaxes']?.toDouble() ?? 0.0); // Variable pour stocker la valeur modifiable du prix initial final TextEditingController initPriceController = TextEditingController( @@ -163,9 +176,13 @@ Future showTokenDetails(BuildContext context, Map token) ? GestureDetector( onTap: () { // Vérifier si c'est une chaîne ou une liste - final List imageLinks = token['imageLink'] is String - ? [token['imageLink']] // Convertir en liste si c'est une chaîne - : List.from(token['imageLink']); // Garder la liste si c'est déjà une liste + final List imageLinks = token['imageLink'] + is String + ? [ + token['imageLink'] + ] // Convertir en liste si c'est une chaîne + : List.from(token[ + 'imageLink']); // Garder la liste si c'est déjà une liste Navigator.of(context).push( MaterialPageRoute( @@ -182,8 +199,11 @@ Future showTokenDetails(BuildContext context, Map token) enlargeCenterPage: true, ), items: (token['imageLink'] is String - ? [token['imageLink']] // Convertir en liste si c'est une chaîne - : List.from(token['imageLink'])) // Utiliser la liste directement + ? [ + token['imageLink'] + ] // Convertir en liste si c'est une chaîne + : List.from(token[ + 'imageLink'])) // Utiliser la liste directement .map((imageUrl) { return CachedNetworkImage( imageUrl: imageUrl, @@ -225,9 +245,10 @@ Future showTokenDetails(BuildContext context, Map token) fontSize: 13 + appState.getTextSizeOffset(), ), ), - const SizedBox(width: 8), // Espace entre les deux éléments + const SizedBox( + width: 8), // Espace entre les deux éléments Text( - Utils.formatCurrency(token['totalValue'], dataManager.currencySymbol), + Utils.formatCurrency(dataManager.convert(token['totalValue']), dataManager.currencySymbol), style: TextStyle( fontWeight: FontWeight.normal, color: Colors.grey, @@ -244,11 +265,18 @@ Future showTokenDetails(BuildContext context, Map token) // TabBar pour les différents onglets TabBar( labelColor: Colors.blue, - indicatorColor: Colors.blue, // Couleur de l'indicateur sous l'onglet sélectionné + indicatorColor: Colors + .blue, // Couleur de l'indicateur sous l'onglet sélectionné unselectedLabelColor: Colors.grey, - labelStyle: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold), // Taille du texte des onglets sélectionnés - unselectedLabelStyle: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), // Taille du texte des onglets non sélectionnés + labelStyle: TextStyle( + fontSize: 13 + appState.getTextSizeOffset(), + fontWeight: FontWeight + .bold), // Taille du texte des onglets sélectionnés + unselectedLabelStyle: TextStyle( + fontSize: 13 + + appState + .getTextSizeOffset()), // Taille du texte des onglets non sélectionnés tabs: [ Tab(icon: Icon(Icons.home)), // Propriétés Tab(icon: Icon(Icons.attach_money)), // Finances @@ -281,26 +309,33 @@ Future showTokenDetails(BuildContext context, Map token) _buildDetailRow( context, S.of(context).constructionYear, - token['constructionYear']?.toString() ?? S.of(context).notSpecified, - icon: Icons.calendar_today, // Icône pour l'année de construction + token['constructionYear']?.toString() ?? + S.of(context).notSpecified, + icon: Icons + .calendar_today, // Icône pour l'année de construction ), _buildDetailRow( context, S.of(context).propertyType, - Parameters.getPropertyTypeName(token['propertyType'] ?? -1, context), + Parameters.getPropertyTypeName( + token['propertyType'] ?? -1, context), icon: Icons.home, ), _buildDetailRow( context, S.of(context).rentalType, - token['rentalType']?.toString() ?? S.of(context).notSpecified, - icon: Icons.assignment, // Icône pour le type de location + token['rentalType']?.toString() ?? + S.of(context).notSpecified, + icon: Icons + .assignment, // Icône pour le type de location ), _buildDetailRow( context, S.of(context).bedroomBath, - token['bedroomBath']?.toString() ?? S.of(context).notSpecified, - icon: Icons.bed, // Icône pour les chambres et les salles de bain + token['bedroomBath']?.toString() ?? + S.of(context).notSpecified, + icon: Icons + .bed, // Icône pour les chambres et les salles de bain ), _buildDetailRow( context, @@ -309,7 +344,8 @@ Future showTokenDetails(BuildContext context, Map token) token['lotSize']?.toDouble() ?? 0, convertToSquareMeters, ), - icon: Icons.landscape, // Icône pour la taille du terrain + icon: Icons + .landscape, // Icône pour la taille du terrain ), _buildDetailRow( context, @@ -318,7 +354,8 @@ Future showTokenDetails(BuildContext context, Map token) token['squareFeet']?.toDouble() ?? 0, convertToSquareMeters, ), - icon: Icons.square_foot, // Icône pour la surface en pieds carrés + icon: Icons + .square_foot, // Icône pour la surface en pieds carrés ), const SizedBox(height: 10), Text( @@ -334,15 +371,20 @@ Future showTokenDetails(BuildContext context, Map token) Row( children: [ Icon( - Icons.apartment, // Choisissez une icône appropriée pour les unités louées + Icons + .apartment, // Choisissez une icône appropriée pour les unités louées size: 18, // Taille de l'icône - color: Colors.blueGrey, // Couleur en fonction du thème + color: Colors + .blueGrey, // Couleur en fonction du thème ), - const SizedBox(width: 8), // Espacement entre l'icône et le texte + const SizedBox( + width: + 8), // Espacement entre l'icône et le texte Text( ' ${S.of(context).rentedUnits}', style: TextStyle( - fontSize: 13 + appState.getTextSizeOffset(), + fontSize: + 13 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold, ), ), @@ -352,7 +394,9 @@ Future showTokenDetails(BuildContext context, Map token) Spacer(), Text( '${token['rentedUnits'] ?? 0.0} / ${token['totalUnits'] ?? 0.0}', - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + style: TextStyle( + fontSize: + 13 + appState.getTextSizeOffset()), ), const SizedBox(width: 10), Container( @@ -374,15 +418,20 @@ Future showTokenDetails(BuildContext context, Map token) Row( children: [ Icon( - Icons.date_range, // Icône pour représenter la date de début de location + Icons + .date_range, // Icône pour représenter la date de début de location size: 18, // Taille de l'icône - color: Colors.blueGrey, // Couleur bleue pour l'icône // Couleur basée sur le thème + color: Colors + .blueGrey, // Couleur bleue pour l'icône // Couleur basée sur le thème ), - const SizedBox(width: 8), // Espacement entre l'icône et le texte + const SizedBox( + width: + 8), // Espacement entre l'icône et le texte Text( ' ${S.of(context).rentStartDate}', style: TextStyle( - fontSize: 13 + appState.getTextSizeOffset(), + fontSize: + 13 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold, ), ), @@ -391,7 +440,8 @@ Future showTokenDetails(BuildContext context, Map token) const SizedBox(width: 10), Spacer(), Text( - Utils.formatReadableDate(token['rentStartDate'] ?? ''), + Utils.formatReadableDate( + token['rentStartDate'] ?? ''), style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), ), @@ -402,7 +452,11 @@ Future showTokenDetails(BuildContext context, Map token) height: 12, decoration: BoxDecoration( shape: BoxShape.circle, - color: DateTime.parse(token['rentStartDate'] ?? '').isBefore(DateTime.now()) ? Colors.green : Colors.red, + color: DateTime.parse( + token['rentStartDate'] ?? '') + .isBefore(DateTime.now()) + ? Colors.green + : Colors.red, ), ), ], @@ -412,7 +466,8 @@ Future showTokenDetails(BuildContext context, Map token) context, S.of(context).section8paid, '${((token['section8paid']) / (token['grossRentMonth']) * 100).toStringAsFixed(2)}%', - icon: Icons.attach_money, // Icône pour le montant payé par Section 8 + icon: Icons + .attach_money, // Icône pour le montant payé par Section 8 ), ], ), @@ -423,33 +478,46 @@ Future showTokenDetails(BuildContext context, Map token) child: Column( children: [ _buildDetailRow( - context, S.of(context).totalInvestment, Utils.formatCurrency(token['totalInvestment'] ?? 0, dataManager.currencySymbol), + context, + S.of(context).totalInvestment, + Utils.formatCurrency(dataManager.convert(token['totalInvestment']), dataManager.currencySymbol), icon: Icons.monetization_on), GestureDetector( - onTap: () => showDetailsNotifier.value = !showDetailsNotifier.value, + onTap: () => showDetailsNotifier.value = + !showDetailsNotifier.value, child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, children: [ Row( children: [ Text( - S.of(context).totalExpenses, // Label pour le texte - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold), // Optional styling + S + .of(context) + .totalExpenses, // Label pour le texte + style: TextStyle( + fontSize: 13 + + appState.getTextSizeOffset(), + fontWeight: FontWeight + .bold), // Optional styling ), ValueListenableBuilder( valueListenable: showDetailsNotifier, builder: (context, showDetails, child) { return Icon( - showDetails ? Icons.expand_less : Icons.expand_more, - color: Colors.grey, // Optionnel : couleur de l'icône + showDetails + ? Icons.expand_less + : Icons.expand_more, + color: Colors + .grey, // Optionnel : couleur de l'icône ); }, ), ], ), Text( - '- ${Utils.formatCurrency(token['totalInvestment'] - token['underlyingAssetPrice'], dataManager.currencySymbol)}', // Affichage du montant total + Utils.formatCurrency(dataManager.convert(token['totalInvestment'] - token['underlyingAssetPrice']),dataManager.currencySymbol), // Affichage du montant total style: TextStyle(color: Colors.red), ), ], @@ -466,39 +534,53 @@ Future showTokenDetails(BuildContext context, Map token) _buildDetailRow( context, S.of(context).realtListingFee, - Utils.formatCurrency(token['realtListingFee'] ?? 0, dataManager.currencySymbol), + Utils.formatCurrency( + dataManager.convert(token['realtListingFee'] ?? 0), + dataManager.currencySymbol), isNegative: true, - color: listingFeeColor, // Couleur spécifique + color: + listingFeeColor, // Couleur spécifique ), _buildDetailRow( context, S.of(context).initialMaintenanceReserve, - Utils.formatCurrency(token['initialMaintenanceReserve'] ?? 0, dataManager.currencySymbol), + Utils.formatCurrency( + dataManager.convert(token['initialMaintenanceReserve'] ?? 0), + dataManager.currencySymbol), isNegative: true, - color: maintenanceReserveColor, // Couleur spécifique + color: + maintenanceReserveColor, // Couleur spécifique ), _buildDetailRow( context, S.of(context).renovationReserve, - Utils.formatCurrency(token['renovationReserve'] ?? 0, dataManager.currencySymbol), + Utils.formatCurrency( + dataManager.convert(token['renovationReserve'] ?? 0), + dataManager.currencySymbol), isNegative: true, - color: renovationReserveColor, // Couleur spécifique + color: + renovationReserveColor, // Couleur spécifique ), _buildDetailRow( context, S.of(context).miscellaneousCosts, - Utils.formatCurrency(token['miscellaneousCosts'] ?? 0, dataManager.currencySymbol), + Utils.formatCurrency( + dataManager.convert(token['miscellaneousCosts'] ?? 0), + dataManager.currencySymbol), isNegative: true, - color: miscellaneousCostsColor, // Couleur spécifique + color: + miscellaneousCostsColor, // Couleur spécifique ), _buildDetailRow( context, S.of(context).others, Utils.formatCurrency( - token['totalInvestment'] - token['underlyingAssetPrice'] - totalCosts ?? 0, dataManager.currencySymbol), + dataManager.convert((token['totalInvestment'] - token['underlyingAssetPrice'] - totalCosts) ?? 0), + dataManager.currencySymbol), isNegative: true, - color: othersColor, // Couleur spécifique + color: + othersColor, // Couleur spécifique ), ], ), @@ -515,40 +597,64 @@ Future showTokenDetails(BuildContext context, Map token) flex: ((token['realtListingFee'] ?? 0) / totalCosts * 100).round(), child: Container( height: 10, - color: listingFeeColor, // Couleur représentant le coût de 'realtListingFee' + color: + listingFeeColor, // Couleur représentant le coût de 'realtListingFee' ), ), // Maintenance Reserve Expanded( - flex: ((token['initialMaintenanceReserve'] ?? 0) / totalCosts * 100).round(), + flex: + ((token['initialMaintenanceReserve'] ?? + 0) / + totalCosts * + 100) + .round(), child: Container( height: 10, - color: maintenanceReserveColor, // Couleur représentant le coût de 'initialMaintenanceReserve' + color: + maintenanceReserveColor, // Couleur représentant le coût de 'initialMaintenanceReserve' ), ), // Renovation Reserve Expanded( - flex: ((token['renovationReserve'] ?? 0) / totalCosts * 100).round(), + flex: + ((token['renovationReserve'] ?? 0) / + totalCosts * + 100) + .round(), child: Container( height: 10, - color: renovationReserveColor, // Couleur représentant le coût de 'renovationReserve' + color: + renovationReserveColor, // Couleur représentant le coût de 'renovationReserve' ), ), // Miscellaneous Costs Expanded( - flex: ((token['miscellaneousCosts'] ?? 0) / totalCosts * 100).round(), + flex: ((token['miscellaneousCosts'] ?? + 0) / + totalCosts * + 100) + .round(), child: Container( height: 10, - color: miscellaneousCostsColor, // Couleur représentant le coût de 'miscellaneousCosts' + color: + miscellaneousCostsColor, // Couleur représentant le coût de 'miscellaneousCosts' ), ), // Autres Expanded( - flex: - (((token['totalInvestment'] ?? 0) - (token['underlyingAssetPrice'] ?? 0) - totalCosts) / totalCosts * 100).round(), + flex: (((token['totalInvestment'] ?? + 0) - + (token['underlyingAssetPrice'] ?? + 0) - + totalCosts) / + totalCosts * + 100) + .round(), child: Container( height: 10, - color: Colors.grey, // Couleur pour les coûts restants + color: Colors + .grey, // Couleur pour les coûts restants ), ), ] @@ -558,47 +664,72 @@ Future showTokenDetails(BuildContext context, Map token) flex: 1, child: Container( height: 10, - color: Colors.grey, // Couleur grise pour indiquer qu'il n'y a pas de coût + color: Colors + .grey, // Couleur grise pour indiquer qu'il n'y a pas de coût ), ), ], ), - SizedBox(height: 2), // Espace sous la jauge pour séparatio - _buildDetailRow(context, S.of(context).underlyingAssetPrice, - Utils.formatCurrency(token['underlyingAssetPrice'] ?? 0, dataManager.currencySymbol)), - SizedBox(height: 2), // Espace sous la jauge pour séparatio + SizedBox( + height: + 2), // Espace sous la jauge pour séparatio + _buildDetailRow( + context, + S.of(context).underlyingAssetPrice, + Utils.formatCurrency( + dataManager.convert(token['underlyingAssetPrice'] ?? 0), + dataManager.currencySymbol)), + SizedBox( + height: + 2), // Espace sous la jauge pour séparatio Divider(), _buildDetailRow( - context, S.of(context).grossRentMonth, Utils.formatCurrency(token['grossRentMonth'] ?? 0, dataManager.currencySymbol), + context, + S.of(context).grossRentMonth, + Utils.formatCurrency( + dataManager.convert(token['grossRentMonth'] ?? 0), + dataManager.currencySymbol), icon: Icons.attach_money), // Total row with tap to show/hide details GestureDetector( - onTap: () => showRentDetailsNotifier.value = !showRentDetailsNotifier.value, + onTap: () => showRentDetailsNotifier.value = + !showRentDetailsNotifier.value, child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: + MainAxisAlignment.spaceBetween, children: [ Row( children: [ Text( - S.of(context).totalExpenses, // Label pour le texte - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset(), fontWeight: FontWeight.bold), // Optional styling + S + .of(context) + .totalExpenses, // Label pour le texte + style: TextStyle( + fontSize: 13 + + appState.getTextSizeOffset(), + fontWeight: FontWeight + .bold), // Optional styling ), ValueListenableBuilder( - valueListenable: showRentDetailsNotifier, + valueListenable: + showRentDetailsNotifier, builder: (context, showDetails, child) { return Icon( - showDetails ? Icons.expand_less : Icons.expand_more, - color: Colors.grey, // Optionnel : couleur de l'icône + showDetails + ? Icons.expand_less + : Icons.expand_more, + color: Colors + .grey, // Optionnel : couleur de l'icône ); }, ), ], ), Text( - '- ${Utils.formatCurrency(token['grossRentMonth'] - token['netRentMonth'], dataManager.currencySymbol)}', // Affichage du montant total + '- ${Utils.formatCurrency(dataManager.convert(token['grossRentMonth'] - token['netRentMonth']), dataManager.currencySymbol)}', // Affichage du montant total style: TextStyle(color: Colors.red), ), ], @@ -612,26 +743,54 @@ Future showTokenDetails(BuildContext context, Map token) visible: showDetails, child: Column( children: [ - _buildDetailRow(context, S.of(context).propertyMaintenanceMonthly, - Utils.formatCurrency(token['propertyMaintenanceMonthly'] ?? 0, dataManager.currencySymbol), - isNegative: true, color: Colors.deepOrange), - _buildDetailRow(context, S.of(context).propertyManagement, - Utils.formatCurrency(token['propertyManagement'] ?? 0, dataManager.currencySymbol), - isNegative: true, color: Colors.amber), _buildDetailRow( - context, S.of(context).realtPlatform, Utils.formatCurrency(token['realtPlatform'] ?? 0, dataManager.currencySymbol), - isNegative: true, color: Colors.orange), + context, + S + .of(context) + .propertyMaintenanceMonthly, + Utils.formatCurrency( + dataManager.convert(token['propertyMaintenanceMonthly'] ?? 0), + dataManager.currencySymbol), + isNegative: true, + color: Colors.deepOrange), _buildDetailRow( - context, S.of(context).insurance, Utils.formatCurrency(token['insurance'] ?? 0, dataManager.currencySymbol), - isNegative: true, color: Colors.purple), + context, + S.of(context).propertyManagement, + Utils.formatCurrency( + dataManager.convert(token['propertyManagement'] ?? 0), + dataManager.currencySymbol), + isNegative: true, + color: Colors.amber), _buildDetailRow( - context, S.of(context).propertyTaxes, Utils.formatCurrency(token['propertyTaxes'] ?? 0, dataManager.currencySymbol), - isNegative: true, color: Colors.red), + context, + S.of(context).realtPlatform, + Utils.formatCurrency( + dataManager.convert(token['realtPlatform'] ?? 0), + dataManager.currencySymbol), + isNegative: true, + color: Colors.orange), _buildDetailRow( context, - S.of(context).others, + S.of(context).insurance, + Utils.formatCurrency( + dataManager.convert(token['insurance'] ?? 0), + dataManager.currencySymbol), + isNegative: true, + color: Colors.purple), + _buildDetailRow( + context, + S.of(context).propertyTaxes, Utils.formatCurrency( - token['grossRentMonth'] - token['netRentMonth'] - totalRentCosts ?? 0, dataManager.currencySymbol), + dataManager.convert(token['propertyTaxes'] ?? 0), + dataManager.currencySymbol), + isNegative: true, + color: Colors.red), + _buildDetailRow( + context, + S.of(context).others, + Utils.formatCurrency(( + dataManager.convert(token['grossRentMonth'] - token['netRentMonth'] - totalRentCosts) ?? 0), + dataManager.currencySymbol), isNegative: true, color: Colors.grey), ], @@ -645,61 +804,107 @@ Future showTokenDetails(BuildContext context, Map token) children: [ // Property Maintenance Monthly Expanded( - flex: totalRentCosts != 0 ? ((token['propertyMaintenanceMonthly'] ?? 0) / totalRentCosts * 100).round() : 0, + flex: totalRentCosts != 0 + ? ((token['propertyMaintenanceMonthly'] ?? + 0) / + totalRentCosts * + 100) + .round() + : 0, child: Container( height: 10, - color: Colors.deepOrange, // Couleur pour 'propertyMaintenanceMonthly' + color: Colors + .deepOrange, // Couleur pour 'propertyMaintenanceMonthly' ), ), // Property Management Expanded( - flex: totalRentCosts != 0 ? ((token['propertyManagement'] ?? 0) / totalRentCosts * 100).round() : 0, + flex: totalRentCosts != 0 + ? ((token['propertyManagement'] ?? 0) / + totalRentCosts * + 100) + .round() + : 0, child: Container( height: 10, - color: Colors.amber, // Couleur pour 'propertyManagement' + color: Colors + .amber, // Couleur pour 'propertyManagement' ), ), // Realt Platform Expanded( - flex: totalRentCosts != 0 ? ((token['realtPlatform'] ?? 0) / totalRentCosts * 100).round() : 0, + flex: totalRentCosts != 0 + ? ((token['realtPlatform'] ?? 0) / + totalRentCosts * + 100) + .round() + : 0, child: Container( height: 10, - color: Colors.orange, // Couleur pour 'realtPlatform' + color: Colors + .orange, // Couleur pour 'realtPlatform' ), ), // Insurance Expanded( - flex: totalRentCosts != 0 ? ((token['insurance'] ?? 0) / totalRentCosts * 100).round() : 0, + flex: totalRentCosts != 0 + ? ((token['insurance'] ?? 0) / + totalRentCosts * + 100) + .round() + : 0, child: Container( height: 10, - color: Colors.purple, // Couleur pour 'insurance' + color: Colors + .purple, // Couleur pour 'insurance' ), ), // Property Taxes Expanded( - flex: totalRentCosts != 0 ? ((token['propertyTaxes'] ?? 0) / totalRentCosts * 100).round() : 0, + flex: totalRentCosts != 0 + ? ((token['propertyTaxes'] ?? 0) / + totalRentCosts * + 100) + .round() + : 0, child: Container( height: 10, - color: Colors.red, // Couleur pour 'propertyTaxes' + color: Colors + .red, // Couleur pour 'propertyTaxes' ), ), // Autres Expanded( flex: totalRentCosts != 0 - ? (((token['grossRentMonth'] ?? 0.0) - (token['netRentMonth'] ?? 0.0) - totalRentCosts) / totalRentCosts * 100).round() + ? (((token['grossRentMonth'] ?? 0.0) - + (token['netRentMonth'] ?? + 0.0) - + totalRentCosts) / + totalRentCosts * + 100) + .round() : 0, child: Container( height: 10, - color: Colors.grey, // Couleur pour les autres coûts + color: Colors + .grey, // Couleur pour les autres coûts ), ), ], ), - SizedBox(height: 2), // Espace sous la jauge pour séparation visuelle + SizedBox( + height: + 2), // Espace sous la jauge pour séparation visuelle - _buildDetailRow(context, S.of(context).netRentMonth, Utils.formatCurrency(token['netRentMonth'] ?? 0, dataManager.currencySymbol)), - SizedBox(height: 2), // Espace sous la jauge pour séparation visuelle + _buildDetailRow( + context, + S.of(context).netRentMonth, + Utils.formatCurrency(dataManager.convert(token['netRentMonth'] ?? 0), + dataManager.currencySymbol)), + SizedBox( + height: + 2), // Espace sous la jauge pour séparation visuelle Divider(), @@ -707,20 +912,25 @@ Future showTokenDetails(BuildContext context, Map token) context, S.of(context).annualPercentageYield, '${token['annualPercentageYield']?.toStringAsFixed(2) ?? S.of(context).notSpecified} %', - icon: Icons.percent, // Icône pour rendement annuel en pourcentage + icon: Icons + .percent, // Icône pour rendement annuel en pourcentage ), _buildDetailRow( context, S.of(context).totalRentReceived, - Utils.formatCurrency(token['totalRentReceived'] ?? 0, dataManager.currencySymbol), - icon: Icons.receipt_long, // Icône pour le total des loyers reçus + Utils.formatCurrency( + dataManager.convert(token['totalRentReceived'] ?? 0), + dataManager.currencySymbol), + icon: Icons + .receipt_long, // Icône pour le total des loyers reçus ), _buildDetailRow( context, S.of(context).roiPerProperties, "${(token['totalRentReceived'] / token['initialTotalValue'] * 100).toStringAsFixed(2)} %", icon: Icons.show_chart, - color: Colors.blue, // Icône pour le retour sur investissement (ROI) + color: Colors + .blue, // Icône pour le retour sur investissement (ROI) ), ], ), @@ -743,44 +953,68 @@ Future showTokenDetails(BuildContext context, Map token) // Filtrer et afficher les offres avec FutureBuilder et ListView.builder FutureBuilder>>( - future: _getFilteredOffers(dataManager, token['uuid']), // Future pour charger les offres filtrées + future: _getFilteredOffers( + dataManager, + token[ + 'uuid']), // Future pour charger les offres filtrées builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const Center(child: CircularProgressIndicator()); + if (snapshot.connectionState == + ConnectionState.waiting) { + return const Center( + child: CircularProgressIndicator()); } else if (snapshot.hasError) { - return Center(child: Text(S.of(context).error_occurred(snapshot.error.toString()))); - } else if (!snapshot.hasData || snapshot.data!.isEmpty) { - return Center(child: Text(S.of(context).no_market_offers_available)); + return Center( + child: Text(S.of(context).error_occurred( + snapshot.error.toString()))); + } else if (!snapshot.hasData || + snapshot.data!.isEmpty) { + return Center( + child: Text(S + .of(context) + .no_market_offers_available)); } else { final offers = snapshot.data!; return ListView.builder( shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), // Empêche le défilement de ListView + physics: + NeverScrollableScrollPhysics(), // Empêche le défilement de ListView itemCount: offers.length, itemBuilder: (context, index) { final offer = offers[index]; - final delta = (offer['token_to_buy'] == null) - ? ((offer['tokenValue'] / offer['tokenPrice'] - 1) * 100) // Formule inversée - : ((offer['tokenValue'] / offer['tokenPrice'] - 1) * 100); // Formule originale + final delta = + (offer['token_to_buy'] == null) + ? ((offer['tokenValue'] / + offer['tokenPrice'] - + 1) * + 100) // Formule inversée + : ((offer['tokenValue'] / + offer['tokenPrice'] - + 1) * + 100); // Formule originale return Card( color: Colors.grey.withOpacity(0.1), - margin: const EdgeInsets.symmetric(vertical: 8), + margin: const EdgeInsets.symmetric( + vertical: 8), elevation: 0, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), + borderRadius: + BorderRadius.circular(12), ), child: Padding( padding: const EdgeInsets.all(12.0), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, children: [ Row(children: [ Text( '${S.of(context).offer_id}: ${offer['id_offer']}', style: TextStyle( - fontSize: 14 + appState.getTextSizeOffset(), + fontSize: 14 + + appState + .getTextSizeOffset(), fontWeight: FontWeight.bold, ), ), @@ -790,14 +1024,20 @@ Future showTokenDetails(BuildContext context, Map token) clipBehavior: Clip.none, children: [ Text( - Utils.formatReadableDate(offer['creationDate']), + Utils.formatReadableDate( + offer[ + 'creationDate']), style: TextStyle( - fontSize: 12 + appState.getTextSizeOffset(), + fontSize: 12 + + appState + .getTextSizeOffset(), color: Colors.grey[600], ), ), - if (offer['token_to_pay'] == '0x0ca4f5554dd9da6217d62d8df2816c82bba4157b' || - offer['token_to_pay'] == '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d') + if (offer['token_to_pay'] == + '0x0ca4f5554dd9da6217d62d8df2816c82bba4157b' || + offer['token_to_pay'] == + '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d') Positioned( bottom: -30, child: Image.asset( @@ -806,8 +1046,11 @@ Future showTokenDetails(BuildContext context, Map token) height: 28, ), ) - else if (offer['token_to_pay'] == '0xddafbb505ad214d7b80b1f830fccc89b60fb7a83' || - offer['token_to_pay'] == '0xed56f76e9cbc6a64b821e9c016eafbd3db5436d1') + else if (offer[ + 'token_to_pay'] == + '0xddafbb505ad214d7b80b1f830fccc89b60fb7a83' || + offer['token_to_pay'] == + '0xed56f76e9cbc6a64b821e9c016eafbd3db5436d1') Positioned( bottom: -30, child: Image.asset( @@ -823,14 +1066,18 @@ Future showTokenDetails(BuildContext context, Map token) Text( '${S.of(context).token_amount}: ${offer['tokenAmount'].toStringAsFixed(3)}', style: TextStyle( - fontSize: 12 + appState.getTextSizeOffset(), + fontSize: 12 + + appState + .getTextSizeOffset(), color: Colors.grey[600], ), ), Text( - '${S.of(context).token_value}: ${Utils.formatCurrency(offer['tokenValue'], dataManager.currencySymbol)}', + '${S.of(context).token_value}: ${Utils.formatCurrency(dataManager.convert(offer['tokenValue']), dataManager.currencySymbol)}', style: TextStyle( - fontSize: 12 + appState.getTextSizeOffset(), + fontSize: 12 + + appState + .getTextSizeOffset(), color: Colors.grey[600], ), ), @@ -840,18 +1087,30 @@ Future showTokenDetails(BuildContext context, Map token) Text( '${S.of(context).delta_price}: ', // Partie fixe, sans changement de couleur style: TextStyle( - fontSize: 12 + appState.getTextSizeOffset(), + fontSize: 12 + + appState + .getTextSizeOffset(), color: Colors.grey[600], ), ), Text( '${delta.toStringAsFixed(2)}%', // Partie variable en couleur style: TextStyle( - fontSize: 12 + appState.getTextSizeOffset(), - color: offer['token_to_buy'] == null - ? (delta < 0 ? Colors.green : Colors.red) - : (delta < 0 ? Colors.red : Colors.green), - fontWeight: FontWeight.bold, + fontSize: 12 + + appState + .getTextSizeOffset(), + color: + offer['token_to_buy'] == + null + ? (delta < 0 + ? Colors.green + : Colors.red) + : (delta < 0 + ? Colors.red + : Colors + .green), + fontWeight: + FontWeight.bold, ), ), ], @@ -860,18 +1119,34 @@ Future showTokenDetails(BuildContext context, Map token) Center( child: ElevatedButton( onPressed: () { - Utils.launchURL('https://yambyofferid.netlify.app/?offerId=${offer['id_offer']}'); + Utils.launchURL( + 'https://yambyofferid.netlify.app/?offerId=${offer['id_offer']}'); }, - style: ElevatedButton.styleFrom( - foregroundColor: Colors.white, - backgroundColor: offer['token_to_buy'] == null + style: + ElevatedButton.styleFrom( + foregroundColor: + Colors.white, + backgroundColor: offer[ + 'token_to_buy'] == + null ? Colors.blue - : Colors.green, // Rouge pour "acheter" et bleu pour "vendre" - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + : Colors + .green, // Rouge pour "acheter" et bleu pour "vendre" + padding: const EdgeInsets + .symmetric( + horizontal: 8, + vertical: 4), minimumSize: Size(80, 30), ), child: Text( - offer['token_to_buy'] == null ? S.of(context).buy_token : S.of(context).sell_token, + offer['token_to_buy'] == + null + ? S + .of(context) + .buy_token + : S + .of(context) + .sell_token, ), ), ), @@ -913,12 +1188,15 @@ Future showTokenDetails(BuildContext context, Map token) width: 18, // Largeur de l'image height: 18, // Hauteur de l'image ), - const SizedBox(width: 8), // Espacement entre l'image et le texte + const SizedBox( + width: + 8), // Espacement entre l'image et le texte Text( S.of(context).ethereumContract, style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 13 + appState.getTextSizeOffset(), + fontSize: + 13 + appState.getTextSizeOffset(), ), ), ], @@ -926,12 +1204,17 @@ Future showTokenDetails(BuildContext context, Map token) IconButton( icon: const Icon(Icons.link), onPressed: () { - final ethereumAddress = token['ethereumContract'] ?? ''; + final ethereumAddress = + token['ethereumContract'] ?? ''; if (ethereumAddress.isNotEmpty) { - Utils.launchURL('https://etherscan.io/address/$ethereumAddress'); + Utils.launchURL( + 'https://etherscan.io/address/$ethereumAddress'); } else { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(S.of(context).notSpecified)), + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: Text( + S.of(context).notSpecified)), ); } }, @@ -940,8 +1223,10 @@ Future showTokenDetails(BuildContext context, Map token) ), const SizedBox(height: 4), Text( - token['ethereumContract'] ?? S.of(context).notSpecified, - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + token['ethereumContract'] ?? + S.of(context).notSpecified, + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset()), ), const SizedBox(height: 10), @@ -957,12 +1242,15 @@ Future showTokenDetails(BuildContext context, Map token) width: 18, // Largeur de l'image height: 18, // Hauteur de l'image ), - const SizedBox(width: 8), // Espacement entre l'image et le texte + const SizedBox( + width: + 8), // Espacement entre l'image et le texte Text( S.of(context).gnosisContract, style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 13 + appState.getTextSizeOffset(), + fontSize: + 13 + appState.getTextSizeOffset(), ), ), ], @@ -970,12 +1258,17 @@ Future showTokenDetails(BuildContext context, Map token) IconButton( icon: const Icon(Icons.link), onPressed: () { - final gnosisAddress = token['gnosisContract'] ?? ''; + final gnosisAddress = + token['gnosisContract'] ?? ''; if (gnosisAddress.isNotEmpty) { - Utils.launchURL('https://gnosisscan.io/address/$gnosisAddress'); + Utils.launchURL( + 'https://gnosisscan.io/address/$gnosisAddress'); } else { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(S.of(context).notSpecified)), + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: Text( + S.of(context).notSpecified)), ); } }, @@ -984,28 +1277,38 @@ Future showTokenDetails(BuildContext context, Map token) ), const SizedBox(height: 4), Text( - token['gnosisContract'] ?? S.of(context).notSpecified, - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + token['gnosisContract'] ?? + S.of(context).notSpecified, + style: TextStyle( + fontSize: 13 + appState.getTextSizeOffset()), ), Divider(), // Réduisez la hauteur pour minimiser l’espace Column( - crossAxisAlignment: CrossAxisAlignment.start, // Aligne le texte et l'icône à gauche + crossAxisAlignment: CrossAxisAlignment + .start, // Aligne le texte et l'icône à gauche children: [ Row( children: [ Text( S.of(context).manualEdit, style: TextStyle( - fontSize: 12, // Taille de police ajustée + fontSize: + 12, // Taille de police ajustée color: Colors.grey, ), ), const SizedBox(width: 4), IconButton( - padding: EdgeInsets.zero, // Retire l'espacement interne de l'icône - icon: Icon(Icons.edit, color: Colors.grey, size: 18 + appState.getTextSizeOffset()), // Icône crayon plus petite et grise + padding: EdgeInsets + .zero, // Retire l'espacement interne de l'icône + icon: Icon(Icons.edit, + color: Colors.grey, + size: 18 + + appState + .getTextSizeOffset()), // Icône crayon plus petite et grise onPressed: () { - showTextField.value = !showTextField.value; // Bascule la visibilité + showTextField.value = !showTextField + .value; // Bascule la visibilité }, ), ], @@ -1018,46 +1321,83 @@ Future showTokenDetails(BuildContext context, Map token) return Visibility( visible: isVisible, child: Padding( - padding: const EdgeInsets.only(top: 8.0), // Espace entre le texte/icone et le bloc + padding: const EdgeInsets.only( + top: + 8.0), // Espace entre le texte/icone et le bloc child: Row( children: [ Expanded( child: TextFormField( controller: initPriceController, - keyboardType: TextInputType.text, + keyboardType: + TextInputType.text, decoration: InputDecoration( - labelText: S.of(context).initialPrice, + labelText: S + .of(context) + .initialPrice, border: OutlineInputBorder(), - contentPadding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 8.0), // Réduire le padding interne - isDense: true, // Compacte le champ + contentPadding: + EdgeInsets.symmetric( + vertical: 8.0, + horizontal: + 8.0), // Réduire le padding interne + isDense: + true, // Compacte le champ ), ), ), IconButton( - icon: Icon(Icons.check, color: Colors.green), + icon: Icon(Icons.check, + color: Colors.green), onPressed: () { - final newPrice = double.tryParse(initPriceController.text); + final newPrice = + double.tryParse( + initPriceController + .text); if (newPrice != null) { - Provider.of(context).setCustomInitPrice(token['uuid'], newPrice); - showTextField.value = false; // Masque le champ et les icônes - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(S.of(context).initialPriceUpdated)), + Provider.of( + context) + .setCustomInitPrice( + token['uuid'], + newPrice); + showTextField.value = + false; // Masque le champ et les icônes + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: Text(S + .of(context) + .initialPriceUpdated)), ); } else { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(S.of(context).enterValidNumber)), + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: Text(S + .of(context) + .enterValidNumber)), ); } }, ), IconButton( - icon: Icon(Icons.delete, color: Colors.red), + icon: Icon(Icons.delete, + color: Colors.red), onPressed: () { - Provider.of(context).removeCustomInitPrice(token['uuid']); - initPriceController.clear(); // Efface le champ de texte - showTextField.value = false; // Masque le champ et les icônes - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(S.of(context).initialPriceRemoved)), + Provider.of( + context) + .removeCustomInitPrice( + token['uuid']); + initPriceController + .clear(); // Efface le champ de texte + showTextField.value = + false; // Masque le champ et les icônes + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: Text(S + .of(context) + .initialPriceRemoved)), ); }, ), @@ -1086,34 +1426,48 @@ Future showTokenDetails(BuildContext context, Map token) Row( children: [ Icon( - Icons.assessment, // Choisissez une icône appropriée + Icons + .assessment, // Choisissez une icône appropriée size: 18, // Taille de l'icône - color: Colors.blueGrey, // Couleur basée sur le thème actuel + color: Colors + .blueGrey, // Couleur basée sur le thème actuel ), - const SizedBox(width: 8), // Espacement entre l'icône et le texte + const SizedBox( + width: + 8), // Espacement entre l'icône et le texte Text( - S.of(context).roiPerProperties, // Titre de la jauge + S + .of(context) + .roiPerProperties, // Titre de la jauge style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 15 + appState.getTextSizeOffset(), + fontSize: + 15 + appState.getTextSizeOffset(), ), ), ], ), - const SizedBox(width: 8), // Espace entre le texte et l'icône + const SizedBox( + width: + 8), // Espace entre le texte et l'icône GestureDetector( onTap: () { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( - title: Text(S.of(context).roiPerProperties), // Titre du popup - content: Text(S.of(context).roiAlertInfo), // Texte du popup + title: Text(S + .of(context) + .roiPerProperties), // Titre du popup + content: Text(S + .of(context) + .roiAlertInfo), // Texte du popup actions: [ TextButton( onPressed: () { - Navigator.of(context).pop(); // Fermer le popup + Navigator.of(context) + .pop(); // Fermer le popup }, child: Text('OK'), ), @@ -1125,7 +1479,9 @@ Future showTokenDetails(BuildContext context, Map token) child: Icon( Icons.help_outline, // Icône "?" color: Colors.grey, - size: 20 + appState.getTextSizeOffset(), // Ajustez la taille en fonction du texte + size: 20 + + appState + .getTextSizeOffset(), // Ajustez la taille en fonction du texte ), ), ], @@ -1133,26 +1489,42 @@ Future showTokenDetails(BuildContext context, Map token) const SizedBox(height: 4), _buildGaugeForROI( - token['totalRentReceived'] / token['initialTotalValue'] * 100, // Calcul du ROI + token['totalRentReceived'] / + token['initialTotalValue'] * + 100, // Calcul du ROI context, ), - const SizedBox(height: 8), // Espacement entre l'icône et le texte + const SizedBox( + height: + 8), // Espacement entre l'icône et le texte // Graphique du rendement (Yield) Row( children: [ - Icon(Icons.trending_up, size: 18, color: Colors.blueGrey), // Icône devant le texte - const SizedBox(width: 8), // Espacement entre l'icône et le texte + Icon(Icons.trending_up, + size: 18, + color: Colors + .blueGrey), // Icône devant le texte + const SizedBox( + width: + 8), // Espacement entre l'icône et le texte Text( - S.of(context).yieldEvolution, // Utilisation de la traduction + S + .of(context) + .yieldEvolution, // Utilisation de la traduction style: TextStyle( fontWeight: FontWeight.bold, - fontSize: 15 + appState.getTextSizeOffset(), // Réduction de la taille du texte pour Android + fontSize: 15 + + appState + .getTextSizeOffset(), // Réduction de la taille du texte pour Android ), ), ], ), const SizedBox(height: 10), - _buildYieldChartOrMessage(context, token['historic']?['yields'] ?? [], token['historic']?['init_yield']), + _buildYieldChartOrMessage( + context, + token['historic']?['yields'] ?? [], + token['historic']?['init_yield']), const SizedBox(height: 20), @@ -1160,13 +1532,19 @@ Future showTokenDetails(BuildContext context, Map token) Row( children: [ Icon( - Icons.attach_money, // Icône pour représenter l'évolution des prix + Icons + .attach_money, // Icône pour représenter l'évolution des prix size: 18, // Taille de l'icône - color: Colors.blueGrey, // Couleur en fonction du thème + color: Colors + .blueGrey, // Couleur en fonction du thème ), - const SizedBox(width: 8), // Espacement entre l'icône et le texte + const SizedBox( + width: + 8), // Espacement entre l'icône et le texte Text( - S.of(context).priceEvolution, // Texte avec traduction + S + .of(context) + .priceEvolution, // Texte avec traduction style: TextStyle( fontWeight: FontWeight.bold, fontSize: 15 + appState.getTextSizeOffset(), @@ -1176,7 +1554,10 @@ Future showTokenDetails(BuildContext context, Map token) ), const SizedBox(height: 10), - _buildPriceChartOrMessage(context, token['historic']?['prices'] ?? [], token['initPrice']), + _buildPriceChartOrMessage( + context, + token['historic']?['prices'] ?? [], + token['initPrice']), ], ), ), @@ -1189,38 +1570,50 @@ Future showTokenDetails(BuildContext context, Map token) // Bouton pour voir sur RealT Center( child: Padding( - padding: const EdgeInsets.all(8.0), // Ajoute un padding de 16 pixels autour des boutons + padding: const EdgeInsets.all( + 8.0), // Ajoute un padding de 16 pixels autour des boutons child: Row( - mainAxisAlignment: MainAxisAlignment.center, // Centre les boutons + mainAxisAlignment: + MainAxisAlignment.center, // Centre les boutons children: [ // Bouton pour voir sur RealT SizedBox( height: 36, child: ElevatedButton( - onPressed: () => Utils.launchURL(token['marketplaceLink']), + onPressed: () => + Utils.launchURL(token['marketplaceLink']), style: ElevatedButton.styleFrom( foregroundColor: Colors.white, - backgroundColor: Colors.blue, // Bouton bleu pour RealT - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), + backgroundColor: + Colors.blue, // Bouton bleu pour RealT + padding: const EdgeInsets.symmetric( + vertical: 8, horizontal: 8), textStyle: TextStyle( - fontSize: 13 + appState.getTextSizeOffset(), // Rendre TextStyle non const + fontSize: 13 + + appState + .getTextSizeOffset(), // Rendre TextStyle non const ), ), child: Text(S.of(context).viewOnRealT), ), ), - const SizedBox(width: 10), // Espacement entre les deux boutons + const SizedBox( + width: 10), // Espacement entre les deux boutons // Bouton pour voir sur la carte SizedBox( height: 36, child: ElevatedButton( - onPressed: () => _openMapModal(context, token['lat'], token['lng']), + onPressed: () => _openMapModal( + context, token['lat'], token['lng']), style: ElevatedButton.styleFrom( foregroundColor: Colors.white, - backgroundColor: Colors.green, // Bouton vert pour la carte - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), - textStyle: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), + backgroundColor: + Colors.green, // Bouton vert pour la carte + padding: const EdgeInsets.symmetric( + vertical: 8, horizontal: 8), + textStyle: TextStyle( + fontSize: 13 + appState.getTextSizeOffset()), ), child: Text(S.of(context).viewOnMap), ), @@ -1254,14 +1647,17 @@ Widget _buildGaugeForROI(double roiValue, BuildContext context) { height: 15, width: maxWidth, // Largeur maximale disponible decoration: BoxDecoration( - color: const Color.fromARGB(255, 78, 78, 78).withOpacity(0.3), // Couleur du fond grisé + color: const Color.fromARGB(255, 78, 78, 78) + .withOpacity(0.3), // Couleur du fond grisé borderRadius: BorderRadius.circular(5), // Bordure arrondie ), ), // Barre bleue représentant le ROI Container( height: 15, - width: roiValue.clamp(0, 100) / 100 * maxWidth, // Largeur de la barre bleue en fonction du ROI + width: roiValue.clamp(0, 100) / + 100 * + maxWidth, // Largeur de la barre bleue en fonction du ROI decoration: BoxDecoration( color: Colors.blue, // Couleur de la barre borderRadius: BorderRadius.circular(5), // Bordure arrondie @@ -1275,7 +1671,8 @@ Widget _buildGaugeForROI(double roiValue, BuildContext context) { style: TextStyle( fontSize: 14, fontWeight: FontWeight.bold, - color: Colors.white, // Couleur du texte pour contraster avec la jauge + color: Colors + .white, // Couleur du texte pour contraster avec la jauge ), ), ), @@ -1290,14 +1687,20 @@ Widget _buildGaugeForROI(double roiValue, BuildContext context) { } // Méthode pour construire les lignes de détails -Widget _buildDetailRow(BuildContext context, String label, String value, {IconData? icon, bool isNegative = false, Color? color}) { +Widget _buildDetailRow(BuildContext context, String label, String value, + {IconData? icon, bool isNegative = false, Color? color}) { final appState = Provider.of(context, listen: false); // Ajout du signe "-" et de la couleur rouge si isNegative est true final displayValue = isNegative ? '-$value' : value; final valueStyle = TextStyle( fontSize: 13 + appState.getTextSizeOffset(), - color: isNegative ? Colors.red : Theme.of(context).textTheme.bodyMedium?.color, // couleur rouge si isNegative + color: isNegative + ? Colors.red + : Theme.of(context) + .textTheme + .bodyMedium + ?.color, // couleur rouge si isNegative ); return Padding( @@ -1318,7 +1721,10 @@ Widget _buildDetailRow(BuildContext context, String label, String value, {IconDa color: color ?? Colors.red, ), ), - SizedBox(width: icon != null || isNegative ? 8 : 0), // Espacement conditionnel entre l'icône et le texte + SizedBox( + width: icon != null || isNegative + ? 8 + : 0), // Espacement conditionnel entre l'icône et le texte Text( label, style: TextStyle( @@ -1335,19 +1741,24 @@ Widget _buildDetailRow(BuildContext context, String label, String value, {IconDa } // Méthode pour afficher soit le graphique du yield, soit un message, avec % évolution -Widget _buildYieldChartOrMessage(BuildContext context, List yields, double? initYield) { +Widget _buildYieldChartOrMessage( + BuildContext context, List yields, double? initYield) { final appState = Provider.of(context, listen: false); if (yields.length <= 1) { // Afficher le message si une seule donnée est disponible return Text( "${S.of(context).noYieldEvolution} ${yields.isNotEmpty ? yields.first['yield'].toStringAsFixed(2) : S.of(context).notSpecified} %", - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), // Réduction pour Android + style: TextStyle( + fontSize: + 13 + appState.getTextSizeOffset()), // Réduction pour Android ); } else { // Calculer l'évolution en pourcentage double lastYield = yields.last['yield']?.toDouble() ?? 0; - double percentageChange = ((lastYield - (initYield ?? lastYield)) / (initYield ?? lastYield)) * 100; + double percentageChange = + ((lastYield - (initYield ?? lastYield)) / (initYield ?? lastYield)) * + 100; // Afficher le graphique et le % d'évolution return Column( @@ -1357,17 +1768,22 @@ Widget _buildYieldChartOrMessage(BuildContext context, List yields, dou const SizedBox(height: 10), RichText( text: TextSpan( - text: S.of(context).yieldEvolutionPercentage, // Texte avec la couleur par défaut + text: S + .of(context) + .yieldEvolutionPercentage, // Texte avec la couleur par défaut style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color, ), children: [ TextSpan( - text: " ${percentageChange.toStringAsFixed(2)} %", // Affiche la valeur avec une couleur conditionnelle + text: + " ${percentageChange.toStringAsFixed(2)} %", // Affiche la valeur avec une couleur conditionnelle style: TextStyle( fontWeight: FontWeight.bold, - color: percentageChange < 0 ? Colors.red : Colors.green, // Rouge si négatif, vert sinon + color: percentageChange < 0 + ? Colors.red + : Colors.green, // Rouge si négatif, vert sinon ), ), ], @@ -1379,19 +1795,24 @@ Widget _buildYieldChartOrMessage(BuildContext context, List yields, dou } // Méthode pour afficher soit le graphique des prix, soit un message, avec % évolution -Widget _buildPriceChartOrMessage(BuildContext context, List prices, double? initPrice) { +Widget _buildPriceChartOrMessage( + BuildContext context, List prices, double? initPrice) { final appState = Provider.of(context, listen: false); if (prices.length <= 1) { // Afficher le message si une seule donnée est disponible return Text( "${S.of(context).noPriceEvolution} ${prices.isNotEmpty ? prices.first['price'].toStringAsFixed(2) : S.of(context).notSpecified} \$", - style: TextStyle(fontSize: 13 + appState.getTextSizeOffset()), // Réduction pour Android + style: TextStyle( + fontSize: + 13 + appState.getTextSizeOffset()), // Réduction pour Android ); } else { // Calculer l'évolution en pourcentage double lastPrice = prices.last['price']?.toDouble() ?? 0; - double percentageChange = ((lastPrice - (initPrice ?? lastPrice)) / (initPrice ?? lastPrice)) * 100; + double percentageChange = + ((lastPrice - (initPrice ?? lastPrice)) / (initPrice ?? lastPrice)) * + 100; // Afficher le graphique et le % d'évolution return Column( @@ -1401,17 +1822,22 @@ Widget _buildPriceChartOrMessage(BuildContext context, List prices, dou const SizedBox(height: 10), RichText( text: TextSpan( - text: S.of(context).priceEvolutionPercentage, // Texte avec la couleur par défaut + text: S + .of(context) + .priceEvolutionPercentage, // Texte avec la couleur par défaut style: TextStyle( fontSize: 13 + appState.getTextSizeOffset(), color: Theme.of(context).textTheme.bodyMedium?.color, ), children: [ TextSpan( - text: " ${percentageChange.toStringAsFixed(2)} %", // Affiche la valeur avec une couleur conditionnelle + text: + " ${percentageChange.toStringAsFixed(2)} %", // Affiche la valeur avec une couleur conditionnelle style: TextStyle( fontWeight: FontWeight.bold, - color: percentageChange < 0 ? Colors.red : Colors.green, // Rouge si négatif, vert sinon + color: percentageChange < 0 + ? Colors.red + : Colors.green, // Rouge si négatif, vert sinon ), ), ], @@ -1433,19 +1859,27 @@ Widget _buildYieldChart(BuildContext context, List yields) { if (yields[i]['timsync'] != null && yields[i]['timsync'] is String) { DateTime date = DateTime.parse(yields[i]['timsync']); double x = i.toDouble(); // Utiliser un indice pour l'axe X - double y = yields[i]['yield'] != null ? double.tryParse(yields[i]['yield'].toString()) ?? 0 : 0; - y = double.parse(y.toStringAsFixed(2)); // Limiter la valeur de `y` à 2 décimales + double y = yields[i]['yield'] != null + ? double.tryParse(yields[i]['yield'].toString()) ?? 0 + : 0; + y = double.parse( + y.toStringAsFixed(2)); // Limiter la valeur de `y` à 2 décimales spots.add(FlSpot(x, y)); - dateLabels.add(DateFormat('MM/yyyy').format(date)); // Ajouter la date formatée en mois/année + dateLabels.add(DateFormat('MM/yyyy') + .format(date)); // Ajouter la date formatée en mois/année } } // Calcul des marges double minXValue = spots.isNotEmpty ? spots.first.x : 0; double maxXValue = spots.isNotEmpty ? spots.last.x : 0; - double minYValue = spots.isNotEmpty ? spots.map((spot) => spot.y).reduce((a, b) => a < b ? a : b) : 0; - double maxYValue = spots.isNotEmpty ? spots.map((spot) => spot.y).reduce((a, b) => a > b ? a : b) : 0; + double minYValue = spots.isNotEmpty + ? spots.map((spot) => spot.y).reduce((a, b) => a < b ? a : b) + : 0; + double maxYValue = spots.isNotEmpty + ? spots.map((spot) => spot.y).reduce((a, b) => a > b ? a : b) + : 0; // Ajouter des marges autour des valeurs min et max const double marginX = 0.2; // Marge pour l'axe X @@ -1459,7 +1893,8 @@ Widget _buildYieldChart(BuildContext context, List yields) { borderData: FlBorderData(show: false), titlesData: FlTitlesData( topTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), // Désactiver l'axe du haut + sideTitles: + SideTitles(showTitles: false), // Désactiver l'axe du haut ), bottomTitles: AxisTitles( sideTitles: SideTitles( @@ -1469,7 +1904,9 @@ Widget _buildYieldChart(BuildContext context, List yields) { return Text( dateLabels[value.toInt()], style: TextStyle( - fontSize: 10 + appState.getTextSizeOffset(), // Réduction de la taille pour Android + fontSize: 10 + + appState + .getTextSizeOffset(), // Réduction de la taille pour Android ), ); } @@ -1493,7 +1930,8 @@ Widget _buildYieldChart(BuildContext context, List yields) { ), ), rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), // Désactiver l'axe de droite + sideTitles: + SideTitles(showTitles: false), // Désactiver l'axe de droite ), ), minX: minXValue - marginX, @@ -1527,14 +1965,19 @@ Widget _buildPriceChart(BuildContext context, List prices) { double y = prices[i]['price']?.toDouble() ?? 0; spots.add(FlSpot(x, y)); - dateLabels.add(DateFormat('MM/yyyy').format(date)); // Ajouter la date formatée en mois/année + dateLabels.add(DateFormat('MM/yyyy') + .format(date)); // Ajouter la date formatée en mois/année } // Calcul des marges double minXValue = spots.isNotEmpty ? spots.first.x : 0; double maxXValue = spots.isNotEmpty ? spots.last.x : 0; - double minYValue = spots.isNotEmpty ? spots.map((spot) => spot.y).reduce((a, b) => a < b ? a : b) : 0; - double maxYValue = spots.isNotEmpty ? spots.map((spot) => spot.y).reduce((a, b) => a > b ? a : b) : 0; + double minYValue = spots.isNotEmpty + ? spots.map((spot) => spot.y).reduce((a, b) => a < b ? a : b) + : 0; + double maxYValue = spots.isNotEmpty + ? spots.map((spot) => spot.y).reduce((a, b) => a > b ? a : b) + : 0; // Ajouter des marges autour des valeurs min et max const double marginX = 0.1; // Marge pour l'axe X @@ -1548,7 +1991,8 @@ Widget _buildPriceChart(BuildContext context, List prices) { borderData: FlBorderData(show: false), titlesData: FlTitlesData( topTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), // Désactiver l'axe du haut + sideTitles: + SideTitles(showTitles: false), // Désactiver l'axe du haut ), bottomTitles: AxisTitles( sideTitles: SideTitles( @@ -1575,14 +2019,17 @@ Widget _buildPriceChart(BuildContext context, List prices) { return Text( value.toStringAsFixed(2), style: TextStyle( - fontSize: 10 + appState.getTextSizeOffset(), // Réduction de la taille pour Android + fontSize: 10 + + appState + .getTextSizeOffset(), // Réduction de la taille pour Android ), ); }, ), ), rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), // Désactiver l'axe de droite + sideTitles: + SideTitles(showTitles: false), // Désactiver l'axe de droite ), ), minX: minXValue - marginX, diff --git a/lib/settings/theme.dart b/lib/settings/theme.dart index 4b564ec..48c689d 100644 --- a/lib/settings/theme.dart +++ b/lib/settings/theme.dart @@ -5,6 +5,7 @@ final ThemeData lightTheme = ThemeData( scaffoldBackgroundColor: Colors.grey[100], cardColor: Colors.white, dialogBackgroundColor: Colors.white, + secondaryHeaderColor:Colors.grey[300] , textTheme: TextTheme( bodyLarge: TextStyle(color: Colors.black), // Couleur principale bodyMedium: TextStyle(color: Colors.grey[750]), // Couleur secondaire pour les textes @@ -29,6 +30,8 @@ final ThemeData darkTheme = ThemeData( scaffoldBackgroundColor: Colors.black, cardColor: Colors.grey[900], dialogBackgroundColor: Colors.black, + secondaryHeaderColor:Color.fromARGB(255, 78, 78, 78).withOpacity(0.4) , + textTheme: TextTheme( bodyLarge: TextStyle(color: Colors.white), // Couleur principale bodyMedium: TextStyle(color: Colors.grey[400]), // Couleur secondaire pour les textes diff --git a/pubspec.yaml b/pubspec.yaml index c3d06bb..37c00f5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ description: "A community app for RealT" # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 1.4.1+34 +version: 1.5.0+35 environment: sdk: ^3.5.3