2025-05-12 19:33:14 +02:00
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
|
|
|
import 'package:cake_wallet/generated/i18n.dart';
|
|
|
|
import 'package:cake_wallet/src/screens/trade_details/trade_details_list_card.dart';
|
|
|
|
import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item.dart';
|
2025-06-27 15:38:09 +02:00
|
|
|
import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart';
|
2025-05-12 19:33:14 +02:00
|
|
|
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
|
2025-06-27 15:38:09 +02:00
|
|
|
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_list_item.dart';
|
New themes (#2239)
* Add theme base v2
* Initial new theme base files
* Typos
* Fixes
* Update theme files
* feat: Migrate to Material 3 Theming
Foundation, Theme Data Refactor, and First Extension Cleanup Batch.
This commit completes the first major phase of migrating to Material 3 theming by setting up the foundations for material 3 integration and begins the initial migration, removing custom theme extensions, updating theme data, and refactoring all relevant widget and page theming to use Material 3’s built-in color and typography tokens.
These changes:
- Lays the groundwork for Material 3 theming by restructuring the app’s theme configuration to use Material 3’s ColorScheme and TextTheme as the primary sources of color and typography throughout the app.
- Refactors the core theme config files by removing legacy custom color roles ensuring all color definitions now map directly to Material 3’s role.
- Begins the first batch migration of custom theme extensions (InfoTheme, PlaceholderTheme, KeyboardTheme, PinCodeTheme) and updates all affected widgets and pages to use Material 3 color and typography tokens instead of the custom properties.
- Cleans up the codebase by deleting the files of the initial set of migrated extensions and eliminating all related imports and usages.
* feat: Migrate to Material 3 Theming.
This change:
- Updates the themes README.md file to reflect the current structure and give more information based on the first major phase that was completed.
* feat: Migrate to Material 3 Theming
Deleting previous theme extensions
* feat: Migrate to Material 3 Theming
Another batch of migrations from existing extensions
* feat: Migration to Material 3 Theming
Third Migration batch for theme extensions
* fwat: Migration to Material 3 Theming
Final Migration batch for previous theme extensions
* Update onboarding hero
* Update button radius
* Add surfaceContainer to light theme
* feat(themes): Migrate to Material 3 Theming
This change:
- Adds new set of hero images
- Modifies the core structure for the themes
- Add missing color tokens to the theme classes
- Adds a CustomThemeColor class for custom color tokens
- Modifies the themelist to have a fall back for previous theme implementation
- Adds localization for some texts
- Modifies the flow for loading the theme on app start
- Add a WidgetsBindingObserver that listens for changes in the device theme and updates the app theme when there is a change
- Registers the themeStore as a Singleton for codebase wide use
* feat(themes): Migrate to Material 3 theming
This change:
- Migrates UI flows across the app to the new themes
- Confirms styling and typography of components across the app uses the new themes
- Remove instances of Palette use
- Switch TextStyles across the app to use theme text styles
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adjusts bottomsheets styling and removes duplicate close button
- Removes more themedata extensions from the previous implementation
* - Remove outlines from cards and dock
- Update menu colors
- Update padding/divider size for cards
* - Update PIN screen
- Fix navigation dock shadow
- Update wallet screen colors
* Update border radius --skip-ci
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adds gradient backgrounds to the dashbaord and balance cards.
- Migrates the input fields across the app to BaseTextFormFields.
- Removes dependence of input fields on individual styling, focusing instead on using theme defined InputDecoration styling with adjustments on individual components where needed.
- Applies new theme styling to BaseTextFormField, AddressTextField and CurrencyAmountTextField.
* - Switch some hero images to PNG
- Fix nagivation_dock shadow
- Minor fixes
* feat: Add fallback to previous underline styling in central widgets
This change:
- Adds a fallback to CurrencyAmountTextField, AddressTextField, and BaseTextFormField, allowing them use the previous theme styling.
- Adds localization for new texts
* feat(themes): Update warning box colors for dark and light themes
* feat(themes): Relaod themes when user restores from backup, ensuring the user previous theme preference is used.
* feat(themes): Handle themes logic during restore from backup
This change:
- Refactors theme loading logic to handle backup restore edgecase
- Refreshes the theme based on the user saved preference during restore from backup flow
* Fix card gradients and spacing
* Fix even more radiuses
Test new icons for navigation_dock.dart
* Update onboarding flow backgrounds
Fix swap icon clipping
Fix some text colors
Add more hero images
* Fix incorrect color for light theme
* Fix more hero images and cleanup
* Update text field icons
Fix info box CTA colors
Fix sync indicator colors
* Update toggle colors
Update dark theme colors (minor)
Update crypto_balance_widget.dart icon
* Update page transitions in router.dart
Fix some colors
* feat(themes): Display label by default for filled textfields
* feat(themes): Refactor theme handling across various components
This change:
- Fixes issue with themeMode resetting to system mode when app is restarted causing a UI glitch
- Updates theme checks from `currentTheme.type == ThemeType.dark` to `currentTheme.isDark` for consistency
- Adjusts UI components to use the theme directly from the themeStore
* feat(themes): Add animating tagline to the create pin welcome screen
* Revert text fields label temporarily, fix a couple colors, and cleanup some images
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
2025-05-25 20:11:45 +00:00
|
|
|
import 'package:cake_wallet/themes/core/theme_store.dart';
|
2025-05-12 19:33:14 +02:00
|
|
|
import 'package:cake_wallet/utils/date_formatter.dart';
|
|
|
|
import 'package:cw_core/payjoin_session.dart';
|
|
|
|
import 'package:cw_core/transaction_info.dart';
|
|
|
|
import 'package:flutter/widgets.dart';
|
|
|
|
import 'package:hive_flutter/hive_flutter.dart';
|
|
|
|
import 'package:mobx/mobx.dart';
|
2025-06-27 15:38:09 +02:00
|
|
|
import 'package:url_launcher/url_launcher.dart';
|
2025-05-12 19:33:14 +02:00
|
|
|
|
|
|
|
part 'payjoin_details_view_model.g.dart';
|
|
|
|
|
|
|
|
class PayjoinDetailsViewModel = PayjoinDetailsViewModelBase
|
|
|
|
with _$PayjoinDetailsViewModel;
|
|
|
|
|
|
|
|
abstract class PayjoinDetailsViewModelBase with Store {
|
|
|
|
PayjoinDetailsViewModelBase(
|
|
|
|
this.payjoinSessionId,
|
|
|
|
this.transactionInfo, {
|
|
|
|
required this.payjoinSessionSource,
|
New themes (#2239)
* Add theme base v2
* Initial new theme base files
* Typos
* Fixes
* Update theme files
* feat: Migrate to Material 3 Theming
Foundation, Theme Data Refactor, and First Extension Cleanup Batch.
This commit completes the first major phase of migrating to Material 3 theming by setting up the foundations for material 3 integration and begins the initial migration, removing custom theme extensions, updating theme data, and refactoring all relevant widget and page theming to use Material 3’s built-in color and typography tokens.
These changes:
- Lays the groundwork for Material 3 theming by restructuring the app’s theme configuration to use Material 3’s ColorScheme and TextTheme as the primary sources of color and typography throughout the app.
- Refactors the core theme config files by removing legacy custom color roles ensuring all color definitions now map directly to Material 3’s role.
- Begins the first batch migration of custom theme extensions (InfoTheme, PlaceholderTheme, KeyboardTheme, PinCodeTheme) and updates all affected widgets and pages to use Material 3 color and typography tokens instead of the custom properties.
- Cleans up the codebase by deleting the files of the initial set of migrated extensions and eliminating all related imports and usages.
* feat: Migrate to Material 3 Theming.
This change:
- Updates the themes README.md file to reflect the current structure and give more information based on the first major phase that was completed.
* feat: Migrate to Material 3 Theming
Deleting previous theme extensions
* feat: Migrate to Material 3 Theming
Another batch of migrations from existing extensions
* feat: Migration to Material 3 Theming
Third Migration batch for theme extensions
* fwat: Migration to Material 3 Theming
Final Migration batch for previous theme extensions
* Update onboarding hero
* Update button radius
* Add surfaceContainer to light theme
* feat(themes): Migrate to Material 3 Theming
This change:
- Adds new set of hero images
- Modifies the core structure for the themes
- Add missing color tokens to the theme classes
- Adds a CustomThemeColor class for custom color tokens
- Modifies the themelist to have a fall back for previous theme implementation
- Adds localization for some texts
- Modifies the flow for loading the theme on app start
- Add a WidgetsBindingObserver that listens for changes in the device theme and updates the app theme when there is a change
- Registers the themeStore as a Singleton for codebase wide use
* feat(themes): Migrate to Material 3 theming
This change:
- Migrates UI flows across the app to the new themes
- Confirms styling and typography of components across the app uses the new themes
- Remove instances of Palette use
- Switch TextStyles across the app to use theme text styles
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adjusts bottomsheets styling and removes duplicate close button
- Removes more themedata extensions from the previous implementation
* - Remove outlines from cards and dock
- Update menu colors
- Update padding/divider size for cards
* - Update PIN screen
- Fix navigation dock shadow
- Update wallet screen colors
* Update border radius --skip-ci
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adds gradient backgrounds to the dashbaord and balance cards.
- Migrates the input fields across the app to BaseTextFormFields.
- Removes dependence of input fields on individual styling, focusing instead on using theme defined InputDecoration styling with adjustments on individual components where needed.
- Applies new theme styling to BaseTextFormField, AddressTextField and CurrencyAmountTextField.
* - Switch some hero images to PNG
- Fix nagivation_dock shadow
- Minor fixes
* feat: Add fallback to previous underline styling in central widgets
This change:
- Adds a fallback to CurrencyAmountTextField, AddressTextField, and BaseTextFormField, allowing them use the previous theme styling.
- Adds localization for new texts
* feat(themes): Update warning box colors for dark and light themes
* feat(themes): Relaod themes when user restores from backup, ensuring the user previous theme preference is used.
* feat(themes): Handle themes logic during restore from backup
This change:
- Refactors theme loading logic to handle backup restore edgecase
- Refreshes the theme based on the user saved preference during restore from backup flow
* Fix card gradients and spacing
* Fix even more radiuses
Test new icons for navigation_dock.dart
* Update onboarding flow backgrounds
Fix swap icon clipping
Fix some text colors
Add more hero images
* Fix incorrect color for light theme
* Fix more hero images and cleanup
* Update text field icons
Fix info box CTA colors
Fix sync indicator colors
* Update toggle colors
Update dark theme colors (minor)
Update crypto_balance_widget.dart icon
* Update page transitions in router.dart
Fix some colors
* feat(themes): Display label by default for filled textfields
* feat(themes): Refactor theme handling across various components
This change:
- Fixes issue with themeMode resetting to system mode when app is restarted causing a UI glitch
- Updates theme checks from `currentTheme.type == ThemeType.dark` to `currentTheme.isDark` for consistency
- Adjusts UI components to use the theme directly from the themeStore
* feat(themes): Add animating tagline to the create pin welcome screen
* Revert text fields label temporarily, fix a couple colors, and cleanup some images
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
2025-05-25 20:11:45 +00:00
|
|
|
required this.themeStore,
|
2025-05-12 19:33:14 +02:00
|
|
|
}) : items = ObservableList<StandartListItem>(),
|
|
|
|
payjoinSession = payjoinSessionSource.get(payjoinSessionId)! {
|
|
|
|
listener = payjoinSessionSource.watch().listen((e) {
|
|
|
|
if (e.key == payjoinSessionId) _updateItems();
|
|
|
|
});
|
|
|
|
_updateItems();
|
|
|
|
}
|
|
|
|
|
|
|
|
final Box<PayjoinSession> payjoinSessionSource;
|
New themes (#2239)
* Add theme base v2
* Initial new theme base files
* Typos
* Fixes
* Update theme files
* feat: Migrate to Material 3 Theming
Foundation, Theme Data Refactor, and First Extension Cleanup Batch.
This commit completes the first major phase of migrating to Material 3 theming by setting up the foundations for material 3 integration and begins the initial migration, removing custom theme extensions, updating theme data, and refactoring all relevant widget and page theming to use Material 3’s built-in color and typography tokens.
These changes:
- Lays the groundwork for Material 3 theming by restructuring the app’s theme configuration to use Material 3’s ColorScheme and TextTheme as the primary sources of color and typography throughout the app.
- Refactors the core theme config files by removing legacy custom color roles ensuring all color definitions now map directly to Material 3’s role.
- Begins the first batch migration of custom theme extensions (InfoTheme, PlaceholderTheme, KeyboardTheme, PinCodeTheme) and updates all affected widgets and pages to use Material 3 color and typography tokens instead of the custom properties.
- Cleans up the codebase by deleting the files of the initial set of migrated extensions and eliminating all related imports and usages.
* feat: Migrate to Material 3 Theming.
This change:
- Updates the themes README.md file to reflect the current structure and give more information based on the first major phase that was completed.
* feat: Migrate to Material 3 Theming
Deleting previous theme extensions
* feat: Migrate to Material 3 Theming
Another batch of migrations from existing extensions
* feat: Migration to Material 3 Theming
Third Migration batch for theme extensions
* fwat: Migration to Material 3 Theming
Final Migration batch for previous theme extensions
* Update onboarding hero
* Update button radius
* Add surfaceContainer to light theme
* feat(themes): Migrate to Material 3 Theming
This change:
- Adds new set of hero images
- Modifies the core structure for the themes
- Add missing color tokens to the theme classes
- Adds a CustomThemeColor class for custom color tokens
- Modifies the themelist to have a fall back for previous theme implementation
- Adds localization for some texts
- Modifies the flow for loading the theme on app start
- Add a WidgetsBindingObserver that listens for changes in the device theme and updates the app theme when there is a change
- Registers the themeStore as a Singleton for codebase wide use
* feat(themes): Migrate to Material 3 theming
This change:
- Migrates UI flows across the app to the new themes
- Confirms styling and typography of components across the app uses the new themes
- Remove instances of Palette use
- Switch TextStyles across the app to use theme text styles
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adjusts bottomsheets styling and removes duplicate close button
- Removes more themedata extensions from the previous implementation
* - Remove outlines from cards and dock
- Update menu colors
- Update padding/divider size for cards
* - Update PIN screen
- Fix navigation dock shadow
- Update wallet screen colors
* Update border radius --skip-ci
* feat(themes): Migrate to Material 3 Theming.
This change:
- Adds gradient backgrounds to the dashbaord and balance cards.
- Migrates the input fields across the app to BaseTextFormFields.
- Removes dependence of input fields on individual styling, focusing instead on using theme defined InputDecoration styling with adjustments on individual components where needed.
- Applies new theme styling to BaseTextFormField, AddressTextField and CurrencyAmountTextField.
* - Switch some hero images to PNG
- Fix nagivation_dock shadow
- Minor fixes
* feat: Add fallback to previous underline styling in central widgets
This change:
- Adds a fallback to CurrencyAmountTextField, AddressTextField, and BaseTextFormField, allowing them use the previous theme styling.
- Adds localization for new texts
* feat(themes): Update warning box colors for dark and light themes
* feat(themes): Relaod themes when user restores from backup, ensuring the user previous theme preference is used.
* feat(themes): Handle themes logic during restore from backup
This change:
- Refactors theme loading logic to handle backup restore edgecase
- Refreshes the theme based on the user saved preference during restore from backup flow
* Fix card gradients and spacing
* Fix even more radiuses
Test new icons for navigation_dock.dart
* Update onboarding flow backgrounds
Fix swap icon clipping
Fix some text colors
Add more hero images
* Fix incorrect color for light theme
* Fix more hero images and cleanup
* Update text field icons
Fix info box CTA colors
Fix sync indicator colors
* Update toggle colors
Update dark theme colors (minor)
Update crypto_balance_widget.dart icon
* Update page transitions in router.dart
Fix some colors
* feat(themes): Display label by default for filled textfields
* feat(themes): Refactor theme handling across various components
This change:
- Fixes issue with themeMode resetting to system mode when app is restarted causing a UI glitch
- Updates theme checks from `currentTheme.type == ThemeType.dark` to `currentTheme.isDark` for consistency
- Adjusts UI components to use the theme directly from the themeStore
* feat(themes): Add animating tagline to the create pin welcome screen
* Revert text fields label temporarily, fix a couple colors, and cleanup some images
---------
Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
Co-authored-by: Blazebrain <davidadegoke16@gmail.com>
2025-05-25 20:11:45 +00:00
|
|
|
final ThemeStore themeStore;
|
2025-05-12 19:33:14 +02:00
|
|
|
final String payjoinSessionId;
|
|
|
|
final TransactionInfo? transactionInfo;
|
|
|
|
|
|
|
|
@observable
|
|
|
|
late PayjoinSession payjoinSession;
|
|
|
|
|
2025-06-27 15:38:09 +02:00
|
|
|
final ObservableList<TransactionDetailsListItem> items;
|
2025-05-12 19:33:14 +02:00
|
|
|
|
|
|
|
late final StreamSubscription<BoxEvent> listener;
|
|
|
|
|
|
|
|
Timer? timer;
|
|
|
|
|
|
|
|
@action
|
|
|
|
void _updateItems() {
|
|
|
|
final dateFormat = DateFormatter.withCurrentLocal();
|
|
|
|
items.clear();
|
|
|
|
items.addAll([
|
|
|
|
DetailsListStatusItem(
|
|
|
|
title: S.current.status,
|
|
|
|
value: _getStatusString(),
|
|
|
|
status: payjoinSession.status,
|
|
|
|
),
|
|
|
|
TradeDetailsListCardItem(
|
|
|
|
id: "${payjoinSession.isSenderSession ? S.current.outgoing : S.current.incoming} Payjoin",
|
|
|
|
createdAt:
|
|
|
|
dateFormat.format(payjoinSession.inProgressSince!).toString(),
|
|
|
|
pair:
|
|
|
|
'${bitcoin!.formatterBitcoinAmountToString(amount: payjoinSession.amount.toInt())} BTC',
|
|
|
|
onTap: (_) {},
|
|
|
|
),
|
|
|
|
if (payjoinSession.error?.isNotEmpty == true)
|
|
|
|
StandartListItem(
|
|
|
|
title: S.current.error,
|
|
|
|
value: payjoinSession.error!,
|
|
|
|
),
|
2025-06-27 15:38:09 +02:00
|
|
|
if (payjoinSession.txId?.isNotEmpty == true && transactionInfo != null) ...[
|
2025-05-12 19:33:14 +02:00
|
|
|
StandartListItem(
|
|
|
|
title: S.current.transaction_details_transaction_id,
|
|
|
|
value: payjoinSession.txId!,
|
|
|
|
key: ValueKey('standard_list_item_transaction_details_id_key'),
|
2025-06-27 15:38:09 +02:00
|
|
|
),
|
|
|
|
BlockExplorerListItem(
|
|
|
|
title: S.current.view_in_block_explorer,
|
|
|
|
value: '${S.current.view_transaction_on}mempool.space',
|
|
|
|
onTap: () async {
|
|
|
|
try {
|
|
|
|
final uri = Uri.parse('https://mempool.cakewallet.com/tx/${payjoinSession.txId!}');
|
|
|
|
if (await canLaunchUrl(uri))
|
|
|
|
await launchUrl(uri, mode: LaunchMode.externalApplication);
|
|
|
|
} catch (e) {}
|
|
|
|
},
|
|
|
|
key: ValueKey('block_explorer_list_item_wallet_type_key'),
|
2025-05-12 19:33:14 +02:00
|
|
|
)
|
2025-06-27 15:38:09 +02:00
|
|
|
]
|
2025-05-12 19:33:14 +02:00
|
|
|
]);
|
|
|
|
|
|
|
|
if (transactionInfo != null) {
|
|
|
|
items.addAll([
|
|
|
|
StandartListItem(
|
|
|
|
title: S.current.transaction_details_date,
|
|
|
|
value: dateFormat.format(transactionInfo!.date),
|
|
|
|
key: ValueKey('standard_list_item_transaction_details_date_key'),
|
|
|
|
),
|
|
|
|
StandartListItem(
|
|
|
|
title: S.current.confirmations,
|
|
|
|
value: transactionInfo!.confirmations.toString(),
|
|
|
|
key: ValueKey('standard_list_item_transaction_confirmations_key'),
|
|
|
|
),
|
|
|
|
StandartListItem(
|
|
|
|
title: S.current.transaction_details_height,
|
|
|
|
value: '${transactionInfo!.height}',
|
|
|
|
key: ValueKey('standard_list_item_transaction_details_height_key'),
|
|
|
|
),
|
|
|
|
if (transactionInfo!.feeFormatted()?.isNotEmpty ?? false)
|
|
|
|
StandartListItem(
|
|
|
|
title: S.current.transaction_details_fee,
|
|
|
|
value: transactionInfo!.feeFormatted()!,
|
|
|
|
key: ValueKey('standard_list_item_transaction_details_fee_key'),
|
|
|
|
),
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
String _getStatusString() {
|
|
|
|
switch (payjoinSession.status) {
|
|
|
|
case 'success':
|
2025-06-19 18:55:41 +02:00
|
|
|
if (transactionInfo?.isPending == false) return S.current.successful;
|
|
|
|
return S.current.payjoin_request_awaiting_tx;
|
2025-05-12 19:33:14 +02:00
|
|
|
case 'inProgress':
|
|
|
|
return S.current.payjoin_request_in_progress;
|
|
|
|
case 'unrecoverable':
|
|
|
|
return S.current.error;
|
|
|
|
default:
|
|
|
|
return payjoinSession.status;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|