merge main

This commit is contained in:
Matthew Fosse 2025-04-28 23:38:48 -07:00
commit 87ed8ebc12
20 changed files with 149 additions and 91 deletions

View file

@ -1,6 +1,4 @@
Monero 12-word seed support (Wallet Groups support as well) Background sync improvements
Integrate DFX's OpenCryptoPay Payment notifications
Exchange flow enhancements UI/UX improvements
Hardware Wallets flow enhancements
Minor UI enhancements
Bug fixes Bug fixes

View file

@ -1,6 +1,5 @@
Monero 12-word seed support (Wallet Groups support as well) Background sync improvements
Integrate DFX's OpenCryptoPay Payment notifications
Exchange flow enhancements WalletConnect enhancements
Hardware Wallets flow enhancements UI/UX improvements
Minor UI enhancements
Bug fixes Bug fixes

View file

@ -1,7 +1,6 @@
import 'dart:math'; import 'dart:math';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_zano/zano_wallet_api.dart';
import 'package:decimal/decimal.dart'; import 'package:decimal/decimal.dart';
import 'package:decimal/intl.dart'; import 'package:decimal/intl.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
@ -57,7 +56,9 @@ class ZanoFormatter {
static int parseAmount(String amount, [int decimalPoint = defaultDecimalPoint]) { static int parseAmount(String amount, [int decimalPoint = defaultDecimalPoint]) {
final resultBigInt = (Decimal.parse(amount) * Decimal.fromBigInt(BigInt.from(10).pow(decimalPoint))).toBigInt(); final resultBigInt = (Decimal.parse(amount) * Decimal.fromBigInt(BigInt.from(10).pow(decimalPoint))).toBigInt();
if (!resultBigInt.isValidInt) { if (!resultBigInt.isValidInt) {
Fluttertoast.showToast(msg: 'Cannot transfer $amount. Maximum is ${intAmountToString(resultBigInt.toInt(), decimalPoint)}.'); try {
Fluttertoast.showToast(msg: 'Cannot transfer $amount. Maximum is ${intAmountToString(resultBigInt.toInt(), decimalPoint)}.');
} catch (_) {}
} }
return resultBigInt.toInt(); return resultBigInt.toInt();
} }

View file

@ -1,7 +1,6 @@
PODS: PODS:
- connectivity_plus (0.0.1): - connectivity_plus (0.0.1):
- Flutter - Flutter
- ReachabilitySwift
- CryptoSwift (1.8.4) - CryptoSwift (1.8.4)
- cw_decred (0.0.1): - cw_decred (0.0.1):
- Flutter - Flutter
@ -59,6 +58,8 @@ PODS:
- OrderedSet (~> 6.0.3) - OrderedSet (~> 6.0.3)
- flutter_local_authentication (1.2.0): - flutter_local_authentication (1.2.0):
- Flutter - Flutter
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_mailer (0.0.1): - flutter_mailer (0.0.1):
- Flutter - Flutter
- flutter_secure_storage (6.0.0): - flutter_secure_storage (6.0.0):
@ -77,7 +78,9 @@ PODS:
- FlutterMacOS - FlutterMacOS
- permission_handler_apple (9.3.0): - permission_handler_apple (9.3.0):
- Flutter - Flutter
- ReachabilitySwift (5.2.4) - reown_yttrium (0.0.1):
- Flutter
- YttriumWrapper (= 0.8.35)
- SDWebImage (5.20.0): - SDWebImage (5.20.0):
- SDWebImage/Core (= 5.20.0) - SDWebImage/Core (= 5.20.0)
- SDWebImage/Core (5.20.0) - SDWebImage/Core (5.20.0)
@ -100,6 +103,7 @@ PODS:
- Flutter - Flutter
- wakelock_plus (0.0.1): - wakelock_plus (0.0.1):
- Flutter - Flutter
- YttriumWrapper (0.8.35)
DEPENDENCIES: DEPENDENCIES:
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
@ -114,6 +118,7 @@ DEPENDENCIES:
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`)
- flutter_local_authentication (from `.symlinks/plugins/flutter_local_authentication/ios`) - flutter_local_authentication (from `.symlinks/plugins/flutter_local_authentication/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_mailer (from `.symlinks/plugins/flutter_mailer/ios`) - flutter_mailer (from `.symlinks/plugins/flutter_mailer/ios`)
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
@ -122,6 +127,7 @@ DEPENDENCIES:
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- reown_yttrium (from `.symlinks/plugins/reown_yttrium/ios`)
- sensitive_clipboard (from `.symlinks/plugins/sensitive_clipboard/ios`) - sensitive_clipboard (from `.symlinks/plugins/sensitive_clipboard/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
@ -137,9 +143,9 @@ SPEC REPOS:
- DKImagePickerController - DKImagePickerController
- DKPhotoGallery - DKPhotoGallery
- OrderedSet - OrderedSet
- ReachabilitySwift
- SDWebImage - SDWebImage
- SwiftyGif - SwiftyGif
- YttriumWrapper
EXTERNAL SOURCES: EXTERNAL SOURCES:
connectivity_plus: connectivity_plus:
@ -164,6 +170,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_inappwebview_ios/ios" :path: ".symlinks/plugins/flutter_inappwebview_ios/ios"
flutter_local_authentication: flutter_local_authentication:
:path: ".symlinks/plugins/flutter_local_authentication/ios" :path: ".symlinks/plugins/flutter_local_authentication/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_mailer: flutter_mailer:
:path: ".symlinks/plugins/flutter_mailer/ios" :path: ".symlinks/plugins/flutter_mailer/ios"
flutter_secure_storage: flutter_secure_storage:
@ -180,6 +188,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/path_provider_foundation/darwin" :path: ".symlinks/plugins/path_provider_foundation/darwin"
permission_handler_apple: permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios" :path: ".symlinks/plugins/permission_handler_apple/ios"
reown_yttrium:
:path: ".symlinks/plugins/reown_yttrium/ios"
sensitive_clipboard: sensitive_clipboard:
:path: ".symlinks/plugins/sensitive_clipboard/ios" :path: ".symlinks/plugins/sensitive_clipboard/ios"
share_plus: share_plus:
@ -198,7 +208,7 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/wakelock_plus/ios" :path: ".symlinks/plugins/wakelock_plus/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d
CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
cw_decred: 9c0e1df74745b51a1289ec5e91fb9e24b68fa14a cw_decred: 9c0e1df74745b51a1289ec5e91fb9e24b68fa14a
cw_mweb: 22cd01dfb8ad2d39b15332006f22046aaa8352a3 cw_mweb: 22cd01dfb8ad2d39b15332006f22046aaa8352a3
@ -212,6 +222,7 @@ SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb
flutter_local_notifications: ff50f8405aaa0ccdc7dcfb9022ca192e8ad9688f
flutter_mailer: 2ef5a67087bc8c6c4cefd04a178bf1ae2c94cd83 flutter_mailer: 2ef5a67087bc8c6c4cefd04a178bf1ae2c94cd83
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f
@ -221,7 +232,7 @@ SPEC CHECKSUMS:
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda reown_yttrium: c0e87e5965fa60a3559564cc35cffbba22976089
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8 SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
sensitive_clipboard: d4866e5d176581536c27bb1618642ee83adca986 sensitive_clipboard: d4866e5d176581536c27bb1618642ee83adca986
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f
@ -231,8 +242,9 @@ SPEC CHECKSUMS:
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
universal_ble: cf52a7b3fd2e7c14d6d7262e9fdadb72ab6b88a6 universal_ble: cf52a7b3fd2e7c14d6d7262e9fdadb72ab6b88a6
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
wakelock_plus: 373cfe59b235a6dd5837d0fb88791d2f13a90d56 wakelock_plus: 76957ab028e12bfa4e66813c99e46637f367fc7e
YttriumWrapper: 31e937fe9fbe0f1314d2ca6be9ce9b379a059966
PODFILE CHECKSUM: e448f662d4c41f0c0b1ccbb78afd57dbf895a597 PODFILE CHECKSUM: 5296465b1c6d14d506230356756826012f65d97a
COCOAPODS: 1.16.2 COCOAPODS: 1.16.2

View file

@ -651,6 +651,7 @@ Future<void> setup({
return walletKitService; return walletKitService;
}); });
getIt.registerFactory(() => NFTViewModel(appStore, getIt.get<BottomSheetService>()));
getIt.registerFactory(() => BalancePage( getIt.registerFactory(() => BalancePage(
nftViewModel: getIt.get<NFTViewModel>(), nftViewModel: getIt.get<NFTViewModel>(),
dashboardViewModel: getIt.get<DashboardViewModel>(), dashboardViewModel: getIt.get<DashboardViewModel>(),
@ -1451,7 +1452,6 @@ Future<void> setup({
() => WalletConnectConnectionsView(walletKitService: getIt.get<WalletKitService>()), () => WalletConnectConnectionsView(walletKitService: getIt.get<WalletKitService>()),
); );
getIt.registerFactory(() => NFTViewModel(appStore, getIt.get<BottomSheetService>()));
getIt.registerFactory<TorPage>(() => TorPage(getIt.get<AppStore>())); getIt.registerFactory<TorPage>(() => TorPage(getIt.get<AppStore>()));
getIt.registerFactory(() => SignViewModel(getIt.get<AppStore>().wallet!)); getIt.registerFactory(() => SignViewModel(getIt.get<AppStore>().wallet!));

View file

@ -9,8 +9,7 @@ class MainActions {
final bool Function(DashboardViewModel viewModel)? isEnabled; final bool Function(DashboardViewModel viewModel)? isEnabled;
final bool Function(DashboardViewModel viewModel)? canShow; final bool Function(DashboardViewModel viewModel)? canShow;
final Future<void> Function( final Future<void> Function(BuildContext context, DashboardViewModel viewModel) onTap;
BuildContext context, DashboardViewModel viewModel) onTap;
MainActions._({ MainActions._({
required this.name, required this.name,
@ -32,7 +31,12 @@ class MainActions {
name: (context) => S.of(context).wallets, name: (context) => S.of(context).wallets,
image: 'assets/images/wallet_new.png', image: 'assets/images/wallet_new.png',
onTap: (BuildContext context, DashboardViewModel viewModel) async { onTap: (BuildContext context, DashboardViewModel viewModel) async {
Navigator.pushNamed(context, Routes.walletList); Navigator.pushNamed(
context,
Routes.walletList,
arguments: (BuildContext context) =>
Navigator.of(context).pushNamedAndRemoveUntil(Routes.dashboard, (route) => false),
);
}, },
); );
@ -65,7 +69,6 @@ class MainActions {
}, },
); );
static MainActions tradeAction = MainActions._( static MainActions tradeAction = MainActions._(
name: (context) => S.of(context).exchange, name: (context) => S.of(context).exchange,
image: 'assets/images/buy_sell.png', image: 'assets/images/buy_sell.png',
@ -76,4 +79,4 @@ class MainActions {
await Navigator.of(context).pushNamed(Routes.buySellPage, arguments: false); await Navigator.of(context).pushNamed(Routes.buySellPage, arguments: false);
}, },
); );
} }

View file

@ -87,10 +87,7 @@ class BalanceRowWidget extends StatelessWidget {
// ], // ],
), ),
child: TextButton( child: TextButton(
onPressed: () => Fluttertoast.showToast( onPressed: _showToast,
msg: S.current.show_balance_toast,
backgroundColor: Color.fromRGBO(0, 0, 0, 0.85),
),
onLongPress: () => dashboardViewModel.balanceViewModel.switchBalanceValue(), onLongPress: () => dashboardViewModel.balanceViewModel.switchBalanceValue(),
style: TextButton.styleFrom( style: TextButton.styleFrom(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
@ -366,10 +363,7 @@ class BalanceRowWidget extends StatelessWidget {
// ], // ],
), ),
child: TextButton( child: TextButton(
onPressed: () => Fluttertoast.showToast( onPressed: _showToast,
msg: S.current.show_balance_toast,
backgroundColor: Color.fromRGBO(0, 0, 0, 0.85),
),
onLongPress: () => dashboardViewModel.balanceViewModel.switchBalanceValue(), onLongPress: () => dashboardViewModel.balanceViewModel.switchBalanceValue(),
style: TextButton.styleFrom( style: TextButton.styleFrom(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
@ -709,4 +703,13 @@ class BalanceRowWidget extends StatelessWidget {
void _showBalanceDescription(BuildContext context, String content) { void _showBalanceDescription(BuildContext context, String content) {
showPopUp<void>(context: context, builder: (_) => InformationPage(information: content)); showPopUp<void>(context: context, builder: (_) => InformationPage(information: content));
} }
void _showToast() async {
try {
await Fluttertoast.showToast(
msg: S.current.show_balance_toast,
backgroundColor: Color.fromRGBO(0, 0, 0, 0.85),
);
} catch (_) {}
}
} }

View file

@ -11,11 +11,27 @@ import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart'; import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
class NFTListingPage extends StatelessWidget { class NFTListingPage extends StatefulWidget {
final NFTViewModel nftViewModel; final NFTViewModel nftViewModel;
const NFTListingPage({super.key, required this.nftViewModel}); const NFTListingPage({super.key, required this.nftViewModel});
@override
State<NFTListingPage> createState() => _NFTListingPageState();
}
class _NFTListingPageState extends State<NFTListingPage> {
@override
void initState() {
super.initState();
fetchNFTsForWallet();
}
Future<void> fetchNFTsForWallet() async {
await widget.nftViewModel.getNFTAssetByWallet();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final dashboardTheme = Theme.of(context).extension<DashboardPageTheme>()!; final dashboardTheme = Theme.of(context).extension<DashboardPageTheme>()!;
@ -36,11 +52,11 @@ class NFTListingPage extends StatelessWidget {
onPressed: () => Navigator.pushNamed( onPressed: () => Navigator.pushNamed(
context, context,
Routes.importNFTPage, Routes.importNFTPage,
arguments: nftViewModel, arguments: widget.nftViewModel,
), ),
), ),
), ),
if (nftViewModel.isLoading) if (widget.nftViewModel.isLoading)
Expanded( Expanded(
child: Center( child: Center(
child: CircularProgressIndicator( child: CircularProgressIndicator(
@ -53,7 +69,7 @@ class NFTListingPage extends StatelessWidget {
) )
else else
Expanded( Expanded(
child: NFTListWidget(nftViewModel: nftViewModel), child: NFTListWidget(nftViewModel: widget.nftViewModel),
), ),
], ],
); );

View file

@ -14,13 +14,30 @@ class BottomSheetMessageDisplayWidget extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Row(
isError ? S.current.error : S.current.successful, mainAxisAlignment: MainAxisAlignment.spaceBetween,
style: TextStyle( crossAxisAlignment: CrossAxisAlignment.center,
fontSize: 16, children: [
fontWeight: FontWeight.normal, Text(
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor, isError ? S.current.error : S.current.successful,
), style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.normal,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
),
),
IconButton(
color: Theme.of(context).appBarTheme.titleTextStyle!.color!,
padding: const EdgeInsets.all(0.0),
visualDensity: VisualDensity.compact,
onPressed: () {
if (Navigator.canPop(context)) {
Navigator.pop(context);
}
},
icon: const Icon(Icons.close_sharp),
),
],
), ),
SizedBox(height: 8), SizedBox(height: 8),
Row( Row(
@ -37,6 +54,7 @@ class BottomSheetMessageDisplayWidget extends StatelessWidget {
), ),
], ],
), ),
SizedBox(height: 16),
], ],
); );
} }

View file

@ -73,7 +73,11 @@ class SettingActions {
image: 'assets/images/wallet_menu.png', image: 'assets/images/wallet_menu.png',
onTap: (BuildContext context) { onTap: (BuildContext context) {
Navigator.pop(context); Navigator.pop(context);
Navigator.of(context).pushNamed(Routes.walletList); Navigator.of(context).pushNamed(
Routes.walletList,
arguments: (BuildContext context) =>
Navigator.of(context).pushNamedAndRemoveUntil(Routes.dashboard, (route) => false),
);
}, },
); );

View file

@ -230,6 +230,8 @@ class ExceptionHandler {
static Future<void> _addDeviceInfo(File file) async { static Future<void> _addDeviceInfo(File file) async {
final packageInfo = await PackageInfo.fromPlatform(); final packageInfo = await PackageInfo.fromPlatform();
final currentVersion = packageInfo.version; final currentVersion = packageInfo.version;
final appName = packageInfo.appName;
final package = packageInfo.packageName;
final deviceInfoPlugin = DeviceInfoPlugin(); final deviceInfoPlugin = DeviceInfoPlugin();
Map<String, dynamic> deviceInfo = {}; Map<String, dynamic> deviceInfo = {};
@ -252,7 +254,7 @@ class ExceptionHandler {
} }
await file.writeAsString( await file.writeAsString(
"App Version: $currentVersion\n\nDevice Info $deviceInfo\n\n", "App Version: $currentVersion\nApp Name: $appName\nPackage: $package\n\nDevice Info $deviceInfo\n\n",
mode: FileMode.append, mode: FileMode.append,
); );
} }

View file

@ -4,7 +4,6 @@ import 'dart:io' show Platform;
import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:cake_wallet/.secrets.g.dart' as secrets;
import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/core/background_sync.dart';
import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/core/key_service.dart';
import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart'; import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
import 'package:cake_wallet/entities/balance_display_mode.dart'; import 'package:cake_wallet/entities/balance_display_mode.dart';
@ -538,7 +537,8 @@ abstract class DashboardViewModelBase with Store {
} }
@observable @observable
late bool backgroundSyncNotificationsEnabled = sharedPreferences.getBool(PreferencesKey.backgroundSyncNotificationsEnabled) ?? false; late bool backgroundSyncNotificationsEnabled =
sharedPreferences.getBool(PreferencesKey.backgroundSyncNotificationsEnabled) ?? false;
@action @action
Future<void> setBackgroundSyncNotificationsEnabled(bool value) async { Future<void> setBackgroundSyncNotificationsEnabled(bool value) async {
@ -558,7 +558,6 @@ abstract class DashboardViewModelBase with Store {
await sharedPreferences.setBool(PreferencesKey.backgroundSyncNotificationsEnabled, value); await sharedPreferences.setBool(PreferencesKey.backgroundSyncNotificationsEnabled, value);
} }
bool get hasBgsyncNetworkConstraints => Platform.isAndroid; bool get hasBgsyncNetworkConstraints => Platform.isAndroid;
bool get hasBgsyncBatteryNotLowConstraints => Platform.isAndroid; bool get hasBgsyncBatteryNotLowConstraints => Platform.isAndroid;
bool get hasBgsyncChargingConstraints => Platform.isAndroid; bool get hasBgsyncChargingConstraints => Platform.isAndroid;
@ -575,12 +574,14 @@ abstract class DashboardViewModelBase with Store {
@observable @observable
bool backgroundSyncDeviceIdle = false; bool backgroundSyncDeviceIdle = false;
Future<void> _loadConstraints() async { Future<void> _loadConstraints() async {
backgroundSyncNetworkUnmetered = await FlutterDaemon().getNetworkType(); if (Platform.isAndroid) {
backgroundSyncBatteryNotLow = await FlutterDaemon().getBatteryNotLow(); backgroundSyncNetworkUnmetered = await FlutterDaemon().getNetworkType();
backgroundSyncCharging = await FlutterDaemon().getRequiresCharging(); backgroundSyncBatteryNotLow = await FlutterDaemon().getBatteryNotLow();
backgroundSyncDeviceIdle = await FlutterDaemon().getDeviceIdle(); backgroundSyncCharging = await FlutterDaemon().getRequiresCharging();
backgroundSyncDeviceIdle = await FlutterDaemon().getDeviceIdle();
}
} }
@action @action
@ -618,7 +619,7 @@ abstract class DashboardViewModelBase with Store {
await enableBackgroundSync(); await enableBackgroundSync();
} }
} }
bool get hasBatteryOptimization => Platform.isAndroid; bool get hasBatteryOptimization => Platform.isAndroid;
@observable @observable

View file

@ -23,11 +23,7 @@ abstract class NFTViewModelBase with Store {
: isLoading = false, : isLoading = false,
isImportNFTLoading = false, isImportNFTLoading = false,
nftAssetByWalletModels = ObservableList(), nftAssetByWalletModels = ObservableList(),
solanaNftAssetModels = ObservableList() { solanaNftAssetModels = ObservableList();
getNFTAssetByWallet();
reaction((_) => appStore.wallet, (_) => getNFTAssetByWallet());
}
final AppStore appStore; final AppStore appStore;
final BottomSheetService bottomSheetService; final BottomSheetService bottomSheetService;
@ -80,6 +76,8 @@ abstract class NFTViewModelBase with Store {
} }
try { try {
if (isLoading) return;
isLoading = true; isLoading = true;
final response = await http.get( final response = await http.get(
@ -114,10 +112,7 @@ abstract class NFTViewModelBase with Store {
nftAssetByWalletModels.addAll(result); nftAssetByWalletModels.addAll(result);
} }
isLoading = false;
} catch (e) { } catch (e) {
isLoading = false;
log(e.toString()); log(e.toString());
bottomSheetService.queueBottomSheet( bottomSheetService.queueBottomSheet(
isModalDismissible: true, isModalDismissible: true,
@ -125,6 +120,8 @@ abstract class NFTViewModelBase with Store {
message: S.current.moralis_nft_error, message: S.current.moralis_nft_error,
), ),
); );
} finally {
isLoading = false;
} }
} }

View file

@ -81,14 +81,16 @@ class LinkViewModel {
} }
Future<void> _errorToast(String message, {double fontSize = 16}) async { Future<void> _errorToast(String message, {double fontSize = 16}) async {
Fluttertoast.showToast( try {
msg: message, await Fluttertoast.showToast(
toastLength: Toast.LENGTH_LONG, msg: message,
gravity: ToastGravity.SNACKBAR, toastLength: Toast.LENGTH_LONG,
backgroundColor: Colors.black, gravity: ToastGravity.SNACKBAR,
textColor: Colors.white, backgroundColor: Colors.black,
fontSize: fontSize, textColor: Colors.white,
); fontSize: fontSize,
);
} catch (_) {}
} }
Future<void> handleLink() async { Future<void> handleLink() async {

View file

@ -1,7 +1,6 @@
PODS: PODS:
- connectivity_plus (0.0.1): - connectivity_plus (0.0.1):
- FlutterMacOS - FlutterMacOS
- ReachabilitySwift
- cw_mweb (0.0.1): - cw_mweb (0.0.1):
- FlutterMacOS - FlutterMacOS
- device_info_plus (0.0.1): - device_info_plus (0.0.1):
@ -15,6 +14,8 @@ PODS:
- OrderedSet (~> 6.0.3) - OrderedSet (~> 6.0.3)
- flutter_local_authentication (1.2.0): - flutter_local_authentication (1.2.0):
- FlutterMacOS - FlutterMacOS
- flutter_local_notifications (0.0.1):
- FlutterMacOS
- flutter_secure_storage_macos (6.1.1): - flutter_secure_storage_macos (6.1.1):
- FlutterMacOS - FlutterMacOS
- FlutterMacOS (1.0.0) - FlutterMacOS (1.0.0)
@ -26,7 +27,6 @@ PODS:
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
- ReachabilitySwift (5.2.4)
- share_plus (0.0.1): - share_plus (0.0.1):
- FlutterMacOS - FlutterMacOS
- shared_preferences_foundation (0.0.1): - shared_preferences_foundation (0.0.1):
@ -50,6 +50,7 @@ DEPENDENCIES:
- fast_scanner (from `Flutter/ephemeral/.symlinks/plugins/fast_scanner/macos`) - fast_scanner (from `Flutter/ephemeral/.symlinks/plugins/fast_scanner/macos`)
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`) - flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
- flutter_local_authentication (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_authentication/macos`) - flutter_local_authentication (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_authentication/macos`)
- flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`)
- flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
- FlutterMacOS (from `Flutter/ephemeral`) - FlutterMacOS (from `Flutter/ephemeral`)
- in_app_review (from `Flutter/ephemeral/.symlinks/plugins/in_app_review/macos`) - in_app_review (from `Flutter/ephemeral/.symlinks/plugins/in_app_review/macos`)
@ -65,7 +66,6 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- OrderedSet - OrderedSet
- ReachabilitySwift
EXTERNAL SOURCES: EXTERNAL SOURCES:
connectivity_plus: connectivity_plus:
@ -82,6 +82,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos :path: Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos
flutter_local_authentication: flutter_local_authentication:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_local_authentication/macos :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_authentication/macos
flutter_local_notifications:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos
flutter_secure_storage_macos: flutter_secure_storage_macos:
:path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos
FlutterMacOS: FlutterMacOS:
@ -106,20 +108,20 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos
SPEC CHECKSUMS: SPEC CHECKSUMS:
connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 connectivity_plus: 0a976dfd033b59192912fa3c6c7b54aab5093802
cw_mweb: 7440b12ead811dda972a9918442ea2a458e8742c cw_mweb: 7440b12ead811dda972a9918442ea2a458e8742c
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
devicelocale: 9f0f36ac651cabae2c33f32dcff4f32b61c38225 devicelocale: 9f0f36ac651cabae2c33f32dcff4f32b61c38225
fast_scanner: d31bae07e2653403a69dac99fb710c1722b16a97 fast_scanner: d31bae07e2653403a69dac99fb710c1722b16a97
flutter_inappwebview_macos: bdf207b8f4ebd58e86ae06cd96b147de99a67c9b flutter_inappwebview_macos: bdf207b8f4ebd58e86ae06cd96b147de99a67c9b
flutter_local_authentication: 85674893931e1c9cfa7c9e4f5973cb8c56b018b0 flutter_local_authentication: 85674893931e1c9cfa7c9e4f5973cb8c56b018b0
flutter_local_notifications: 4ccab5b7a22835214a6672e3f9c5e8ae207dab36
flutter_secure_storage_macos: d56e2d218c1130b262bef8b4a7d64f88d7f9c9ea flutter_secure_storage_macos: d56e2d218c1130b262bef8b4a7d64f88d7f9c9ea
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
in_app_review: a6a031b9acd03c7d103e341aa334adf2c493fb93 in_app_review: a6a031b9acd03c7d103e341aa334adf2c493fb93
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda
share_plus: 1fa619de8392a4398bfaf176d441853922614e89 share_plus: 1fa619de8392a4398bfaf176d441853922614e89
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sp_scanner: 269d96e0ec3173e69156be7239b95182be3b8303 sp_scanner: 269d96e0ec3173e69156be7239b95182be3b8303

View file

@ -14,15 +14,15 @@ TYPES=($MONERO_COM $CAKEWALLET)
APP_ANDROID_TYPE=$1 APP_ANDROID_TYPE=$1
MONERO_COM_NAME="Monero.com" MONERO_COM_NAME="Monero.com"
MONERO_COM_VERSION="4.26.0" MONERO_COM_VERSION="4.27.0"
MONERO_COM_BUILD_NUMBER=120 MONERO_COM_BUILD_NUMBER=121
MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_BUNDLE_ID="com.monero.app"
MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_PACKAGE="com.monero.app"
MONERO_COM_SCHEME="monero.com" MONERO_COM_SCHEME="monero.com"
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.27.0"
CAKEWALLET_BUILD_NUMBER=258 CAKEWALLET_BUILD_NUMBER=259
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
CAKEWALLET_SCHEME="cakewallet" CAKEWALLET_SCHEME="cakewallet"

View file

@ -12,13 +12,13 @@ TYPES=($MONERO_COM $CAKEWALLET)
APP_IOS_TYPE=$1 APP_IOS_TYPE=$1
MONERO_COM_NAME="Monero.com" MONERO_COM_NAME="Monero.com"
MONERO_COM_VERSION="4.26.0" MONERO_COM_VERSION="4.27.1"
MONERO_COM_BUILD_NUMBER=117 MONERO_COM_BUILD_NUMBER=120
MONERO_COM_BUNDLE_ID="com.cakewallet.monero" MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.27.1"
CAKEWALLET_BUILD_NUMBER=312 CAKEWALLET_BUILD_NUMBER=314
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"

View file

@ -14,8 +14,8 @@ if [ -n "$1" ]; then
fi fi
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.27.0"
CAKEWALLET_BUILD_NUMBER=52 CAKEWALLET_BUILD_NUMBER=54
if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then
echo "Wrong app type." echo "Wrong app type."

View file

@ -16,13 +16,13 @@ if [ -n "$1" ]; then
fi fi
MONERO_COM_NAME="Monero.com" MONERO_COM_NAME="Monero.com"
MONERO_COM_VERSION="4.26.0" MONERO_COM_VERSION="4.27.0"
MONERO_COM_BUILD_NUMBER=49 MONERO_COM_BUILD_NUMBER=51
MONERO_COM_BUNDLE_ID="com.cakewallet.monero" MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.27.0"
CAKEWALLET_BUILD_NUMBER=111 CAKEWALLET_BUILD_NUMBER=113
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then

View file

@ -1,5 +1,5 @@
#define MyAppName "Cake Wallet" #define MyAppName "Cake Wallet"
#define MyAppVersion "4.26.0" #define MyAppVersion "4.27.0"
#define MyAppPublisher "Cake Labs LLC" #define MyAppPublisher "Cake Labs LLC"
#define MyAppURL "https://cakewallet.com/" #define MyAppURL "https://cakewallet.com/"
#define MyAppExeName "CakeWallet.exe" #define MyAppExeName "CakeWallet.exe"