mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-11-18 02:07:43 +00:00
Merge remote-tracking branch 'origin/staging' into tor
This commit is contained in:
commit
9a27e724b2
10 changed files with 113 additions and 49 deletions
|
@ -134,10 +134,28 @@ flutter run linux
|
||||||
Visual Studio is required for Windows development with the Flutter SDK. Download it at https://visualstudio.microsoft.com/downloads/ and install the "Desktop development with C++" workload, including all of its default components.
|
Visual Studio is required for Windows development with the Flutter SDK. Download it at https://visualstudio.microsoft.com/downloads/ and install the "Desktop development with C++" workload, including all of its default components.
|
||||||
|
|
||||||
### Building libraries in WSL2
|
### Building libraries in WSL2
|
||||||
Set up Ubuntu 20.04 in WSL2. Follow the entire Linux host section to get set up and build windows `dll` libraries. Copy the resulting `dll`s to their respective positions on the Windows host:
|
Set up Ubuntu 20.04 in WSL2. Follow the entire Linux host section in the WSL2 Ubuntu 20.04 host to get set up to build. You will also need to install Rust and MXE dependencies on the WSL2 Ubuntu 20.04 host:
|
||||||
|
- [Install Rust](https://rustup.rs/)
|
||||||
|
```sh
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||||
|
```
|
||||||
|
- Install MXE by running `stack_wallet/scripts/windows/deps.sh`
|
||||||
|
```sh
|
||||||
|
./stack_wallet/scripts/windows/deps.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The WSL2 host may optionally be navigated to the `stack_wallet` repository on the Windows host in order to build the plugins in-place and skip the next section in which you copy the `dll`s from WSL2 to Windows. Then build windows `dll` libraries by running the following script on the WSL2 Ubuntu 20.04 host:
|
||||||
|
|
||||||
|
- `stack_wallet/scripts/windows/build_all.sh`
|
||||||
|
|
||||||
|
Copy the resulting `dll`s to their respective positions on the Windows host:
|
||||||
|
|
||||||
- `stack_wallet/crypto_plugins/flutter_libepiccash/scripts/windows/build/libepic_cash_wallet.dll`
|
- `stack_wallet/crypto_plugins/flutter_libepiccash/scripts/windows/build/libepic_cash_wallet.dll`
|
||||||
- `stack_wallet/crypto_plugins/flutter_liblelantus/scripts/windows/build/libmobileliblelantus.dll`
|
- `stack_wallet/crypto_plugins/flutter_liblelantus/scripts/windows/build/libmobileliblelantus.dll`
|
||||||
|
<!--
|
||||||
|
- `stack_wallet/crypto_plugins/flutter_libmonero/scripts/windows/build/libcw_monero.dll`
|
||||||
|
- `stack_wallet/crypto_plugins/flutter_libmonero/scripts/windows/build/libcw_wownero.dll`
|
||||||
|
-->
|
||||||
<!-- TODO: script the copying or installation of libraries from WSL2 to the parent Windows host -->
|
<!-- TODO: script the copying or installation of libraries from WSL2 to the parent Windows host -->
|
||||||
|
|
||||||
### Install Flutter on Windows host
|
### Install Flutter on Windows host
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
PODS:
|
PODS:
|
||||||
- "app_settings (3.0.0+1)":
|
|
||||||
- Flutter
|
|
||||||
- barcode_scan2 (0.0.1):
|
- barcode_scan2 (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- MTBBarcodeScanner
|
- MTBBarcodeScanner
|
||||||
|
@ -112,7 +110,7 @@ PODS:
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_native_splash (0.0.1):
|
- flutter_native_splash (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_secure_storage (3.3.1):
|
- flutter_secure_storage (6.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- integration_test (0.0.1):
|
- integration_test (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
@ -149,7 +147,6 @@ PODS:
|
||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- app_settings (from `.symlinks/plugins/app_settings/ios`)
|
|
||||||
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
|
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
|
||||||
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
||||||
- cw_monero (from `.symlinks/plugins/cw_monero/ios`)
|
- cw_monero (from `.symlinks/plugins/cw_monero/ios`)
|
||||||
|
@ -169,10 +166,10 @@ DEPENDENCIES:
|
||||||
- lelantus (from `.symlinks/plugins/lelantus/ios`)
|
- lelantus (from `.symlinks/plugins/lelantus/ios`)
|
||||||
- local_auth (from `.symlinks/plugins/local_auth/ios`)
|
- local_auth (from `.symlinks/plugins/local_auth/ios`)
|
||||||
- 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/ios`)
|
- 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`)
|
||||||
- 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/ios`)
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- stack_wallet_backup (from `.symlinks/plugins/stack_wallet_backup/ios`)
|
- stack_wallet_backup (from `.symlinks/plugins/stack_wallet_backup/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- wakelock (from `.symlinks/plugins/wakelock/ios`)
|
- wakelock (from `.symlinks/plugins/wakelock/ios`)
|
||||||
|
@ -188,8 +185,6 @@ SPEC REPOS:
|
||||||
- SwiftyGif
|
- SwiftyGif
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
app_settings:
|
|
||||||
:path: ".symlinks/plugins/app_settings/ios"
|
|
||||||
barcode_scan2:
|
barcode_scan2:
|
||||||
:path: ".symlinks/plugins/barcode_scan2/ios"
|
:path: ".symlinks/plugins/barcode_scan2/ios"
|
||||||
connectivity_plus:
|
connectivity_plus:
|
||||||
|
@ -229,13 +224,13 @@ EXTERNAL SOURCES:
|
||||||
package_info_plus:
|
package_info_plus:
|
||||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
:path: ".symlinks/plugins/path_provider_foundation/ios"
|
: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"
|
||||||
share_plus:
|
share_plus:
|
||||||
:path: ".symlinks/plugins/share_plus/ios"
|
:path: ".symlinks/plugins/share_plus/ios"
|
||||||
shared_preferences_foundation:
|
shared_preferences_foundation:
|
||||||
:path: ".symlinks/plugins/shared_preferences_foundation/ios"
|
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
|
||||||
stack_wallet_backup:
|
stack_wallet_backup:
|
||||||
:path: ".symlinks/plugins/stack_wallet_backup/ios"
|
:path: ".symlinks/plugins/stack_wallet_backup/ios"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
|
@ -244,13 +239,12 @@ EXTERNAL SOURCES:
|
||||||
:path: ".symlinks/plugins/wakelock/ios"
|
:path: ".symlinks/plugins/wakelock/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
app_settings: d103828c9f5d515c4df9ee754dabd443f7cedcf3
|
|
||||||
barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0
|
barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0
|
||||||
connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e
|
connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a
|
||||||
cw_monero: 9816991daff0e3ad0a8be140e31933b5526babd4
|
cw_monero: 9816991daff0e3ad0a8be140e31933b5526babd4
|
||||||
cw_shared_external: 2972d872b8917603478117c9957dfca611845a92
|
cw_shared_external: 2972d872b8917603478117c9957dfca611845a92
|
||||||
cw_wownero: ac53899fa5c6ff46b3fb490aa3b7ca36301fa832
|
cw_wownero: ac53899fa5c6ff46b3fb490aa3b7ca36301fa832
|
||||||
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
device_info_plus: 7545d84d8d1b896cb16a4ff98c19f07ec4b298ea
|
||||||
devicelocale: b22617f40038496deffba44747101255cee005b0
|
devicelocale: b22617f40038496deffba44747101255cee005b0
|
||||||
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
||||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||||
|
@ -260,23 +254,23 @@ SPEC CHECKSUMS:
|
||||||
flutter_libmonero: da68a616b73dd0374a8419c684fa6b6df2c44ffe
|
flutter_libmonero: da68a616b73dd0374a8419c684fa6b6df2c44ffe
|
||||||
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
|
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
|
||||||
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
||||||
flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
|
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
|
||||||
integration_test: a1e7d09bd98eca2fc37aefd79d4f41ad37bdbbe5
|
integration_test: 13825b8a9334a850581300559b8839134b124670
|
||||||
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
||||||
lelantus: 417f0221260013dfc052cae9cf4b741b6479edba
|
lelantus: 417f0221260013dfc052cae9cf4b741b6479edba
|
||||||
local_auth: 1740f55d7af0a2e2a8684ce225fe79d8931e808c
|
local_auth: 1740f55d7af0a2e2a8684ce225fe79d8931e808c
|
||||||
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
|
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
|
||||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7
|
||||||
path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852
|
path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8
|
||||||
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
|
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
|
||||||
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
||||||
SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866
|
SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866
|
||||||
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
|
share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028
|
||||||
shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca
|
shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c
|
||||||
stack_wallet_backup: 5b8563aba5d8ffbf2ce1944331ff7294a0ec7c03
|
stack_wallet_backup: 5b8563aba5d8ffbf2ce1944331ff7294a0ec7c03
|
||||||
SwiftProtobuf: 6ef3f0e422ef90d6605ca20b21a94f6c1324d6b3
|
SwiftProtobuf: 6ef3f0e422ef90d6605ca20b21a94f6c1324d6b3
|
||||||
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
|
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
|
||||||
url_launcher_ios: fb12c43172927bb5cf75aeebd073f883801f1993
|
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
||||||
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
|
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
|
||||||
|
|
||||||
PODFILE CHECKSUM: 57c8aed26fba39d3ec9424816221f294a07c58eb
|
PODFILE CHECKSUM: 57c8aed26fba39d3ec9424816221f294a07c58eb
|
||||||
|
|
|
@ -242,6 +242,7 @@
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
|
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||||
);
|
);
|
||||||
name = "Thin Binary";
|
name = "Thin Binary";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
|
@ -301,7 +302,6 @@
|
||||||
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
|
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework",
|
"${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
|
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/app_settings/app_settings.framework",
|
|
||||||
"${BUILT_PRODUCTS_DIR}/barcode_scan2/barcode_scan2.framework",
|
"${BUILT_PRODUCTS_DIR}/barcode_scan2/barcode_scan2.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/connectivity_plus/connectivity_plus.framework",
|
"${BUILT_PRODUCTS_DIR}/connectivity_plus/connectivity_plus.framework",
|
||||||
"${BUILT_PRODUCTS_DIR}/cw_monero/cw_monero.framework",
|
"${BUILT_PRODUCTS_DIR}/cw_monero/cw_monero.framework",
|
||||||
|
@ -335,7 +335,6 @@
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/app_settings.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan2.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan2.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity_plus.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity_plus.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/cw_monero.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/cw_monero.framework",
|
||||||
|
@ -505,7 +504,10 @@
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
|
@ -692,7 +694,10 @@
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
|
@ -771,7 +776,10 @@
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
|
|
|
@ -21,7 +21,7 @@ class LocaleService extends ChangeNotifier {
|
||||||
Future<void> loadLocale({bool notify = true}) async {
|
Future<void> loadLocale({bool notify = true}) async {
|
||||||
_locale = Platform.isWindows
|
_locale = Platform.isWindows
|
||||||
? "en_US"
|
? "en_US"
|
||||||
: await Devicelocale.currentLocale ?? "en_US";
|
: (await Devicelocale.currentAsLocale)?.toString() ?? "en_US";
|
||||||
if (notify) {
|
if (notify) {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,11 +10,11 @@
|
||||||
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:bitbox/bitbox.dart' as bitbox;
|
||||||
import 'package:bitcoindart/bitcoindart.dart';
|
import 'package:bitcoindart/bitcoindart.dart';
|
||||||
import 'package:crypto/crypto.dart';
|
import 'package:crypto/crypto.dart';
|
||||||
import 'package:flutter_libepiccash/epic_cash.dart';
|
import 'package:flutter_libepiccash/epic_cash.dart';
|
||||||
import 'package:nanodart/nanodart.dart';
|
import 'package:nanodart/nanodart.dart';
|
||||||
import 'package:stackwallet/services/coins/bitcoincash/bitcoincash_wallet.dart';
|
|
||||||
import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart';
|
import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/ecash/ecash_wallet.dart';
|
import 'package:stackwallet/services/coins/ecash/ecash_wallet.dart';
|
||||||
import 'package:stackwallet/services/coins/firo/firo_wallet.dart';
|
import 'package:stackwallet/services/coins/firo/firo_wallet.dart';
|
||||||
|
@ -64,7 +64,27 @@ class AddressUtils {
|
||||||
case Coin.litecoin:
|
case Coin.litecoin:
|
||||||
return Address.validateAddress(address, litecoin);
|
return Address.validateAddress(address, litecoin);
|
||||||
case Coin.bitcoincash:
|
case Coin.bitcoincash:
|
||||||
return Address.validateAddress(address, bitcoincash);
|
try {
|
||||||
|
// 0 for bitcoincash: address scheme, 1 for legacy address
|
||||||
|
final format = bitbox.Address.detectFormat(address);
|
||||||
|
|
||||||
|
if (coin == Coin.bitcoincashTestnet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format == bitbox.Address.formatCashAddr) {
|
||||||
|
String addr = address;
|
||||||
|
if (addr.contains(":")) {
|
||||||
|
addr = addr.split(":").last;
|
||||||
|
}
|
||||||
|
|
||||||
|
return addr.startsWith("q");
|
||||||
|
} else {
|
||||||
|
return address.startsWith("1");
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
case Coin.dogecoin:
|
case Coin.dogecoin:
|
||||||
return Address.validateAddress(address, dogecoin);
|
return Address.validateAddress(address, dogecoin);
|
||||||
case Coin.epicCash:
|
case Coin.epicCash:
|
||||||
|
@ -94,7 +114,27 @@ class AddressUtils {
|
||||||
case Coin.litecoinTestNet:
|
case Coin.litecoinTestNet:
|
||||||
return Address.validateAddress(address, litecointestnet);
|
return Address.validateAddress(address, litecointestnet);
|
||||||
case Coin.bitcoincashTestnet:
|
case Coin.bitcoincashTestnet:
|
||||||
return Address.validateAddress(address, bitcoincashtestnet);
|
try {
|
||||||
|
// 0 for bitcoincash: address scheme, 1 for legacy address
|
||||||
|
final format = bitbox.Address.detectFormat(address);
|
||||||
|
|
||||||
|
if (coin == Coin.bitcoincashTestnet) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format == bitbox.Address.formatCashAddr) {
|
||||||
|
String addr = address;
|
||||||
|
if (addr.contains(":")) {
|
||||||
|
addr = addr.split(":").last;
|
||||||
|
}
|
||||||
|
|
||||||
|
return addr.startsWith("q");
|
||||||
|
} else {
|
||||||
|
return address.startsWith("1");
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
case Coin.firoTestNet:
|
case Coin.firoTestNet:
|
||||||
return Address.validateAddress(address, firoTestNetwork);
|
return Address.validateAddress(address, firoTestNetwork);
|
||||||
case Coin.dogecoinTestNet:
|
case Coin.dogecoinTestNet:
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:decimal/decimal.dart';
|
import 'package:decimal/decimal.dart';
|
||||||
import 'package:intl/number_symbols.dart';
|
import 'package:stackwallet/utilities/util.dart';
|
||||||
import 'package:intl/number_symbols_data.dart';
|
|
||||||
|
|
||||||
class Amount {
|
class Amount {
|
||||||
Amount({
|
Amount({
|
||||||
|
@ -52,8 +51,7 @@ class Amount {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get number symbols for decimal place and group separator
|
// get number symbols for decimal place and group separator
|
||||||
final numberSymbols = numberFormatSymbols[locale] as NumberSymbols? ??
|
final numberSymbols = Util.getSymbolsFor(locale: locale);
|
||||||
numberFormatSymbols[locale.substring(0, 2)] as NumberSymbols?;
|
|
||||||
|
|
||||||
final groupSeparator = numberSymbols?.GROUP_SEP ?? ",";
|
final groupSeparator = numberSymbols?.GROUP_SEP ?? ",";
|
||||||
final decimalSeparator = numberSymbols?.DECIMAL_SEP ?? ".";
|
final decimalSeparator = numberSymbols?.DECIMAL_SEP ?? ".";
|
||||||
|
@ -101,8 +99,7 @@ class Amount {
|
||||||
final wholeNumber = decimal.truncate();
|
final wholeNumber = decimal.truncate();
|
||||||
|
|
||||||
// get number symbols for decimal place and group separator
|
// get number symbols for decimal place and group separator
|
||||||
final numberSymbols = numberFormatSymbols[locale] as NumberSymbols? ??
|
final numberSymbols = Util.getSymbolsFor(locale: locale);
|
||||||
numberFormatSymbols[locale.substring(0, 2)] as NumberSymbols?;
|
|
||||||
|
|
||||||
final String separator = numberSymbols?.DECIMAL_SEP ?? ".";
|
final String separator = numberSymbols?.DECIMAL_SEP ?? ".";
|
||||||
|
|
||||||
|
|
|
@ -22,11 +22,13 @@ final pMaxDecimals = Provider.family<int, Coin>(
|
||||||
);
|
);
|
||||||
|
|
||||||
final pAmountFormatter = Provider.family<AmountFormatter, Coin>((ref, coin) {
|
final pAmountFormatter = Provider.family<AmountFormatter, Coin>((ref, coin) {
|
||||||
|
final locale = ref.watch(
|
||||||
|
localeServiceChangeNotifierProvider.select((value) => value.locale),
|
||||||
|
);
|
||||||
|
|
||||||
return AmountFormatter(
|
return AmountFormatter(
|
||||||
unit: ref.watch(pAmountUnit(coin)),
|
unit: ref.watch(pAmountUnit(coin)),
|
||||||
locale: ref.watch(
|
locale: locale,
|
||||||
localeServiceChangeNotifierProvider.select((value) => value.locale),
|
|
||||||
),
|
|
||||||
coin: coin,
|
coin: coin,
|
||||||
maxDecimals: ref.watch(pMaxDecimals(coin)),
|
maxDecimals: ref.watch(pMaxDecimals(coin)),
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:intl/number_symbols.dart';
|
|
||||||
import 'package:intl/number_symbols_data.dart';
|
|
||||||
import 'package:stackwallet/utilities/amount/amount_unit.dart';
|
import 'package:stackwallet/utilities/amount/amount_unit.dart';
|
||||||
|
import 'package:stackwallet/utilities/util.dart';
|
||||||
|
|
||||||
class AmountInputFormatter extends TextInputFormatter {
|
class AmountInputFormatter extends TextInputFormatter {
|
||||||
final int decimals;
|
final int decimals;
|
||||||
|
@ -20,8 +19,7 @@ class AmountInputFormatter extends TextInputFormatter {
|
||||||
TextEditingValue formatEditUpdate(
|
TextEditingValue formatEditUpdate(
|
||||||
TextEditingValue oldValue, TextEditingValue newValue) {
|
TextEditingValue oldValue, TextEditingValue newValue) {
|
||||||
// get number symbols for decimal place and group separator
|
// get number symbols for decimal place and group separator
|
||||||
final numberSymbols = numberFormatSymbols[locale] as NumberSymbols? ??
|
final numberSymbols = Util.getSymbolsFor(locale: locale);
|
||||||
numberFormatSymbols[locale.substring(0, 2)] as NumberSymbols?;
|
|
||||||
|
|
||||||
final decimalSeparator = numberSymbols?.DECIMAL_SEP ?? ".";
|
final decimalSeparator = numberSymbols?.DECIMAL_SEP ?? ".";
|
||||||
final groupSeparator = numberSymbols?.GROUP_SEP ?? ",";
|
final groupSeparator = numberSymbols?.GROUP_SEP ?? ",";
|
||||||
|
|
|
@ -11,11 +11,10 @@
|
||||||
import 'dart:math' as math;
|
import 'dart:math' as math;
|
||||||
|
|
||||||
import 'package:decimal/decimal.dart';
|
import 'package:decimal/decimal.dart';
|
||||||
import 'package:intl/number_symbols.dart';
|
|
||||||
import 'package:intl/number_symbols_data.dart';
|
|
||||||
import 'package:stackwallet/models/isar/models/ethereum/eth_contract.dart';
|
import 'package:stackwallet/models/isar/models/ethereum/eth_contract.dart';
|
||||||
import 'package:stackwallet/utilities/amount/amount.dart';
|
import 'package:stackwallet/utilities/amount/amount.dart';
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
import 'package:stackwallet/utilities/util.dart';
|
||||||
|
|
||||||
// preserve index order as index is used to store value in preferences
|
// preserve index order as index is used to store value in preferences
|
||||||
enum AmountUnit {
|
enum AmountUnit {
|
||||||
|
@ -188,8 +187,7 @@ extension AmountUnitExt on AmountUnit {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get number symbols for decimal place and group separator
|
// get number symbols for decimal place and group separator
|
||||||
final numberSymbols = numberFormatSymbols[locale] as NumberSymbols? ??
|
final numberSymbols = Util.getSymbolsFor(locale: locale);
|
||||||
numberFormatSymbols[locale.substring(0, 2)] as NumberSymbols?;
|
|
||||||
|
|
||||||
final groupSeparator = numberSymbols?.GROUP_SEP ?? ",";
|
final groupSeparator = numberSymbols?.GROUP_SEP ?? ",";
|
||||||
final decimalSeparator = numberSymbols?.DECIMAL_SEP ?? ".";
|
final decimalSeparator = numberSymbols?.DECIMAL_SEP ?? ".";
|
||||||
|
@ -237,8 +235,7 @@ extension AmountUnitExt on AmountUnit {
|
||||||
String returnValue = wholeNumber.toString();
|
String returnValue = wholeNumber.toString();
|
||||||
|
|
||||||
// get number symbols for decimal place and group separator
|
// get number symbols for decimal place and group separator
|
||||||
final numberSymbols = numberFormatSymbols[locale] as NumberSymbols? ??
|
final numberSymbols = Util.getSymbolsFor(locale: locale);
|
||||||
numberFormatSymbols[locale.substring(0, 2)] as NumberSymbols?;
|
|
||||||
|
|
||||||
// insert group separator
|
// insert group separator
|
||||||
final regex = RegExp(r'\B(?=(\d{3})+(?!\d))');
|
final regex = RegExp(r'\B(?=(\d{3})+(?!\d))');
|
||||||
|
|
|
@ -14,11 +14,21 @@ import 'dart:io';
|
||||||
|
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:intl/number_symbols.dart';
|
||||||
|
import 'package:intl/number_symbols_data.dart';
|
||||||
|
|
||||||
abstract class Util {
|
abstract class Util {
|
||||||
static Directory? libraryPath;
|
static Directory? libraryPath;
|
||||||
static double? screenWidth;
|
static double? screenWidth;
|
||||||
|
|
||||||
|
static NumberSymbols? getSymbolsFor({required String locale}) {
|
||||||
|
return numberFormatSymbols[locale] as NumberSymbols? ??
|
||||||
|
numberFormatSymbols[locale.replaceAll("-", "_")] as NumberSymbols? ??
|
||||||
|
numberFormatSymbols[locale.substring(3).toLowerCase()]
|
||||||
|
as NumberSymbols? ??
|
||||||
|
numberFormatSymbols[locale.substring(0, 2)] as NumberSymbols?;
|
||||||
|
}
|
||||||
|
|
||||||
static bool get isDesktop {
|
static bool get isDesktop {
|
||||||
// special check for running on linux based phones
|
// special check for running on linux based phones
|
||||||
if (Platform.isLinux && screenWidth != null && screenWidth! < 800) {
|
if (Platform.isLinux && screenWidth != null && screenWidth! < 800) {
|
||||||
|
|
Loading…
Reference in a new issue