diff --git a/assets/electrum_server_list.yml b/assets/electrum_server_list.yml index 0331f42ea..661cadc9c 100644 --- a/assets/electrum_server_list.yml +++ b/assets/electrum_server_list.yml @@ -1,4 +1,2 @@ - - uri: electrum2.hodlister.co:50002 -- - uri: bitcoin.electrumx.multicoin.co:50002 \ No newline at end of file + uri: electrumx.cakewallet.com:50002 \ No newline at end of file diff --git a/assets/images/2.0x/backup.png b/assets/images/2.0x/backup.png index 044e494a9..5cf40bba7 100644 Binary files a/assets/images/2.0x/backup.png and b/assets/images/2.0x/backup.png differ diff --git a/assets/images/2.0x/restore_keys.png b/assets/images/2.0x/restore_keys.png index db52a8a2f..6a90ef2c2 100644 Binary files a/assets/images/2.0x/restore_keys.png and b/assets/images/2.0x/restore_keys.png differ diff --git a/assets/images/2.0x/restore_seed.png b/assets/images/2.0x/restore_seed.png index ae32393cc..2bbea22cf 100644 Binary files a/assets/images/2.0x/restore_seed.png and b/assets/images/2.0x/restore_seed.png differ diff --git a/assets/images/2.0x/restore_wallet_image.png b/assets/images/2.0x/restore_wallet_image.png index 85c913533..3e3aecb91 100644 Binary files a/assets/images/2.0x/restore_wallet_image.png and b/assets/images/2.0x/restore_wallet_image.png differ diff --git a/assets/images/3.0x/backup.png b/assets/images/3.0x/backup.png index 48737c9b2..5971200dc 100644 Binary files a/assets/images/3.0x/backup.png and b/assets/images/3.0x/backup.png differ diff --git a/assets/images/3.0x/restore_keys.png b/assets/images/3.0x/restore_keys.png index 05cf12ed7..1d7301275 100644 Binary files a/assets/images/3.0x/restore_keys.png and b/assets/images/3.0x/restore_keys.png differ diff --git a/assets/images/3.0x/restore_seed.png b/assets/images/3.0x/restore_seed.png index addaf2cd0..de1a10bb7 100644 Binary files a/assets/images/3.0x/restore_seed.png and b/assets/images/3.0x/restore_seed.png differ diff --git a/assets/images/3.0x/restore_wallet_image.png b/assets/images/3.0x/restore_wallet_image.png index e96af8782..6a6fdd775 100644 Binary files a/assets/images/3.0x/restore_wallet_image.png and b/assets/images/3.0x/restore_wallet_image.png differ diff --git a/assets/images/backup.png b/assets/images/backup.png index e7948fba8..665128ac3 100644 Binary files a/assets/images/backup.png and b/assets/images/backup.png differ diff --git a/assets/images/restore_keys.png b/assets/images/restore_keys.png index cc1d80691..bbb7890f1 100644 Binary files a/assets/images/restore_keys.png and b/assets/images/restore_keys.png differ diff --git a/assets/images/restore_seed.png b/assets/images/restore_seed.png index 6a3ca415e..938cac4dd 100644 Binary files a/assets/images/restore_seed.png and b/assets/images/restore_seed.png differ diff --git a/assets/images/restore_wallet_image.png b/assets/images/restore_wallet_image.png index 4bd343eb3..9fee53f1d 100644 Binary files a/assets/images/restore_wallet_image.png and b/assets/images/restore_wallet_image.png differ diff --git a/cw_monero/pubspec.lock b/cw_monero/pubspec.lock index f462e288d..0aa42cd07 100644 --- a/cw_monero/pubspec.lock +++ b/cw_monero/pubspec.lock @@ -7,42 +7,42 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.0.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.14.12" convert: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" ffi: dependency: "direct main" description: @@ -80,7 +80,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.12" matcher: dependency: transitive description: @@ -109,13 +109,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.4.0" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.0+1" petitparser: dependency: transitive description: @@ -136,7 +129,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.3" sky_engine: dependency: transitive description: flutter @@ -148,7 +141,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.7.0" stack_trace: dependency: transitive description: @@ -183,7 +176,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.15" typed_data: dependency: transitive description: @@ -204,7 +197,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.6.1" sdks: dart: ">=2.6.0 <3.0.0" flutter: ">=0.1.4 <2.0.0" diff --git a/ios/Podfile b/ios/Podfile index 78d39756e..6697f0a53 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -15,59 +15,72 @@ def parse_KV_file(file, separator='=') if !File.exists? file_abs_path return []; end - pods_ary = [] + generated_key_values = {} skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) { |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - pods_ary.push({:name => podname, :path => podpath}); - else - puts "Invalid plugin specification: #{line}" - end - } - return pods_ary + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values end target 'Runner' do - # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock - # referring to absolute paths on developers' machines. use_frameworks! - system('rm -rf .symlinks') - system('mkdir -p .symlinks/plugins') + use_modular_headers! - # Flutter Pods - generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') - if generated_xcode_build_settings.empty? - puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first." - end - generated_xcode_build_settings.map { |p| - if p[:name] == 'FLUTTER_FRAMEWORK_DIR' - symlink = File.join('.symlinks', 'flutter') - File.symlink(File.dirname(p[:path]), symlink) - pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) + # Flutter Pod + + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" end - } + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' # Plugin Pods - plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.map { |p| - symlink = File.join('.symlinks', 'plugins', p[:name]) - File.symlink(p[:path], symlink) - pod p[:name], :path => File.join(symlink, 'ios') - } -end -# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. -install! 'cocoapods', :disable_input_output_paths => true + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| - config.build_settings['SWIFT_VERSION'] = '4.0' # required by simple_permission config.build_settings['ENABLE_BITCODE'] = 'NO' end end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 64e81a4e8..451d74c1f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -65,7 +65,7 @@ DEPENDENCIES: - cw_monero (from `.symlinks/plugins/cw_monero/ios`) - devicelocale (from `.symlinks/plugins/devicelocale/ios`) - esys_flutter_share (from `.symlinks/plugins/esys_flutter_share/ios`) - - Flutter (from `.symlinks/flutter/ios`) + - Flutter (from `Flutter`) - flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - local_auth (from `.symlinks/plugins/local_auth/ios`) @@ -98,7 +98,7 @@ EXTERNAL SOURCES: esys_flutter_share: :path: ".symlinks/plugins/esys_flutter_share/ios" Flutter: - :path: ".symlinks/flutter/ios" + :path: Flutter flutter_plugin_android_lifecycle: :path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios" flutter_secure_storage: @@ -157,6 +157,6 @@ SPEC CHECKSUMS: url_launcher_macos: fd7894421cd39320dce5f292fc99ea9270b2a313 url_launcher_web: e5527357f037c87560776e36436bf2b0288b965c -PODFILE CHECKSUM: f1916a43bb28badbd408be80e8e4b8652a74e93e +PODFILE CHECKSUM: c34e2287a9ccaa606aeceab922830efb9a6ff69a COCOAPODS: 1.9.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index cf8308171..822dd4355 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -272,9 +272,40 @@ files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${PODS_ROOT}/../Flutter/Flutter.framework", + "${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework", + "${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework", + "${BUILT_PRODUCTS_DIR}/barcode_scan/barcode_scan.framework", + "${BUILT_PRODUCTS_DIR}/cw_monero/cw_monero.framework", + "${BUILT_PRODUCTS_DIR}/devicelocale/devicelocale.framework", + "${BUILT_PRODUCTS_DIR}/esys_flutter_share/esys_flutter_share.framework", + "${BUILT_PRODUCTS_DIR}/flutter_plugin_android_lifecycle/flutter_plugin_android_lifecycle.framework", + "${BUILT_PRODUCTS_DIR}/flutter_secure_storage/flutter_secure_storage.framework", + "${BUILT_PRODUCTS_DIR}/local_auth/local_auth.framework", + "${BUILT_PRODUCTS_DIR}/package_info/package_info.framework", + "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework", + "${BUILT_PRODUCTS_DIR}/share/share.framework", + "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework", + "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/cw_monero.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/devicelocale.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/esys_flutter_share.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_plugin_android_lifecycle.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/local_auth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 65000c894..8f3d469bd 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,6 +2,8 @@ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> + <key>NSFaceIDUsageDescription</key> + <string>Enable Face ID for fast and secure access to wallets and private keys</string> <key>CFBundleDevelopmentRegion</key> <string>$(DEVELOPMENT_LANGUAGE)</string> <key>CFBundleExecutable</key> @@ -23,7 +25,7 @@ <key>LSRequiresIPhoneOS</key> <true/> <key>NSCameraUsageDescription</key> - <string>Cake Wallet requires access to your phone’s camera.</string> + <string>Used for scan QR code</string> <key>UILaunchStoryboardName</key> <string>LaunchScreen</string> <key>UIMainStoryboardFile</key> diff --git a/lib/bitcoin/electrum.dart b/lib/bitcoin/electrum.dart index bd1ac09ac..69d1c332f 100644 --- a/lib/bitcoin/electrum.dart +++ b/lib/bitcoin/electrum.dart @@ -6,6 +6,16 @@ import 'package:cake_wallet/bitcoin/script_hash.dart'; import 'package:flutter/foundation.dart'; import 'package:rxdart/rxdart.dart'; +class UriParseException implements Exception { + UriParseException(this.uri); + + final String uri; + + @override + String toString() => + 'Cannot parse host and port from uri. Invalid uri format. Uri: $uri'; +} + String jsonrpcparams(List<Object> params) { final _params = params?.map((val) => '"${val.toString()}"')?.join(','); return '[$_params]'; @@ -40,9 +50,14 @@ class ElectrumClient { Timer _aliveTimer; Future<void> connectToUri(String uri) async { - final _uri = Uri.parse(uri); - final host = _uri.scheme; - final port = int.parse(_uri.path); + final splittedUri = uri.split(':'); + + if (splittedUri.length != 2) { + throw UriParseException(uri); + } + + final host = splittedUri.first; + final port = int.parse(splittedUri.last); await connect(host: host, port: port); } @@ -51,7 +66,8 @@ class ElectrumClient { await socket?.close(); } catch (_) {} - socket = await SecureSocket.connect(host, port, timeout: connectionTimeout); + socket = await SecureSocket.connect(host, port, + timeout: connectionTimeout, onBadCertificate: (_) => true); _setIsConnected(true); socket.listen((Uint8List event) { @@ -87,7 +103,7 @@ class ElectrumClient { Future<void> ping() async { try { - await callWithTimeout(method: 'server.ping'); + // await callWithTimeout(method: 'server.ping'); _setIsConnected(true); } on RequestFailedTimeoutException catch (_) { _setIsConnected(false); diff --git a/lib/core/contact_service.dart b/lib/core/contact_service.dart index 73a5bed27..1141a1d06 100644 --- a/lib/core/contact_service.dart +++ b/lib/core/contact_service.dart @@ -12,7 +12,7 @@ class ContactService { Future add(Contact contact) async { await contactSource.add(contact); - contactListStore.contacts.add(contact); + // contactListStore.contacts.add(contact); } Future update(Contact contact) async { diff --git a/lib/di.dart b/lib/di.dart index 7c08d9e49..5453010ca 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -58,6 +58,7 @@ import 'package:mobx/mobx.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:cake_wallet/view_model/wallet_restoration_from_seed_vm.dart'; +import 'package:cake_wallet/view_model/wallet_restoration_from_keys_vm.dart'; import 'package:cake_wallet/core/wallet_creation_service.dart'; import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/src/domain/common/wallet_type.dart'; @@ -168,6 +169,16 @@ Future setup( type: type, language: language, seed: mnemonic); }); + getIt + .registerFactoryParam<WalletRestorationFromKeysVM, List, void>((args, _) { + final type = args.first as WalletType; + final language = args[1] as String; + + return WalletRestorationFromKeysVM( + getIt.get<WalletCreationService>(param1: type), walletInfoSource, + type: type, language: language); + }); + getIt.registerFactory<WalletAddressListViewModel>( () => WalletAddressListViewModel(wallet: getIt.get<AppStore>().wallet)); @@ -193,6 +204,10 @@ Future setup( getIt.registerFactory<AuthPage>( () => AuthPage( + allowBiometricalAuthentication: getIt + .get<AppStore>() + .settingsStore + .allowBiometricalAuthentication, authViewModel: getIt.get<AuthViewModel>(), onAuthenticationFinished: (isAuthenticated, __) { if (isAuthenticated) { @@ -204,10 +219,18 @@ Future setup( getIt .registerFactoryParam<AuthPage, void Function(bool, AuthPageState), void>( - (onAuthFinished, _) => AuthPage( - authViewModel: getIt.get<AuthViewModel>(), - onAuthenticationFinished: onAuthFinished, - closable: false)); + (onAuthFinished, _) { + final allowBiometricalAuthentication = + getIt.get<AppStore>().settingsStore.allowBiometricalAuthentication; + + print('allowBiometricalAuthentication $allowBiometricalAuthentication'); + + return AuthPage( + allowBiometricalAuthentication: allowBiometricalAuthentication, + authViewModel: getIt.get<AuthViewModel>(), + onAuthenticationFinished: onAuthFinished, + closable: false); + }); getIt.registerFactory<DashboardPage>(() => DashboardPage( walletViewModel: getIt.get<DashboardViewModel>(), @@ -294,14 +317,17 @@ Future setup( getIt.registerFactoryParam<ContactViewModel, Contact, void>( (Contact contact, _) => ContactViewModel( - getIt.get<ContactService>(), getIt.get<AppStore>().wallet, + contactSource, getIt.get<AppStore>().wallet, contact: contact)); getIt.registerFactory(() => ContactListViewModel( - getIt.get<AppStore>().contactListStore, getIt.get<ContactService>())); + getIt.get<AppStore>().contactListStore, + getIt.get<ContactService>(), + contactSource)); - getIt.registerFactory( - () => ContactListPage(getIt.get<ContactListViewModel>())); + getIt.registerFactoryParam<ContactListPage, bool, void>( + (bool isEditable, _) => ContactListPage(getIt.get<ContactListViewModel>(), + isEditable: isEditable)); getIt.registerFactoryParam<ContactPage, Contact, void>((Contact contact, _) => ContactPage(getIt.get<ContactViewModel>(param1: contact))); diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 5408734ae..2a63b3bae 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -14,7 +14,7 @@ class S implements WidgetsLocalizations { static S current; static const GeneratedLocalizationsDelegate delegate = - GeneratedLocalizationsDelegate(); + GeneratedLocalizationsDelegate(); static S of(BuildContext context) => Localizations.of<S>(context, S); @@ -30,7 +30,8 @@ class S implements WidgetsLocalizations { String get address_book => "Address Book"; String get address_book_menu => "Address book"; String get address_remove_contact => "Remove contact"; - String get address_remove_content => "Are you sure that you want to remove selected contact?"; + String get address_remove_content => + "Are you sure that you want to remove selected contact?"; String get addresses => "Addresses"; String get all => "ALL"; String get amount => "Amount: "; @@ -56,8 +57,10 @@ class S implements WidgetsLocalizations { String get choose_wallet_currency => "Please choose wallet currency:"; String get clear => "Clear"; String get confirm => "Confirm"; - String get confirm_delete_template => "This action will delete this template. Do you wish to continue?"; - String get confirm_delete_wallet => "This action will delete this wallet. Do you wish to continue?"; + String get confirm_delete_template => + "This action will delete this template. Do you wish to continue?"; + String get confirm_delete_wallet => + "This action will delete this wallet. Do you wish to continue?"; String get confirm_sending => "Confirm sending"; String get contact => "Contact"; String get contact_name => "Contact Name"; @@ -74,30 +77,43 @@ class S implements WidgetsLocalizations { String get enter_your_pin => "Enter your PIN"; String get enter_your_pin_again => "Enter your pin again"; String get error => "Error"; - String get error_text_account_name => "Account name can only contain letters, numbers\nand must be between 1 and 15 characters long"; - String get error_text_address => "Wallet address must correspond to the type\nof cryptocurrency"; + String get error_text_account_name => + "Account name can only contain letters, numbers\nand must be between 1 and 15 characters long"; + String get error_text_address => + "Wallet address must correspond to the type\nof cryptocurrency"; String get error_text_amount => "Amount can only contain numbers"; - String get error_text_contact_name => "Contact name can't contain ` , ' \" symbols\nand must be between 1 and 32 characters long"; - String get error_text_crypto_currency => "The number of fraction digits\nmust be less or equal to 12"; - String get error_text_fiat => "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2"; + String get error_text_contact_name => + "Contact name can't contain ` , ' \" symbols\nand must be between 1 and 32 characters long"; + String get error_text_crypto_currency => + "The number of fraction digits\nmust be less or equal to 12"; + String get error_text_fiat => + "Value of amount can't exceed available balance.\nThe number of fraction digits must be less or equal to 2"; String get error_text_keys => "Wallet keys can only contain 64 chars in hex"; String get error_text_node_address => "Please enter a iPv4 address"; - String get error_text_node_port => "Node port can only contain numbers between 0 and 65535"; - String get error_text_payment_id => "Payment ID can only contain from 16 to 64 chars in hex"; - String get error_text_subaddress_name => "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long"; - String get error_text_template => "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long"; - String get error_text_wallet_name => "Wallet name can only contain letters, numbers\nand must be between 1 and 15 characters long"; - String get error_text_xmr => "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12"; + String get error_text_node_port => + "Node port can only contain numbers between 0 and 65535"; + String get error_text_payment_id => + "Payment ID can only contain from 16 to 64 chars in hex"; + String get error_text_subaddress_name => + "Subaddress name can't contain ` , ' \" symbols\nand must be between 1 and 20 characters long"; + String get error_text_template => + "Template name and address can't contain ` , ' \" symbols\nand must be between 1 and 106 characters long"; + String get error_text_wallet_name => + "Wallet name can only contain letters, numbers\nand must be between 1 and 15 characters long"; + String get error_text_xmr => + "XMR value can't exceed available balance.\nThe number of fraction digits must be less or equal to 12"; String get estimated => "Estimated"; String get exchange => "Exchange"; String get exchange_new_template => "New template"; - String get exchange_result_write_down_ID => "*Please copy or write down your ID shown above."; - String get exchange_result_write_down_trade_id => "Please copy or write down the trade ID to continue."; + String get exchange_result_write_down_ID => + "*Please copy or write down your ID shown above."; + String get exchange_result_write_down_trade_id => + "Please copy or write down the trade ID to continue."; String get expired => "Expired"; String get faq => "FAQ"; String get fetching => "Fetching"; String get filters => "Filter"; - String get first_wallet_text => "Awesome wallet for Monero"; + String get first_wallet_text => "Awesome wallet for Monero and Bitcoin"; String get full_balance => "Full Balance"; String get hidden_balance => "Hidden Balance"; String get id => "ID: "; @@ -114,7 +130,8 @@ class S implements WidgetsLocalizations { String get node_port => "Node port"; String get node_reset_settings_title => "Reset settings"; String get nodes => "Nodes"; - String get nodes_list_reset_to_default_message => "Are you sure that you want to reset settings to default?"; + String get nodes_list_reset_to_default_message => + "Are you sure that you want to reset settings to default?"; String get offer_expires_in => "Offer expires in: "; String get ok => "OK"; String get openalias_alert_title => "XMR Recipient Detected"; @@ -125,10 +142,13 @@ class S implements WidgetsLocalizations { String get pending => " (pending)"; String get pin_is_incorrect => "PIN is incorrect"; String get placeholder_contacts => "Your contacts will be displayed here"; - String get placeholder_transactions => "Your transactions will be displayed here"; - String get please_make_selection => "Please make selection below to create or recover your wallet."; + String get placeholder_transactions => + "Your transactions will be displayed here"; + String get please_make_selection => + "Please make selection below to create or recover your wallet."; String get please_select => "Please select:"; - String get please_try_to_connect_to_another_node => "Please try to connect to another node"; + String get please_try_to_connect_to_another_node => + "Please try to connect to another node"; String get receive => "Receive"; String get receive_amount => "Amount"; String get received => "Received"; @@ -138,17 +158,28 @@ class S implements WidgetsLocalizations { String get refund_address => "Refund address"; String get remove => "Remove"; String get remove_node => "Remove node"; - String get remove_node_message => "Are you sure that you want to remove selected node?"; + String get remove_node_message => + "Are you sure that you want to remove selected node?"; String get rename => "Rename"; String get rescan => "Rescan"; String get reset => "Reset"; String get restore_active_seed => "Active seed"; String get restore_address => "Address"; - String get restore_description_from_backup => "You can restore the whole Cake Wallet app from your back-up file"; - String get restore_description_from_keys => "Restore your wallet from generated keystrokes saved from your private keys"; - String get restore_description_from_seed => "Restore your wallet from either the 25 word or 13 word combination code"; - String get restore_description_from_seed_keys => "Get back your wallet from seed/keys that you've saved to secure place"; - String get restore_from_seed_placeholder => "Please enter or paste your seed here"; + String get restore_bitcoin_description_from_keys => + "Restore your wallet from generated WIF string from your private keys"; + String get restore_bitcoin_description_from_seed => + "Restore your wallet from 12 word combination code"; + String get restore_bitcoin_title_from_keys => "Restore from WIF"; + String get restore_description_from_backup => + "You can restore the whole Cake Wallet app from your back-up file"; + String get restore_description_from_keys => + "Restore your wallet from generated keystrokes saved from your private keys"; + String get restore_description_from_seed => + "Restore your wallet from either the 25 word or 13 word combination code"; + String get restore_description_from_seed_keys => + "Get back your wallet from seed/keys that you've saved to secure place"; + String get restore_from_seed_placeholder => + "Please enter or paste your seed here"; String get restore_new_seed => "New seed"; String get restore_next => "Next"; String get restore_recover => "Restore"; @@ -199,7 +230,8 @@ class S implements WidgetsLocalizations { String get sending => "Sending"; String get sent => "Sent"; String get settings_all => "ALL"; - String get settings_allow_biometrical_authentication => "Allow biometrical authentication"; + String get settings_allow_biometrical_authentication => + "Allow biometrical authentication"; String get settings_change_language => "Change language"; String get settings_change_pin => "Change PIN"; String get settings_currency => "Currency"; @@ -289,7 +321,8 @@ class S implements WidgetsLocalizations { String get wallet_list_title => "Monero Wallet"; String get wallet_menu => "Menu"; String get wallet_name => "Wallet name"; - String get wallet_restoration_store_incorrect_seed_length => "Incorrect seed length"; + String get wallet_restoration_store_incorrect_seed_length => + "Incorrect seed length"; String get wallet_store_monero_wallet => "Monero Wallet"; String get wallets => "Wallets"; String get welcome => "Welcome to"; @@ -305,34 +338,58 @@ class S implements WidgetsLocalizations { String get you_will_get => "You will get"; String get you_will_send => "You will send"; String Blocks_remaining(String status) => "${status} Blocks Remaining"; - String change_current_node(String node) => "Are you sure to change current node to ${node}?"; - String change_language_to(String language) => "Change language to ${language}?"; - String commit_transaction_amount_fee(String amount, String fee) => "Commit transaction\nAmount: ${amount}\nFee: ${fee}"; + String change_current_node(String node) => + "Are you sure to change current node to ${node}?"; + String change_language_to(String language) => + "Change language to ${language}?"; + String commit_transaction_amount_fee(String amount, String fee) => + "Commit transaction\nAmount: ${amount}\nFee: ${fee}"; String copied_key_to_clipboard(String key) => "Copied ${key} to Clipboard"; - String error_text_limits_loading_failed(String provider) => "Trade for ${provider} is not created. Limits loading failed"; - String error_text_maximum_limit(String provider, String max, String currency) => "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}"; - String error_text_minimal_limit(String provider, String min, String currency) => "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}"; - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown above. Or you can send from your external wallet to the above address/QR code.\n\nPlease press confirm to continue or go back to change the amounts."; - String exchange_result_description(String fetchingLabel, String from) => "Please send ${fetchingLabel} ${from} to the address shown above."; - String failed_authentication(String state_error) => "Failed authentication. ${state_error}"; - String max_value(String value, String currency) => "Max: ${value} ${currency}"; - String min_value(String value, String currency) => "Min: ${value} ${currency}"; - String openalias_alert_content(String recipient_name) => "You will be sending funds to\n${recipient_name}"; + String error_text_limits_loading_failed(String provider) => + "Trade for ${provider} is not created. Limits loading failed"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "Trade for ${provider} is not created. Amount is more then maximum: ${max} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "Trade for ${provider} is not created. Amount is less then minimal: ${min} ${currency}"; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "By pressing confirm, you will be sending ${fetchingLabel} ${from} from your wallet called ${walletName} to the address shown above. Or you can send from your external wallet to the above address/QR code.\n\nPlease press confirm to continue or go back to change the amounts."; + String exchange_result_description(String fetchingLabel, String from) => + "Please send ${fetchingLabel} ${from} to the address shown above."; + String failed_authentication(String state_error) => + "Failed authentication. ${state_error}"; + String max_value(String value, String currency) => + "Max: ${value} ${currency}"; + String min_value(String value, String currency) => + "Min: ${value} ${currency}"; + String openalias_alert_content(String recipient_name) => + "You will be sending funds to\n${recipient_name}"; String powered_by(String title) => "Powered by ${title}"; String router_no_route(String name) => "No route defined for ${name}"; String send_address(String cryptoCurrency) => "${cryptoCurrency} address"; - String send_priority(String transactionPriority) => "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings"; + String send_priority(String transactionPriority) => + "Currently the fee is set at ${transactionPriority} priority.\nTransaction priority can be adjusted in the settings"; String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; String trade_details_copied(String title) => "${title} copied to Clipboard"; - String trade_for_not_created(String title) => "Trade for ${title} is not created."; - String trade_id_not_found(String tradeId, String title) => "Trade ${tradeId} of ${title} not found."; - String trade_is_powered_by(String provider) => "This trade is powered by ${provider}"; - String transaction_details_copied(String title) => "${title} copied to Clipboard"; + String trade_for_not_created(String title) => + "Trade for ${title} is not created."; + String trade_id_not_found(String tradeId, String title) => + "Trade ${tradeId} of ${title} not found."; + String trade_is_powered_by(String provider) => + "This trade is powered by ${provider}"; + String transaction_details_copied(String title) => + "${title} copied to Clipboard"; String version(String currentVersion) => "Version ${currentVersion}"; - String wallet_list_failed_to_load(String wallet_name, String error) => "Failed to load ${wallet_name} wallet. ${error}"; - String wallet_list_failed_to_remove(String wallet_name, String error) => "Failed to remove ${wallet_name} wallet. ${error}"; - String wallet_list_loading_wallet(String wallet_name) => "Loading ${wallet_name} wallet"; - String wallet_list_removing_wallet(String wallet_name) => "Removing ${wallet_name} wallet"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Failed to load ${wallet_name} wallet. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Failed to remove ${wallet_name} wallet. ${error}"; + String wallet_list_loading_wallet(String wallet_name) => + "Loading ${wallet_name} wallet"; + String wallet_list_removing_wallet(String wallet_name) => + "Removing ${wallet_name} wallet"; } class $de extends S { @@ -358,7 +415,8 @@ class $de extends S { @override String get hidden_balance => "Verstecktes Gleichgewicht"; @override - String get biometric_auth_reason => "Scannen Sie Ihren Fingerabdruck zur Authentifizierung"; + String get biometric_auth_reason => + "Scannen Sie Ihren Fingerabdruck zur Authentifizierung"; @override String get transaction_sent => "Transaktion gesendet!"; @override @@ -370,7 +428,8 @@ class $de extends S { @override String get trade_id => "Handel-ID:"; @override - String get restore_description_from_seed => "Stellen Sie Ihr Wallet aus den 25 Wörtern wieder her oder 13-Wort-Kombinationscode"; + String get restore_description_from_seed => + "Stellen Sie Ihr Wallet aus den 25 Wörtern wieder her oder 13-Wort-Kombinationscode"; @override String get trade_state_underpaid => "Unterbezahlt"; @override @@ -382,7 +441,8 @@ class $de extends S { @override String get send_templates => "Vorlagen"; @override - String get please_try_to_connect_to_another_node => "Bitte versuchen Sie, eine Verbindung zu einem anderen Knoten herzustellen"; + String get please_try_to_connect_to_another_node => + "Bitte versuchen Sie, eine Verbindung zu einem anderen Knoten herzustellen"; @override String get trade_state_traded => "Handeln"; @override @@ -396,7 +456,8 @@ class $de extends S { @override String get auth_store_banned_minutes => " Protokoll"; @override - String get restore_title_from_seed_keys => "Vom Seed / Schlüssel wiederherstellen"; + String get restore_title_from_seed_keys => + "Vom Seed / Schlüssel wiederherstellen"; @override String get settings_none => "Keiner"; @override @@ -416,7 +477,8 @@ class $de extends S { @override String get receive_amount => "Menge"; @override - String get settings_allow_biometrical_authentication => "Biometrische Authentifizierung zulassen"; + String get settings_allow_biometrical_authentication => + "Biometrische Authentifizierung zulassen"; @override String get view_key_private => "Schlüssel anzeigen (eheim)"; @override @@ -426,13 +488,16 @@ class $de extends S { @override String get send_sending => "Senden..."; @override - String get error_text_address => "Die Walletadresse muss dem Typ entsprechen\nder Kryptowährung"; + String get error_text_address => + "Die Walletadresse muss dem Typ entsprechen\nder Kryptowährung"; @override String get send_your_wallet => "Deine Geldbörse"; @override - String get remove_node_message => "Möchten Sie den ausgewählten Knoten wirklich entfernen?"; + String get remove_node_message => + "Möchten Sie den ausgewählten Knoten wirklich entfernen?"; @override - String get error_text_account_name => "Der Kontoname darf nur Wallet und Zahlen enthalten\nund muss zwischen 1 und 15 Zeichen lang sein"; + String get error_text_account_name => + "Der Kontoname darf nur Wallet und Zahlen enthalten\nund muss zwischen 1 und 15 Zeichen lang sein"; @override String get reconnection => "Wiederverbindung"; @override @@ -446,19 +511,22 @@ class $de extends S { @override String get reconnect => "Erneut verbinden"; @override - String get reconnect_alert_text => "Sind Sie sicher, dass Sie die Verbindung wiederherstellen möchten?"; + String get reconnect_alert_text => + "Sind Sie sicher, dass Sie die Verbindung wiederherstellen möchten?"; @override String get send_error_minimum_value => "Der Mindestbetrag beträgt 0,01"; @override String get copy_address => "Adresse kopieren"; @override - String get error_text_subaddress_name => "Der Name der Unteradresse darf nicht enthalten sein ` , ' \" symbole\nund muss zwischen 1 und 20 Zeichen lang sein"; + String get error_text_subaddress_name => + "Der Name der Unteradresse darf nicht enthalten sein ` , ' \" symbole\nund muss zwischen 1 und 20 Zeichen lang sein"; @override String get incorrect_seed => "Der eingegebene Text ist ungültig."; @override String get settings_all => "ALLE"; @override - String get nodes_list_reset_to_default_message => "Möchten Sie die Einstellungen wirklich auf die Standardeinstellungen zurücksetzen?"; + String get nodes_list_reset_to_default_message => + "Möchten Sie die Einstellungen wirklich auf die Standardeinstellungen zurücksetzen?"; @override String get receive => "Erhalten"; @override @@ -468,13 +536,15 @@ class $de extends S { @override String get trade_details_pair => "Paar"; @override - String get choose_wallet_currency => "Bitte wählen Sie die Brieftaschenwährung:"; + String get choose_wallet_currency => + "Bitte wählen Sie die Brieftaschenwährung:"; @override String get confirm => "Bestätigen"; @override String get settings_display_balance_as => "Kontostand anzeigen als"; @override - String get placeholder_transactions => "Ihre Transaktionen werden hier angezeigt"; + String get placeholder_transactions => + "Ihre Transaktionen werden hier angezeigt"; @override String get trade_details_provider => "Anbieter"; @override @@ -496,9 +566,13 @@ class $de extends S { @override String get settings_title => "die Einstellungen"; @override + String get restore_bitcoin_description_from_seed => + "Stellen Sie Ihre Brieftasche aus dem 12-Wort-Kombinationscode wieder her"; + @override String get address_book_menu => "Adressbuch"; @override - String get wallet_restoration_store_incorrect_seed_length => "Falsche Samenlänge"; + String get wallet_restoration_store_incorrect_seed_length => + "Falsche Samenlänge"; @override String get seed_language_spanish => "Spanisch"; @override @@ -520,15 +594,18 @@ class $de extends S { @override String get please_select => "Bitte auswählen:"; @override - String get restore_title_from_backup => "Aus einer Sicherungsdatei wiederherstellen"; + String get restore_title_from_backup => + "Aus einer Sicherungsdatei wiederherstellen"; @override String get full_balance => "Volle Balance"; @override String get sync_status_not_connected => "NICHT VERBUNDEN"; @override - String get error_text_crypto_currency => "Die Anzahl der Nachkommastellen\nmuss kleiner oder gleich 12 sein."; + String get error_text_crypto_currency => + "Die Anzahl der Nachkommastellen\nmuss kleiner oder gleich 12 sein."; @override - String get error_text_contact_name => "Kontaktname darf nicht enthalten sein ` , ' \" Symbole\nund muss zwischen 1 und 32 Zeichen lang sein"; + String get error_text_contact_name => + "Kontaktname darf nicht enthalten sein ` , ' \" Symbole\nund muss zwischen 1 und 32 Zeichen lang sein"; @override String get restore_seed_keys_restore => "Seed / Schlüssel wiederherstellen"; @override @@ -538,7 +615,8 @@ class $de extends S { @override String get exchange => "Austausch"; @override - String get sync_status_failed_connect => "Verbindung zum Knoten fehlgeschlagen"; + String get sync_status_failed_connect => + "Verbindung zum Knoten fehlgeschlagen"; @override String get send_estimated_fee => "Geschätzte Gebühr:"; @override @@ -590,7 +668,8 @@ class $de extends S { @override String get copy_id => "ID kopieren"; @override - String get please_make_selection => "Bitte treffen Sie unten eine Auswahl zu Erstellen oder Wiederherstellen Ihrer Brieftasche."; + String get please_make_selection => + "Bitte treffen Sie unten eine Auswahl zu Erstellen oder Wiederherstellen Ihrer Brieftasche."; @override String get loading_your_wallet => "Laden Sie Ihre Brieftasche"; @override @@ -600,11 +679,13 @@ class $de extends S { @override String get nodes => "Knoten"; @override - String get error_text_template => "Vorlagenname und Adresse dürfen nicht enthalten ` , ' \" symbole\nund muss zwischen 1 und 106 Zeichen lang sein"; + String get error_text_template => + "Vorlagenname und Adresse dürfen nicht enthalten ` , ' \" symbole\nund muss zwischen 1 und 106 Zeichen lang sein"; @override String get seed_share => "Teilen Sie Seed"; @override - String get widgets_restore_from_blockheight => "Aus Blockhöhe wiederherstellen"; + String get widgets_restore_from_blockheight => + "Aus Blockhöhe wiederherstellen"; @override String get seed_language_chinese => "Chinesisch"; @override @@ -626,11 +707,18 @@ class $de extends S { @override String get trade_state_complete => "Komplett"; @override - String get error_text_xmr => "Der XMR-Wert kann das verfügbare Guthaben nicht überschreiten.\nDie Anzahl der Nachkommastellen muss kleiner oder gleich 12 sein"; + String get error_text_xmr => + "Der XMR-Wert kann das verfügbare Guthaben nicht überschreiten.\nDie Anzahl der Nachkommastellen muss kleiner oder gleich 12 sein"; @override String get xmr_available_balance => "XMR verfügbares Guthaben"; @override - String get scan_qr_code => "Scannen Sie den QR-Code, um die Adresse zu erhalten"; + String get restore_bitcoin_description_from_keys => + "Stellen Sie Ihre Brieftasche aus der generierten WIF-Zeichenfolge aus Ihren privaten Schlüsseln wieder her"; + @override + String get restore_bitcoin_title_from_keys => "Aus WIF wiederherstellen"; + @override + String get scan_qr_code => + "Scannen Sie den QR-Code, um die Adresse zu erhalten"; @override String get trade_state_paid => "Bezahlt"; @override @@ -654,7 +742,8 @@ class $de extends S { @override String get wallet_name => "Walletname"; @override - String get error_text_payment_id => "Die Zahlungs-ID kann nur 16 bis 64 hexadezimale Zeichen enthalten"; + String get error_text_payment_id => + "Die Zahlungs-ID kann nur 16 bis 64 hexadezimale Zeichen enthalten"; @override String get node_reset_settings_title => "Einstellungen zurücksetzen"; @override @@ -676,7 +765,8 @@ class $de extends S { @override String get new_wallet => "Neues Wallet"; @override - String get settings_display_on_dashboard_list => "Anzeige in der Dashboard-Liste"; + String get settings_display_on_dashboard_list => + "Anzeige in der Dashboard-Liste"; @override String get transaction_details_title => "Transaktionsdetails"; @override @@ -706,7 +796,8 @@ class $de extends S { @override String get seed_language_dutch => "Niederländisch"; @override - String get restore_description_from_seed_keys => "Holen Sie sich Ihr Wallet von Seed / Schlüsseln zurück, die Sie an einem sicheren Ort aufbewahrt haben"; + String get restore_description_from_seed_keys => + "Holen Sie sich Ihr Wallet von Seed / Schlüsseln zurück, die Sie an einem sicheren Ort aufbewahrt haben"; @override String get copy => "Kopieren"; @override @@ -722,9 +813,11 @@ class $de extends S { @override String get contact_name => "Name des Ansprechpartners"; @override - String get exchange_result_write_down_ID => "*Bitte kopieren oder notieren Sie Ihren oben gezeigten Ausweis."; + String get exchange_result_write_down_ID => + "*Bitte kopieren oder notieren Sie Ihren oben gezeigten Ausweis."; @override - String get exchange_result_write_down_trade_id => "Bitte kopieren oder notieren Sie die Handel-ID, um fortzufahren."; + String get exchange_result_write_down_trade_id => + "Bitte kopieren oder notieren Sie die Handel-ID, um fortzufahren."; @override String get new_subaddress_title => "Neue Unteradresse"; @override @@ -736,7 +829,8 @@ class $de extends S { @override String get trade_not_created => "Handel nicht angelegt."; @override - String get confirm_delete_wallet => "Diese Aktion löscht diese Brieftasche. Möchten Sie fortfahren?"; + String get confirm_delete_wallet => + "Diese Aktion löscht diese Brieftasche. Möchten Sie fortfahren?"; @override String get restore_wallet_name => "Walletname"; @override @@ -746,7 +840,8 @@ class $de extends S { @override String get rename => "Umbenennen"; @override - String get confirm_delete_template => "Diese Aktion löscht diese Vorlage. Möchten Sie fortfahren?"; + String get confirm_delete_template => + "Diese Aktion löscht diese Vorlage. Möchten Sie fortfahren?"; @override String get restore_active_seed => "Aktives Seed"; @override @@ -762,13 +857,15 @@ class $de extends S { @override String get show_keys => "Schlüssel anzeigen"; @override - String get error_text_fiat => "Der Wert des Betrags darf den verfügbaren Kontostand nicht überschreiten.\nDie Anzahl der Nachkommastellen muss kleiner oder gleich 2 sein"; + String get error_text_fiat => + "Der Wert des Betrags darf den verfügbaren Kontostand nicht überschreiten.\nDie Anzahl der Nachkommastellen muss kleiner oder gleich 2 sein"; @override String get addresses => "Adressen"; @override String get transactions_by_date => "Transaktionen nach Datum"; @override - String get restore_from_seed_placeholder => "Bitte geben Sie hier Ihren Code ein"; + String get restore_from_seed_placeholder => + "Bitte geben Sie hier Ihren Code ein"; @override String get use => "Verwenden Sie "; @override @@ -794,9 +891,11 @@ class $de extends S { @override String get address_remove_contact => "Kontakt entfernen"; @override - String get error_text_wallet_name => "Der Wallet darf nur Buchstaben und Zahlen enthalten\nund muss zwischen 1 und 15 Zeichen lang sein"; + String get error_text_wallet_name => + "Der Wallet darf nur Buchstaben und Zahlen enthalten\nund muss zwischen 1 und 15 Zeichen lang sein"; @override - String get restore_description_from_keys => "Stellen Sie Ihr Wallet von generiert wieder her Tastenanschläge, die von Ihren privaten Schlüsseln gespeichert wurden"; + String get restore_description_from_keys => + "Stellen Sie Ihr Wallet von generiert wieder her Tastenanschläge, die von Ihren privaten Schlüsseln gespeichert wurden"; @override String get seed_language_next => "Nächster"; @override @@ -812,7 +911,8 @@ class $de extends S { @override String get send_title => "Senden Sie"; @override - String get error_text_keys => "Walletschlüssel können nur 64 hexadezimale Zeichen enthalten"; + String get error_text_keys => + "Walletschlüssel können nur 64 hexadezimale Zeichen enthalten"; @override String get settings_save_recipient_address => "Empfängeradresse speichern"; @override @@ -854,7 +954,8 @@ class $de extends S { @override String get restore_address => "Adresse"; @override - String get restore_wallet_restore_description => "Beschreibung zur Wiederherstellung der Brieftasche"; + String get restore_wallet_restore_description => + "Beschreibung zur Wiederherstellung der Brieftasche"; @override String get today => "Heute"; @override @@ -864,7 +965,8 @@ class $de extends S { @override String get ok => "OK"; @override - String get address_remove_content => "Sind Sie sicher, dass Sie den ausgewählten Kontakt entfernen möchten?"; + String get address_remove_content => + "Sind Sie sicher, dass Sie den ausgewählten Kontakt entfernen möchten?"; @override String get wallet_list_title => "Monero Wallet"; @override @@ -892,9 +994,11 @@ class $de extends S { @override String get restore_title_from_seed => "Aus Seed wiederherstellen"; @override - String get restore_description_from_backup => "Sie können die gesamte Cake Wallet-App von wiederherstellen Ihre Sicherungsdatei"; + String get restore_description_from_backup => + "Sie können die gesamte Cake Wallet-App von wiederherstellen Ihre Sicherungsdatei"; @override - String get error_text_node_port => "Der Knotenport kann nur Nummern zwischen 0 und 65535 enthalten"; + String get error_text_node_port => + "Der Knotenport kann nur Nummern zwischen 0 und 65535 enthalten"; @override String get add_new_word => "Neues Wort hinzufügen"; @override @@ -902,69 +1006,95 @@ class $de extends S { @override String get digit_pin => "-stelliger PIN"; @override - String get first_wallet_text => "tolle Brieftasche zum Monero"; + String get first_wallet_text => "tolle Brieftasche zum Monero und Bitcoin"; @override String get settings_trades => "Handel"; @override String get account => "Konto"; @override - String change_language_to(String language) => "Ändern Sie die Sprache in ${language}?"; + String change_language_to(String language) => + "Ändern Sie die Sprache in ${language}?"; @override - String change_current_node(String node) => "Möchten Sie den aktuellen Knoten wirklich auf ändern? ${node}?"; + String change_current_node(String node) => + "Möchten Sie den aktuellen Knoten wirklich auf ändern? ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Wird geladen ${wallet_name} Wallet"; + String wallet_list_loading_wallet(String wallet_name) => + "Wird geladen ${wallet_name} Wallet"; @override String version(String currentVersion) => "Ausführung ${currentVersion}"; @override String router_no_route(String name) => "Keine Route definiert für ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "Handel für ${provider} wird nicht erstellt. Menge ist weniger als minimal: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "Handel für ${provider} wird nicht erstellt. Menge ist weniger als minimal: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "Handel ${tradeId} von ${title} nicht gefunden."; + String trade_id_not_found(String tradeId, String title) => + "Handel ${tradeId} von ${title} nicht gefunden."; @override - String transaction_details_copied(String title) => "${title} in die Zwischenablage kopiert"; + String transaction_details_copied(String title) => + "${title} in die Zwischenablage kopiert"; @override - String trade_details_copied(String title) => "${title} in die Zwischenablage kopiert"; + String trade_details_copied(String title) => + "${title} in die Zwischenablage kopiert"; @override String powered_by(String title) => "Unterstützt von ${title}"; @override - String send_priority(String transactionPriority) => "Derzeit ist die Gebühr auf festgelegt ${transactionPriority} priorität.\nDie Transaktionspriorität kann in den Einstellungen angepasst werden"; + String send_priority(String transactionPriority) => + "Derzeit ist die Gebühr auf festgelegt ${transactionPriority} priorität.\nDie Transaktionspriorität kann in den Einstellungen angepasst werden"; @override - String trade_for_not_created(String title) => "Handel für ${title} wird nicht erstellt."; + String trade_for_not_created(String title) => + "Handel für ${title} wird nicht erstellt."; @override - String trade_is_powered_by(String provider) => "Dieser Handel wird betrieben von ${provider}"; + String trade_is_powered_by(String provider) => + "Dieser Handel wird betrieben von ${provider}"; @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "Max: ${value} ${currency}"; + String max_value(String value, String currency) => + "Max: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "Handel für ${provider} wird nicht erstellt. Menge ist mehr als maximal: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "Handel für ${provider} wird nicht erstellt. Menge ist mehr als maximal: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency}-Adresse"; @override - String min_value(String value, String currency) => "Mindest: ${value} ${currency}"; + String min_value(String value, String currency) => + "Mindest: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Authentifizierung fehlgeschlagen. ${state_error}"; + String failed_authentication(String state_error) => + "Authentifizierung fehlgeschlagen. ${state_error}"; @override String Blocks_remaining(String status) => "${status} Verbleibende Blöcke"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Durch Drücken von Bestätigen wird gesendet ${fetchingLabel} ${from} von Ihrer Brieftasche aus angerufen ${walletName} an die oben angegebene Adresse. Oder Sie können von Ihrem externen Portemonnaie an die oben angegebene Adresse / QR-Code senden.\n\nBitte bestätigen Sie, um fortzufahren, oder gehen Sie zurück, um die Beträge zu änderns."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Durch Drücken von Bestätigen wird gesendet ${fetchingLabel} ${from} von Ihrer Brieftasche aus angerufen ${walletName} an die oben angegebene Adresse. Oder Sie können von Ihrem externen Portemonnaie an die oben angegebene Adresse / QR-Code senden.\n\nBitte bestätigen Sie, um fortzufahren, oder gehen Sie zurück, um die Beträge zu änderns."; @override - String error_text_limits_loading_failed(String provider) => "Handel für ${provider} wird nicht erstellt. Das Laden der Limits ist fehlgeschlagen"; + String error_text_limits_loading_failed(String provider) => + "Handel für ${provider} wird nicht erstellt. Das Laden der Limits ist fehlgeschlagen"; @override - String exchange_result_description(String fetchingLabel, String from) => "Bitte senden ${fetchingLabel} ${from} an die oben angegebene Adresse.'"; + String exchange_result_description(String fetchingLabel, String from) => + "Bitte senden ${fetchingLabel} ${from} an die oben angegebene Adresse.'"; @override - String commit_transaction_amount_fee(String amount, String fee) => "Transaktion festschreiben\nMenge: ${amount}\nGebühr: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Transaktion festschreiben\nMenge: ${amount}\nGebühr: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "Sie senden Geld an\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "Sie senden Geld an\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Fehler beim Entfernen ${wallet_name} Wallet. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Fehler beim Entfernen ${wallet_name} Wallet. ${error}"; @override - String copied_key_to_clipboard(String key) => "Kopiert ${key} Zur Zwischenablage"; + String copied_key_to_clipboard(String key) => + "Kopiert ${key} Zur Zwischenablage"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "Laden fehlgeschlagen ${wallet_name} Wallet. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Laden fehlgeschlagen ${wallet_name} Wallet. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Entfernen ${wallet_name} Wallet"; + String wallet_list_removing_wallet(String wallet_name) => + "Entfernen ${wallet_name} Wallet"; } class $hi extends S { @@ -990,7 +1120,8 @@ class $hi extends S { @override String get hidden_balance => "छिपा हुआ संतुलन"; @override - String get biometric_auth_reason => "प्रमाणित करने के लिए अपने फ़िंगरप्रिंट को स्कैन करें"; + String get biometric_auth_reason => + "प्रमाणित करने के लिए अपने फ़िंगरप्रिंट को स्कैन करें"; @override String get transaction_sent => "भेजा गया लेन-देन"; @override @@ -1002,7 +1133,8 @@ class $hi extends S { @override String get trade_id => "व्यापार ID:"; @override - String get restore_description_from_seed => "या तो 25 शब्द से अपने वॉलेट को पुनर्स्थापित करें या 13 शब्द संयोजन कोड"; + String get restore_description_from_seed => + "या तो 25 शब्द से अपने वॉलेट को पुनर्स्थापित करें या 13 शब्द संयोजन कोड"; @override String get trade_state_underpaid => "के तहत भुगतान किया"; @override @@ -1014,7 +1146,8 @@ class $hi extends S { @override String get send_templates => "टेम्पलेट्स"; @override - String get please_try_to_connect_to_another_node => "कृपया दूसरे नोड से कनेक्ट करने का प्रयास करें"; + String get please_try_to_connect_to_another_node => + "कृपया दूसरे नोड से कनेक्ट करने का प्रयास करें"; @override String get trade_state_traded => "ट्रेडेड"; @override @@ -1028,7 +1161,8 @@ class $hi extends S { @override String get auth_store_banned_minutes => " मिनट"; @override - String get restore_title_from_seed_keys => "बीज / कुंजियों से पुनर्स्थापित करें"; + String get restore_title_from_seed_keys => + "बीज / कुंजियों से पुनर्स्थापित करें"; @override String get settings_none => "कोई नहीं"; @override @@ -1048,7 +1182,8 @@ class $hi extends S { @override String get receive_amount => "रकम"; @override - String get settings_allow_biometrical_authentication => "बायोमेट्रिक प्रमाणीकरण की अनुमति दें"; + String get settings_allow_biometrical_authentication => + "बायोमेट्रिक प्रमाणीकरण की अनुमति दें"; @override String get view_key_private => "कुंजी देखें(निजी)"; @override @@ -1058,13 +1193,16 @@ class $hi extends S { @override String get send_sending => "भेजना..."; @override - String get error_text_address => "वॉलेट पता प्रकार के अनुरूप होना चाहिए\nक्रिप्टोकरेंसी का"; + String get error_text_address => + "वॉलेट पता प्रकार के अनुरूप होना चाहिए\nक्रिप्टोकरेंसी का"; @override String get send_your_wallet => "आपका बटुआ"; @override - String get remove_node_message => "क्या आप वाकई चयनित नोड को निकालना चाहते हैं?"; + String get remove_node_message => + "क्या आप वाकई चयनित नोड को निकालना चाहते हैं?"; @override - String get error_text_account_name => "खाता नाम में केवल अक्षर, संख्याएं हो सकती हैं\nऔर 1 और 15 वर्णों के बीच लंबा होना चाहिए"; + String get error_text_account_name => + "खाता नाम में केवल अक्षर, संख्याएं हो सकती हैं\nऔर 1 और 15 वर्णों के बीच लंबा होना चाहिए"; @override String get reconnection => "पुनर्संयोजन"; @override @@ -1078,19 +1216,22 @@ class $hi extends S { @override String get reconnect => "रिकनेक्ट"; @override - String get reconnect_alert_text => "क्या आप पुन: कनेक्ट होना सुनिश्चित करते हैं?"; + String get reconnect_alert_text => + "क्या आप पुन: कनेक्ट होना सुनिश्चित करते हैं?"; @override String get send_error_minimum_value => "राशि का न्यूनतम मूल्य 0.01 है"; @override String get copy_address => "पता कॉपी करें"; @override - String get error_text_subaddress_name => "सबड्रेस नाम नहीं हो सकता` , ' \" प्रतीकों\nऔर 1 और 20 वर्णों के बीच लंबा होना चाहिए"; + String get error_text_subaddress_name => + "सबड्रेस नाम नहीं हो सकता` , ' \" प्रतीकों\nऔर 1 और 20 वर्णों के बीच लंबा होना चाहिए"; @override String get incorrect_seed => "दर्ज किया गया पाठ मान्य नहीं है।"; @override String get settings_all => "सब"; @override - String get nodes_list_reset_to_default_message => "क्या आप वाकई सेटिंग को डिफ़ॉल्ट पर रीसेट करना चाहते हैं?"; + String get nodes_list_reset_to_default_message => + "क्या आप वाकई सेटिंग को डिफ़ॉल्ट पर रीसेट करना चाहते हैं?"; @override String get receive => "प्राप्त करना"; @override @@ -1128,9 +1269,13 @@ class $hi extends S { @override String get settings_title => "सेटिंग्स"; @override + String get restore_bitcoin_description_from_seed => + "12 शब्द संयोजन कोड से अपने वॉलेट को पुनर्स्थापित करें"; + @override String get address_book_menu => "पता पुस्तिका"; @override - String get wallet_restoration_store_incorrect_seed_length => "गलत बीज की लंबाई"; + String get wallet_restoration_store_incorrect_seed_length => + "गलत बीज की लंबाई"; @override String get seed_language_spanish => "स्पेनिश"; @override @@ -1158,9 +1303,11 @@ class $hi extends S { @override String get sync_status_not_connected => "जुड़े नहीं हैं"; @override - String get error_text_crypto_currency => "अंश अंकों की संख्या\n12 से कम या इसके बराबर होना चाहिए"; + String get error_text_crypto_currency => + "अंश अंकों की संख्या\n12 से कम या इसके बराबर होना चाहिए"; @override - String get error_text_contact_name => "संपर्क नाम शामिल नहीं हो सकता ` , ' \" प्रतीकों\nऔर 1 और 32 वर्णों के बीच लंबा होना चाहिए"; + String get error_text_contact_name => + "संपर्क नाम शामिल नहीं हो सकता ` , ' \" प्रतीकों\nऔर 1 और 32 वर्णों के बीच लंबा होना चाहिए"; @override String get restore_seed_keys_restore => "बीज / कुंजी पुनर्स्थापित करें"; @override @@ -1222,7 +1369,8 @@ class $hi extends S { @override String get copy_id => "प्रतिलिपि ID"; @override - String get please_make_selection => "कृपया नीचे चयन करें अपना बटुआ बनाएं या पुनर्प्राप्त करें."; + String get please_make_selection => + "कृपया नीचे चयन करें अपना बटुआ बनाएं या पुनर्प्राप्त करें."; @override String get loading_your_wallet => "अपना बटुआ लोड कर रहा है"; @override @@ -1232,11 +1380,13 @@ class $hi extends S { @override String get nodes => "नोड्स"; @override - String get error_text_template => "टेम्प्लेट का नाम और पता नहीं हो सकता ` , ' \" प्रतीकों\nऔर 1 और 106 वर्णों के बीच लंबा होना चाहिए"; + String get error_text_template => + "टेम्प्लेट का नाम और पता नहीं हो सकता ` , ' \" प्रतीकों\nऔर 1 और 106 वर्णों के बीच लंबा होना चाहिए"; @override String get seed_share => "बीज साझा करें"; @override - String get widgets_restore_from_blockheight => "ब्लॉकचेन से पुनर्स्थापित करें"; + String get widgets_restore_from_blockheight => + "ब्लॉकचेन से पुनर्स्थापित करें"; @override String get seed_language_chinese => "चीनी"; @override @@ -1258,10 +1408,16 @@ class $hi extends S { @override String get trade_state_complete => "पूर्ण"; @override - String get error_text_xmr => "एक्सएमआर मूल्य उपलब्ध शेष राशि से अधिक नहीं हो सकता.\nअंश अंकों की संख्या 12 से कम या इसके बराबर होनी चाहिए"; + String get error_text_xmr => + "एक्सएमआर मूल्य उपलब्ध शेष राशि से अधिक नहीं हो सकता.\nअंश अंकों की संख्या 12 से कम या इसके बराबर होनी चाहिए"; @override String get xmr_available_balance => "XMR उपलब्ध शेष राशि"; @override + String get restore_bitcoin_description_from_keys => + "अपने निजी कुंजी से उत्पन्न WIF स्ट्रिंग से अपने वॉलेट को पुनर्स्थापित करें"; + @override + String get restore_bitcoin_title_from_keys => "WIF से पुनर्स्थापित करें"; + @override String get scan_qr_code => "पता प्राप्त करने के लिए QR कोड स्कैन करें"; @override String get trade_state_paid => "भुगतान किया है"; @@ -1286,7 +1442,8 @@ class $hi extends S { @override String get wallet_name => "बटुए का नाम"; @override - String get error_text_payment_id => "पेमेंट आईडी केवल हेक्स में 16 से 64 चार्ट तक हो सकती है"; + String get error_text_payment_id => + "पेमेंट आईडी केवल हेक्स में 16 से 64 चार्ट तक हो सकती है"; @override String get node_reset_settings_title => "सेटिंग्स को दुबारा करें"; @override @@ -1308,7 +1465,8 @@ class $hi extends S { @override String get new_wallet => "नया बटुआ"; @override - String get settings_display_on_dashboard_list => "डैशबोर्ड सूची पर प्रदर्शित करें"; + String get settings_display_on_dashboard_list => + "डैशबोर्ड सूची पर प्रदर्शित करें"; @override String get transaction_details_title => "लेनदेन का विवरण"; @override @@ -1338,7 +1496,8 @@ class $hi extends S { @override String get seed_language_dutch => "डच"; @override - String get restore_description_from_seed_keys => "अपने बटुए को बीज से वापस लें/वे कुंजियाँ जिन्हें आपने सुरक्षित स्थान पर सहेजा है"; + String get restore_description_from_seed_keys => + "अपने बटुए को बीज से वापस लें/वे कुंजियाँ जिन्हें आपने सुरक्षित स्थान पर सहेजा है"; @override String get copy => "प्रतिलिपि"; @override @@ -1354,9 +1513,11 @@ class $hi extends S { @override String get contact_name => "संपर्क नाम"; @override - String get exchange_result_write_down_ID => "*कृपया ऊपर दिखाए गए अपने ID को कॉपी या लिख लें."; + String get exchange_result_write_down_ID => + "*कृपया ऊपर दिखाए गए अपने ID को कॉपी या लिख लें."; @override - String get exchange_result_write_down_trade_id => "जारी रखने के लिए कृपया ट्रेड ID की प्रतिलिपि बनाएँ या लिखें."; + String get exchange_result_write_down_trade_id => + "जारी रखने के लिए कृपया ट्रेड ID की प्रतिलिपि बनाएँ या लिखें."; @override String get new_subaddress_title => "नई उपशादी"; @override @@ -1368,7 +1529,8 @@ class $hi extends S { @override String get trade_not_created => "व्यापार नहीं बनाया गया."; @override - String get confirm_delete_wallet => "यह क्रिया इस वॉलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?"; + String get confirm_delete_wallet => + "यह क्रिया इस वॉलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?"; @override String get restore_wallet_name => "बटुए का नाम"; @override @@ -1378,7 +1540,8 @@ class $hi extends S { @override String get rename => "नाम बदलें"; @override - String get confirm_delete_template => "यह क्रिया इस टेम्पलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?"; + String get confirm_delete_template => + "यह क्रिया इस टेम्पलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?"; @override String get restore_active_seed => "सक्रिय बीज"; @override @@ -1394,13 +1557,15 @@ class $hi extends S { @override String get show_keys => "चाबी दिखाओ"; @override - String get error_text_fiat => "राशि का मूल्य उपलब्ध शेष राशि से अधिक नहीं हो सकता.\nअंश अंकों की संख्या कम या 2 के बराबर होनी चाहिए"; + String get error_text_fiat => + "राशि का मूल्य उपलब्ध शेष राशि से अधिक नहीं हो सकता.\nअंश अंकों की संख्या कम या 2 के बराबर होनी चाहिए"; @override String get addresses => "पतों"; @override String get transactions_by_date => "तारीख से लेन-देन"; @override - String get restore_from_seed_placeholder => "कृपया अपना कोड वाक्यांश यहां दर्ज करें या पेस्ट करें"; + String get restore_from_seed_placeholder => + "कृपया अपना कोड वाक्यांश यहां दर्ज करें या पेस्ट करें"; @override String get use => "उपयोग "; @override @@ -1426,9 +1591,11 @@ class $hi extends S { @override String get address_remove_contact => "संपर्क हटाये"; @override - String get error_text_wallet_name => "वॉलेट नाम में केवल अक्षर, संख्याएं हो सकती हैं\nऔर 1 और 15 वर्णों के बीच लंबा होना चाहिए"; + String get error_text_wallet_name => + "वॉलेट नाम में केवल अक्षर, संख्याएं हो सकती हैं\nऔर 1 और 15 वर्णों के बीच लंबा होना चाहिए"; @override - String get restore_description_from_keys => "अपने वॉलेट को जेनरेट से पुनर्स्थापित करें आपकी निजी कुंजी से कीस्ट्रोक्स सहेजे गए"; + String get restore_description_from_keys => + "अपने वॉलेट को जेनरेट से पुनर्स्थापित करें आपकी निजी कुंजी से कीस्ट्रोक्स सहेजे गए"; @override String get seed_language_next => "आगामी"; @override @@ -1444,7 +1611,8 @@ class $hi extends S { @override String get send_title => "संदेश"; @override - String get error_text_keys => "वॉलेट कीज़ में हेक्स में केवल 64 वर्ण हो सकते हैं"; + String get error_text_keys => + "वॉलेट कीज़ में हेक्स में केवल 64 वर्ण हो सकते हैं"; @override String get settings_save_recipient_address => "प्राप्तकर्ता का पता सहेजें"; @override @@ -1486,7 +1654,8 @@ class $hi extends S { @override String get restore_address => "पता"; @override - String get restore_wallet_restore_description => "बटुआ विवरण पुनर्स्थापित करें"; + String get restore_wallet_restore_description => + "बटुआ विवरण पुनर्स्थापित करें"; @override String get today => "आज"; @override @@ -1496,7 +1665,8 @@ class $hi extends S { @override String get ok => "ठीक है"; @override - String get address_remove_content => "क्या आप वाकई चयनित संपर्क को हटाना चाहते हैं?"; + String get address_remove_content => + "क्या आप वाकई चयनित संपर्क को हटाना चाहते हैं?"; @override String get wallet_list_title => "Monero बटुआ"; @override @@ -1524,9 +1694,11 @@ class $hi extends S { @override String get restore_title_from_seed => "बीज से पुनर्स्थापित करें"; @override - String get restore_description_from_backup => "आप से पूरे केक वॉलेट एप्लिकेशन को पुनर्स्थापित कर सकते हैं आपकी बैक-अप फ़ाइल"; + String get restore_description_from_backup => + "आप से पूरे केक वॉलेट एप्लिकेशन को पुनर्स्थापित कर सकते हैं आपकी बैक-अप फ़ाइल"; @override - String get error_text_node_port => "नोड पोर्ट में केवल 0 और 65535 के बीच संख्याएँ हो सकती हैं"; + String get error_text_node_port => + "नोड पोर्ट में केवल 0 और 65535 के बीच संख्याएँ हो सकती हैं"; @override String get add_new_word => "नया शब्द जोड़ें"; @override @@ -1534,7 +1706,7 @@ class $hi extends S { @override String get digit_pin => "-अंक पिन"; @override - String get first_wallet_text => "बहुत बढ़िया बटुआ के लिये Monero"; + String get first_wallet_text => "बहुत बढ़िया बटुआ के लिये Monero तथा Bitcoin"; @override String get settings_trades => "ट्रेडों"; @override @@ -1542,61 +1714,86 @@ class $hi extends S { @override String change_language_to(String language) => "को भाषा बदलें ${language}?"; @override - String change_current_node(String node) => "क्या आप वर्तमान नोड को बदलना सुनिश्चित करते हैं ${node}?"; + String change_current_node(String node) => + "क्या आप वर्तमान नोड को बदलना सुनिश्चित करते हैं ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "लोड हो रहा है ${wallet_name} बटुआ"; + String wallet_list_loading_wallet(String wallet_name) => + "लोड हो रहा है ${wallet_name} बटुआ"; @override String version(String currentVersion) => "संस्करण ${currentVersion}"; @override - String router_no_route(String name) => "के लिए कोई मार्ग निर्धारित नहीं है ${name}"; + String router_no_route(String name) => + "के लिए कोई मार्ग निर्धारित नहीं है ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि कम है तो न्यूनतम: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि कम है तो न्यूनतम: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "व्यापार ${tradeId} of ${title} नहीं मिला."; + String trade_id_not_found(String tradeId, String title) => + "व्यापार ${tradeId} of ${title} नहीं मिला."; @override - String transaction_details_copied(String title) => "${title} क्लिपबोर्ड पर नकल"; + String transaction_details_copied(String title) => + "${title} क्लिपबोर्ड पर नकल"; @override String trade_details_copied(String title) => "${title} क्लिपबोर्ड पर नकल"; @override String powered_by(String title) => "द्वारा संचालित ${title}"; @override - String send_priority(String transactionPriority) => "वर्तमान में शुल्क निर्धारित है ${transactionPriority} प्राथमिकता.\nलेन-देन की प्राथमिकता को सेटिंग्स में समायोजित किया जा सकता है"; + String send_priority(String transactionPriority) => + "वर्तमान में शुल्क निर्धारित है ${transactionPriority} प्राथमिकता.\nलेन-देन की प्राथमिकता को सेटिंग्स में समायोजित किया जा सकता है"; @override - String trade_for_not_created(String title) => "के लिए व्यापार ${title} निर्मित नहीं है."; + String trade_for_not_created(String title) => + "के लिए व्यापार ${title} निर्मित नहीं है."; @override - String trade_is_powered_by(String provider) => "यह व्यापार द्वारा संचालित है ${provider}"; + String trade_is_powered_by(String provider) => + "यह व्यापार द्वारा संचालित है ${provider}"; @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "मैक्स: ${value} ${currency}"; + String max_value(String value, String currency) => + "मैक्स: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि अधिक है तो अधिकतम: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "व्यापार ${provider} के लिए नहीं बनाया गया है। राशि अधिक है तो अधिकतम: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} पता"; @override - String min_value(String value, String currency) => "मिन: ${value} ${currency}"; + String min_value(String value, String currency) => + "मिन: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "प्रमाणीकरण विफल. ${state_error}"; + String failed_authentication(String state_error) => + "प्रमाणीकरण विफल. ${state_error}"; @override String Blocks_remaining(String status) => "${status} शेष रहते हैं"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "पुष्टि दबाकर, आप भेज रहे होंगे ${fetchingLabel} ${from} अपने बटुए से ${walletName} ऊपर दिखाए गए पते पर। या आप अपने बाहरी वॉलेट से उपरोक्त पते / क्यूआर कोड पर भेज सकते हैं।\n\nकृपया जारी रखने या राशि बदलने के लिए वापस जाने के लिए पुष्टि करें दबाएं."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "पुष्टि दबाकर, आप भेज रहे होंगे ${fetchingLabel} ${from} अपने बटुए से ${walletName} ऊपर दिखाए गए पते पर। या आप अपने बाहरी वॉलेट से उपरोक्त पते / क्यूआर कोड पर भेज सकते हैं।\n\nकृपया जारी रखने या राशि बदलने के लिए वापस जाने के लिए पुष्टि करें दबाएं."; @override - String error_text_limits_loading_failed(String provider) => "व्यापार ${provider} के लिए नहीं बनाया गया है। लोडिंग की सीमाएं विफल रहीं"; + String error_text_limits_loading_failed(String provider) => + "व्यापार ${provider} के लिए नहीं बनाया गया है। लोडिंग की सीमाएं विफल रहीं"; @override - String exchange_result_description(String fetchingLabel, String from) => "कृपया भेजें ${fetchingLabel} ${from} ऊपर दिखाए गए पते पर"; + String exchange_result_description(String fetchingLabel, String from) => + "कृपया भेजें ${fetchingLabel} ${from} ऊपर दिखाए गए पते पर"; @override - String commit_transaction_amount_fee(String amount, String fee) => "लेन-देन करें\nरकम: ${amount}\nशुल्क: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "लेन-देन करें\nरकम: ${amount}\nशुल्क: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "आपको धनराशि भेजी जाएगी\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "आपको धनराशि भेजी जाएगी\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "निकालने में विफल ${wallet_name} बटुआ. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "निकालने में विफल ${wallet_name} बटुआ. ${error}"; @override - String copied_key_to_clipboard(String key) => "की नकल की ${key} क्लिपबोर्ड पर"; + String copied_key_to_clipboard(String key) => + "की नकल की ${key} क्लिपबोर्ड पर"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "लोड करने में विफल ${wallet_name} बटुआ. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "लोड करने में विफल ${wallet_name} बटुआ. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "निकाला जा रहा है ${wallet_name} बटुआ"; + String wallet_list_removing_wallet(String wallet_name) => + "निकाला जा रहा है ${wallet_name} बटुआ"; } class $ru extends S { @@ -1622,7 +1819,8 @@ class $ru extends S { @override String get hidden_balance => "Скрытый баланс"; @override - String get biometric_auth_reason => "Отсканируйте свой отпечаток пальца для аутентификации"; + String get biometric_auth_reason => + "Отсканируйте свой отпечаток пальца для аутентификации"; @override String get transaction_sent => "Tранзакция отправлена!"; @override @@ -1634,7 +1832,8 @@ class $ru extends S { @override String get trade_id => "ID сделки:"; @override - String get restore_description_from_seed => "Вы можете восстановить кошелёк используя 25-ти значную мнемоническую фразу"; + String get restore_description_from_seed => + "Вы можете восстановить кошелёк используя 25-ти значную мнемоническую фразу"; @override String get trade_state_underpaid => "Недоплаченная"; @override @@ -1646,7 +1845,8 @@ class $ru extends S { @override String get send_templates => "Шаблоны"; @override - String get please_try_to_connect_to_another_node => "Пожалуйста, попробуйте подключиться к другой ноде"; + String get please_try_to_connect_to_another_node => + "Пожалуйста, попробуйте подключиться к другой ноде"; @override String get trade_state_traded => "Сделка завершена"; @override @@ -1660,7 +1860,8 @@ class $ru extends S { @override String get auth_store_banned_minutes => " минут"; @override - String get restore_title_from_seed_keys => "Восстановить из мнемонической фразы/ключей"; + String get restore_title_from_seed_keys => + "Восстановить из мнемонической фразы/ключей"; @override String get settings_none => "Ничего"; @override @@ -1680,7 +1881,8 @@ class $ru extends S { @override String get receive_amount => "Сумма"; @override - String get settings_allow_biometrical_authentication => "Включить биометрическую аутентификацию"; + String get settings_allow_biometrical_authentication => + "Включить биометрическую аутентификацию"; @override String get view_key_private => "Приватный ключ просмотра"; @override @@ -1690,13 +1892,16 @@ class $ru extends S { @override String get send_sending => "Отправка..."; @override - String get error_text_address => "Адрес кошелька должен соответствовать типу\nкриптовалюты"; + String get error_text_address => + "Адрес кошелька должен соответствовать типу\nкриптовалюты"; @override String get send_your_wallet => "Ваш кошелёк"; @override - String get remove_node_message => "Вы уверены, что хотите удалить текущую ноду?"; + String get remove_node_message => + "Вы уверены, что хотите удалить текущую ноду?"; @override - String get error_text_account_name => "Имя аккаунта может содержать только буквы, цифры\nи должно быть от 1 до 15 символов в длину"; + String get error_text_account_name => + "Имя аккаунта может содержать только буквы, цифры\nи должно быть от 1 до 15 символов в длину"; @override String get reconnection => "Переподключение"; @override @@ -1704,7 +1909,8 @@ class $ru extends S { @override String get restore_title_from_keys => "Восстановить с помощью ключей"; @override - String get seed_language_choose => "Пожалуйста, выберите язык мнемонической фразы:"; + String get seed_language_choose => + "Пожалуйста, выберите язык мнемонической фразы:"; @override String get wallet_keys => "Ключи кошелька"; @override @@ -1716,13 +1922,15 @@ class $ru extends S { @override String get copy_address => "Cкопировать адрес"; @override - String get error_text_subaddress_name => "Имя субадреса не может содержать ` , ' \" символы\nи должно быть от 1 до 20 символов в длину"; + String get error_text_subaddress_name => + "Имя субадреса не может содержать ` , ' \" символы\nи должно быть от 1 до 20 символов в длину"; @override String get incorrect_seed => "Введённый текст некорректный."; @override String get settings_all => "ВСЕ"; @override - String get nodes_list_reset_to_default_message => "Вы уверены, что хотите сбросить настройки до значений по умолчанию?"; + String get nodes_list_reset_to_default_message => + "Вы уверены, что хотите сбросить настройки до значений по умолчанию?"; @override String get receive => "Получить"; @override @@ -1738,7 +1946,8 @@ class $ru extends S { @override String get settings_display_balance_as => "Отображать баланс как"; @override - String get placeholder_transactions => "Ваши транзакции будут отображаться здесь"; + String get placeholder_transactions => + "Ваши транзакции будут отображаться здесь"; @override String get trade_details_provider => "Провайдер"; @override @@ -1760,9 +1969,13 @@ class $ru extends S { @override String get settings_title => "Настройки"; @override + String get restore_bitcoin_description_from_seed => + "Вы можете восстановить кошелёк используя 12-ти значную мнемоническую фразу"; + @override String get address_book_menu => "Адресная книга"; @override - String get wallet_restoration_store_incorrect_seed_length => "Неверная длина мнемонической фразы"; + String get wallet_restoration_store_incorrect_seed_length => + "Неверная длина мнемонической фразы"; @override String get seed_language_spanish => "Испанский"; @override @@ -1790,11 +2003,14 @@ class $ru extends S { @override String get sync_status_not_connected => "НЕ ПОДКЛЮЧЁН"; @override - String get error_text_crypto_currency => "Количество цифр после запятой\nдолжно быть меньше или равно 12"; + String get error_text_crypto_currency => + "Количество цифр после запятой\nдолжно быть меньше или равно 12"; @override - String get error_text_contact_name => "Имя контакта не может содержать ` , ' \" символы\n и должно быть от 1 до 32 символов в длину"; + String get error_text_contact_name => + "Имя контакта не может содержать ` , ' \" символы\n и должно быть от 1 до 32 символов в длину"; @override - String get restore_seed_keys_restore => "Восстановить из мнемонической фразы/ключей"; + String get restore_seed_keys_restore => + "Восстановить из мнемонической фразы/ключей"; @override String get xmr_hidden => "XMR Скрыто"; @override @@ -1854,7 +2070,8 @@ class $ru extends S { @override String get copy_id => "Скопировать ID"; @override - String get please_make_selection => "Выберите способ создания кошелька: создать новый или восстановить ваш существующий."; + String get please_make_selection => + "Выберите способ создания кошелька: создать новый или восстановить ваш существующий."; @override String get loading_your_wallet => "Загрузка кошелька"; @override @@ -1864,7 +2081,8 @@ class $ru extends S { @override String get nodes => "Ноды"; @override - String get error_text_template => "Имя и адрес шаблона не может содержать ` , ' \" символы\nи должно быть от 1 до 106 символов в длину"; + String get error_text_template => + "Имя и адрес шаблона не может содержать ` , ' \" символы\nи должно быть от 1 до 106 символов в длину"; @override String get seed_share => "Поделиться мнемонической фразой"; @override @@ -1890,10 +2108,16 @@ class $ru extends S { @override String get trade_state_complete => "Выполнена"; @override - String get error_text_xmr => "Значение XMR не может превышать доступный баланс.\nКоличество цифр после запятой должно быть меньше или равно 12"; + String get error_text_xmr => + "Значение XMR не может превышать доступный баланс.\nКоличество цифр после запятой должно быть меньше или равно 12"; @override String get xmr_available_balance => "Доступный XMR баланс"; @override + String get restore_bitcoin_description_from_keys => + "Вы можете восстановить кошелёк с помощью WIF"; + @override + String get restore_bitcoin_title_from_keys => "Восстановить с помощью WIF"; + @override String get scan_qr_code => "Отсканируйте QR-код для получения адреса"; @override String get trade_state_paid => "Оплаченная"; @@ -1918,7 +2142,8 @@ class $ru extends S { @override String get wallet_name => "Имя кошелька"; @override - String get error_text_payment_id => "Идентификатор платежа может содержать от 16 до 64 символов в hex"; + String get error_text_payment_id => + "Идентификатор платежа может содержать от 16 до 64 символов в hex"; @override String get node_reset_settings_title => "Сбросить настройки"; @override @@ -1940,7 +2165,8 @@ class $ru extends S { @override String get new_wallet => "Новый кошелёк"; @override - String get settings_display_on_dashboard_list => "Показывать в списке транзакций"; + String get settings_display_on_dashboard_list => + "Показывать в списке транзакций"; @override String get transaction_details_title => "Детали транзакции"; @override @@ -1970,7 +2196,8 @@ class $ru extends S { @override String get seed_language_dutch => "Нидерландский"; @override - String get restore_description_from_seed_keys => "Вы можете восстановить кошелёк из мнемонической фразы/ключей, которые вы сохранили ранее"; + String get restore_description_from_seed_keys => + "Вы можете восстановить кошелёк из мнемонической фразы/ключей, которые вы сохранили ранее"; @override String get copy => "Скопировать"; @override @@ -1986,9 +2213,11 @@ class $ru extends S { @override String get contact_name => "Имя контакта"; @override - String get exchange_result_write_down_ID => "*Пожалуйста, скопируйте или запишите ID, указанный выше."; + String get exchange_result_write_down_ID => + "*Пожалуйста, скопируйте или запишите ID, указанный выше."; @override - String get exchange_result_write_down_trade_id => "Пожалуйста, скопируйте или запишите ID сделки."; + String get exchange_result_write_down_trade_id => + "Пожалуйста, скопируйте или запишите ID сделки."; @override String get new_subaddress_title => "Новый субадрес"; @override @@ -2000,7 +2229,8 @@ class $ru extends S { @override String get trade_not_created => "Сделка не создана."; @override - String get confirm_delete_wallet => "Это действие удалит кошелек. Вы хотите продолжить?"; + String get confirm_delete_wallet => + "Это действие удалит кошелек. Вы хотите продолжить?"; @override String get restore_wallet_name => "Имя кошелька"; @override @@ -2010,7 +2240,8 @@ class $ru extends S { @override String get rename => "Переименовать"; @override - String get confirm_delete_template => "Это действие удалит шаблон. Вы хотите продолжить?"; + String get confirm_delete_template => + "Это действие удалит шаблон. Вы хотите продолжить?"; @override String get restore_active_seed => "Активная мнемоническая фраза"; @override @@ -2026,13 +2257,15 @@ class $ru extends S { @override String get show_keys => "Показать ключи"; @override - String get error_text_fiat => "Значение суммы не может превышать доступный баланс.\nКоличество цифр после запятой должно быть меньше или равно 2"; + String get error_text_fiat => + "Значение суммы не может превышать доступный баланс.\nКоличество цифр после запятой должно быть меньше или равно 2"; @override String get addresses => "Адреса"; @override String get transactions_by_date => "Сортировать по дате"; @override - String get restore_from_seed_placeholder => "Введите или вставьте мнемоническую фразу вашего кошелька"; + String get restore_from_seed_placeholder => + "Введите или вставьте мнемоническую фразу вашего кошелька"; @override String get use => "Использовать "; @override @@ -2058,9 +2291,11 @@ class $ru extends S { @override String get address_remove_contact => "Удалить контакт"; @override - String get error_text_wallet_name => "Имя кошелька может содержать только буквы, цифры\nи должно быть от 1 до 15 символов в длину"; + String get error_text_wallet_name => + "Имя кошелька может содержать только буквы, цифры\nи должно быть от 1 до 15 символов в длину"; @override - String get restore_description_from_keys => "Вы можете восстановить кошелёк с помощью приватных ключей"; + String get restore_description_from_keys => + "Вы можете восстановить кошелёк с помощью приватных ключей"; @override String get seed_language_next => "Продолжить"; @override @@ -2076,7 +2311,8 @@ class $ru extends S { @override String get send_title => "Отправить"; @override - String get error_text_keys => "Ключи кошелька могут содержать только 64 символа в hex"; + String get error_text_keys => + "Ключи кошелька могут содержать только 64 символа в hex"; @override String get settings_save_recipient_address => "Сохранять адрес получателя"; @override @@ -2118,7 +2354,8 @@ class $ru extends S { @override String get restore_address => "Адрес"; @override - String get restore_wallet_restore_description => "Описание восстановления кошелька"; + String get restore_wallet_restore_description => + "Описание восстановления кошелька"; @override String get today => "Сегодня"; @override @@ -2128,7 +2365,8 @@ class $ru extends S { @override String get ok => "OK"; @override - String get address_remove_content => "Вы уверены, что хотите удалить выбранный контакт?"; + String get address_remove_content => + "Вы уверены, что хотите удалить выбранный контакт?"; @override String get wallet_list_title => "Monero Кошелёк"; @override @@ -2156,9 +2394,11 @@ class $ru extends S { @override String get restore_title_from_seed => "Восстановить из мнемонической фразы"; @override - String get restore_description_from_backup => "Вы можете восстановить Cake Wallet из вашего back-up файла"; + String get restore_description_from_backup => + "Вы можете восстановить Cake Wallet из вашего back-up файла"; @override - String get error_text_node_port => "Порт ноды может содержать только цифры от 0 до 65535"; + String get error_text_node_port => + "Порт ноды может содержать только цифры от 0 до 65535"; @override String get add_new_word => "Добавить новое слово"; @override @@ -2166,7 +2406,8 @@ class $ru extends S { @override String get digit_pin => "-значный PIN"; @override - String get first_wallet_text => "В самом удобном кошельке для Monero"; + String get first_wallet_text => + "В самом удобном кошельке для Monero и Bitcoin"; @override String get settings_trades => "Сделки"; @override @@ -2174,61 +2415,86 @@ class $ru extends S { @override String change_language_to(String language) => "Изменить язык на ${language}?"; @override - String change_current_node(String node) => "Вы уверены, что хотите изменить текущую ноду на ${node}?"; + String change_current_node(String node) => + "Вы уверены, что хотите изменить текущую ноду на ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Загрузка ${wallet_name} кошелька"; + String wallet_list_loading_wallet(String wallet_name) => + "Загрузка ${wallet_name} кошелька"; @override String version(String currentVersion) => "Версия ${currentVersion}"; @override String router_no_route(String name) => "Не установлен маршрут для ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "Сделка для ${provider} не создана. Сумма меньше минимальной: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "Сделка для ${provider} не создана. Сумма меньше минимальной: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "Сделка ${tradeId} ${title} не найдена."; + String trade_id_not_found(String tradeId, String title) => + "Сделка ${tradeId} ${title} не найдена."; @override - String transaction_details_copied(String title) => "${title} скопировано в буфер обмена"; + String transaction_details_copied(String title) => + "${title} скопировано в буфер обмена"; @override - String trade_details_copied(String title) => "${title} скопировано в буфер обмена"; + String trade_details_copied(String title) => + "${title} скопировано в буфер обмена"; @override String powered_by(String title) => "Используя ${title}"; @override - String send_priority(String transactionPriority) => "Комиссия установлена в зависимости от приоритета: ${transactionPriority}.\nПриоритет транзакции может быть изменён в настройках"; + String send_priority(String transactionPriority) => + "Комиссия установлена в зависимости от приоритета: ${transactionPriority}.\nПриоритет транзакции может быть изменён в настройках"; @override - String trade_for_not_created(String title) => "Сделка для ${title} не создана."; + String trade_for_not_created(String title) => + "Сделка для ${title} не создана."; @override - String trade_is_powered_by(String provider) => "Сделка выполнена через ${provider}"; + String trade_is_powered_by(String provider) => + "Сделка выполнена через ${provider}"; @override String time(String minutes, String seconds) => "${minutes}мин ${seconds}сек"; @override - String max_value(String value, String currency) => "Макс: ${value} ${currency}"; + String max_value(String value, String currency) => + "Макс: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "Сделка для ${provider} не создана. Сумма больше максимальной: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "Сделка для ${provider} не создана. Сумма больше максимальной: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} адрес"; @override - String min_value(String value, String currency) => "Мин: ${value} ${currency}"; + String min_value(String value, String currency) => + "Мин: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Ошибка аутентификации. ${state_error}"; + String failed_authentication(String state_error) => + "Ошибка аутентификации. ${state_error}"; @override String Blocks_remaining(String status) => "${status} Осталось блоков"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Нажимая подтвердить, вы отправите ${fetchingLabel} ${from} с вашего кошелька ${walletName} на адрес указанный выше. Или вы можете отправить со своего внешнего кошелька на вышеуказанный адрес/QR-код.\n\nПожалуйста, нажмите подтвердить для продолжения, или вернитесь назад для изменения суммы."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Нажимая подтвердить, вы отправите ${fetchingLabel} ${from} с вашего кошелька ${walletName} на адрес указанный выше. Или вы можете отправить со своего внешнего кошелька на вышеуказанный адрес/QR-код.\n\nПожалуйста, нажмите подтвердить для продолжения, или вернитесь назад для изменения суммы."; @override - String error_text_limits_loading_failed(String provider) => "Сделка для ${provider} не создана. Ошибка загрузки лимитов"; + String error_text_limits_loading_failed(String provider) => + "Сделка для ${provider} не создана. Ошибка загрузки лимитов"; @override - String exchange_result_description(String fetchingLabel, String from) => "Пожалуйста отправьте ${fetchingLabel} ${from} на адрес, указанный выше."; + String exchange_result_description(String fetchingLabel, String from) => + "Пожалуйста отправьте ${fetchingLabel} ${from} на адрес, указанный выше."; @override - String commit_transaction_amount_fee(String amount, String fee) => "Подтвердить транзакцию \nСумма: ${amount}\nКомиссия: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Подтвердить транзакцию \nСумма: ${amount}\nКомиссия: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "Вы будете отправлять средства\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "Вы будете отправлять средства\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Ошибка при удалении ${wallet_name} кошелька. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Ошибка при удалении ${wallet_name} кошелька. ${error}"; @override - String copied_key_to_clipboard(String key) => "Скопировано ${key} в буфер обмена"; + String copied_key_to_clipboard(String key) => + "Скопировано ${key} в буфер обмена"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "Ошибка при загрузке ${wallet_name} кошелька. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Ошибка при загрузке ${wallet_name} кошелька. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Удаление ${wallet_name} кошелька"; + String wallet_list_removing_wallet(String wallet_name) => + "Удаление ${wallet_name} кошелька"; } class $ko extends S { @@ -2266,7 +2532,8 @@ class $ko extends S { @override String get trade_id => "무역 ID:"; @override - String get restore_description_from_seed => "25 단어 또는 13 단어 조합 코드에서 지갑을 복원하십시오."; + String get restore_description_from_seed => + "25 단어 또는 13 단어 조합 코드에서 지갑을 복원하십시오."; @override String get trade_state_underpaid => "미지급"; @override @@ -2328,7 +2595,8 @@ class $ko extends S { @override String get remove_node_message => "선택한 노드를 제거 하시겠습니까?"; @override - String get error_text_account_name => "계정 이름은 문자, 숫자 만 포함 할 수 있습니다\n1 ~ 15 자 사이 여야합니다"; + String get error_text_account_name => + "계정 이름은 문자, 숫자 만 포함 할 수 있습니다\n1 ~ 15 자 사이 여야합니다"; @override String get reconnection => "재 연결"; @override @@ -2348,7 +2616,8 @@ class $ko extends S { @override String get copy_address => "주소 복사"; @override - String get error_text_subaddress_name => "하위 주소 이름은 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 20 자 사이 여야합니다"; + String get error_text_subaddress_name => + "하위 주소 이름은 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 20 자 사이 여야합니다"; @override String get incorrect_seed => "입력하신 텍스트가 유효하지 않습니다."; @override @@ -2392,6 +2661,8 @@ class $ko extends S { @override String get settings_title => "설정"; @override + String get restore_bitcoin_description_from_seed => "12 단어 조합 코드에서 지갑 복원"; + @override String get address_book_menu => "주소록"; @override String get wallet_restoration_store_incorrect_seed_length => "시드 길이가 잘못되었습니다"; @@ -2424,7 +2695,8 @@ class $ko extends S { @override String get error_text_crypto_currency => "소수 자릿수\n12 이하 여야합니다"; @override - String get error_text_contact_name => "담당자 이름은 포함 할 수 없습니다 ` , ' \" 기호\n1 자에서 32 자 사이 여야합니다"; + String get error_text_contact_name => + "담당자 이름은 포함 할 수 없습니다 ` , ' \" 기호\n1 자에서 32 자 사이 여야합니다"; @override String get restore_seed_keys_restore => "종자 / 키 복원"; @override @@ -2496,7 +2768,8 @@ class $ko extends S { @override String get nodes => "노드"; @override - String get error_text_template => "템플릿 이름과 주소는 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 106 자 사이 여야합니다"; + String get error_text_template => + "템플릿 이름과 주소는 포함 할 수 없습니다 ` , ' \" 기호 \n1 ~ 106 자 사이 여야합니다"; @override String get seed_share => "시드 공유"; @override @@ -2522,10 +2795,16 @@ class $ko extends S { @override String get trade_state_complete => "완전한"; @override - String get error_text_xmr => "XMR 값은 사용 가능한 잔액을 초과 할 수 없습니다.\n소수 자릿수는 12 이하 여야합니다"; + String get error_text_xmr => + "XMR 값은 사용 가능한 잔액을 초과 할 수 없습니다.\n소수 자릿수는 12 이하 여야합니다"; @override String get xmr_available_balance => "XMR 사용 가능한 잔액"; @override + String get restore_bitcoin_description_from_keys => + "개인 키에서 생성 된 WIF 문자열에서 지갑 복원"; + @override + String get restore_bitcoin_title_from_keys => "WIF에서 복원"; + @override String get scan_qr_code => "QR 코드를 스캔하여 주소를 얻습니다."; @override String get trade_state_paid => "유료"; @@ -2602,7 +2881,8 @@ class $ko extends S { @override String get seed_language_dutch => "네덜란드 사람"; @override - String get restore_description_from_seed_keys => "안전한 장소에 저장 한 종자 / 키로 지갑을 되 찾으십시오."; + String get restore_description_from_seed_keys => + "안전한 장소에 저장 한 종자 / 키로 지갑을 되 찾으십시오."; @override String get copy => "부"; @override @@ -2620,7 +2900,8 @@ class $ko extends S { @override String get exchange_result_write_down_ID => "*위에 표시된 ID를 복사하거나 적어 두십시오."; @override - String get exchange_result_write_down_trade_id => "계속하려면 거래 ID를 복사하거나 적어 두십시오.."; + String get exchange_result_write_down_trade_id => + "계속하려면 거래 ID를 복사하거나 적어 두십시오.."; @override String get new_subaddress_title => "새로운 하위 주소"; @override @@ -2658,7 +2939,8 @@ class $ko extends S { @override String get show_keys => "키 표시"; @override - String get error_text_fiat => "금액은 사용 가능한 잔액을 초과 할 수 없습니다.\n소수 자릿수는 2보다 작거나 같아야합니다"; + String get error_text_fiat => + "금액은 사용 가능한 잔액을 초과 할 수 없습니다.\n소수 자릿수는 2보다 작거나 같아야합니다"; @override String get addresses => "구애"; @override @@ -2690,7 +2972,8 @@ class $ko extends S { @override String get address_remove_contact => "연락처 삭제"; @override - String get error_text_wallet_name => "지갑 이름은 문자, 숫자 만 포함 할 수 있습니다\n1 ~ 15 자 사이 여야합니다"; + String get error_text_wallet_name => + "지갑 이름은 문자, 숫자 만 포함 할 수 있습니다\n1 ~ 15 자 사이 여야합니다"; @override String get restore_description_from_keys => "개인 키에서 저장된 생성 된 키 스트로크에서 월렛 복원"; @override @@ -2788,7 +3071,8 @@ class $ko extends S { @override String get restore_title_from_seed => "종자에서 복원"; @override - String get restore_description_from_backup => "백업 파일에서 전체 Cake Wallet 앱을 복원 할 수 있습니다."; + String get restore_description_from_backup => + "백업 파일에서 전체 Cake Wallet 앱을 복원 할 수 있습니다."; @override String get error_text_node_port => "노드 포트는 0에서 65535 사이의 숫자 만 포함 할 수 있습니다"; @override @@ -2798,7 +3082,7 @@ class $ko extends S { @override String get digit_pin => "숫자 PIN"; @override - String get first_wallet_text => "멋진 지갑 에 대한 Monero"; + String get first_wallet_text => "멋진 지갑 에 대한 Monero 과 Bitcoin"; @override String get settings_trades => "거래"; @override @@ -2808,15 +3092,19 @@ class $ko extends S { @override String change_current_node(String node) => "현재 노드를 다음으로 변경 하시겠습니까 ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "로딩 ${wallet_name} 지갑"; + String wallet_list_loading_wallet(String wallet_name) => + "로딩 ${wallet_name} 지갑"; @override String version(String currentVersion) => "버전 ${currentVersion}"; @override String router_no_route(String name) => "에 정의 된 경로가 없습니다 ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "거래 ${provider} 가 생성되지 않습니다. 금액이 최소보다 적습니다. ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "거래 ${provider} 가 생성되지 않습니다. 금액이 최소보다 적습니다. ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "무역 ${tradeId} 의 ${title} 찾을 수 없습니다."; + String trade_id_not_found(String tradeId, String title) => + "무역 ${tradeId} 의 ${title} 찾을 수 없습니다."; @override String transaction_details_copied(String title) => "${title} 클립 보드에 복사"; @override @@ -2824,7 +3112,8 @@ class $ko extends S { @override String powered_by(String title) => "에 의해 구동 ${title}"; @override - String send_priority(String transactionPriority) => "현재 수수료는 ${transactionPriority} 우선 순위.\n거래 우선 순위는 설정에서 조정할 수 있습니다"; + String send_priority(String transactionPriority) => + "현재 수수료는 ${transactionPriority} 우선 순위.\n거래 우선 순위는 설정에서 조정할 수 있습니다"; @override String trade_for_not_created(String title) => "거래 ${title} 생성되지 않습니다."; @override @@ -2834,7 +3123,9 @@ class $ko extends S { @override String max_value(String value, String currency) => "맥스: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "거래 ${provider} 가 생성되지 않습니다. 금액이 최대 값보다 많습니다. ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "거래 ${provider} 가 생성되지 않습니다. 금액이 최대 값보다 많습니다. ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} 주소"; @override @@ -2844,23 +3135,32 @@ class $ko extends S { @override String Blocks_remaining(String status) => "${status} 남은 블록"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "확인을 누르면 전송됩니다 ${fetchingLabel} ${from} 지갑에서 ${walletName} 위에 표시된 주소로. 또는 외부 지갑에서 위의 주소 / QR 코드로 보낼 수 있습니다.\n\n확인을 눌러 계속하거나 금액을 변경하려면 돌아가십시오."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "확인을 누르면 전송됩니다 ${fetchingLabel} ${from} 지갑에서 ${walletName} 위에 표시된 주소로. 또는 외부 지갑에서 위의 주소 / QR 코드로 보낼 수 있습니다.\n\n확인을 눌러 계속하거나 금액을 변경하려면 돌아가십시오."; @override - String error_text_limits_loading_failed(String provider) => "거래 ${provider} 가 생성되지 않습니다. 로딩 실패"; + String error_text_limits_loading_failed(String provider) => + "거래 ${provider} 가 생성되지 않습니다. 로딩 실패"; @override - String exchange_result_description(String fetchingLabel, String from) => "보내주세요 ${fetchingLabel} ${from} 위에 표시된 주소로."; + String exchange_result_description(String fetchingLabel, String from) => + "보내주세요 ${fetchingLabel} ${from} 위에 표시된 주소로."; @override - String commit_transaction_amount_fee(String amount, String fee) => "커밋 거래\n양: ${amount}\n보수: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "커밋 거래\n양: ${amount}\n보수: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "당신은에 자금을 보낼 것입니다\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "당신은에 자금을 보낼 것입니다\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "제거하지 못했습니다 ${wallet_name} 지갑. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "제거하지 못했습니다 ${wallet_name} 지갑. ${error}"; @override String copied_key_to_clipboard(String key) => "복사 ${key} 클립 보드로"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "불러 오지 못했습니다 ${wallet_name} 지갑. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "불러 오지 못했습니다 ${wallet_name} 지갑. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "풀이 ${wallet_name} 지갑"; + String wallet_list_removing_wallet(String wallet_name) => + "풀이 ${wallet_name} 지갑"; } class $pt extends S { @@ -2886,7 +3186,8 @@ class $pt extends S { @override String get hidden_balance => "Saldo escondido"; @override - String get biometric_auth_reason => "Digitalize sua impressão digital para autenticar"; + String get biometric_auth_reason => + "Digitalize sua impressão digital para autenticar"; @override String get transaction_sent => "Transação enviada!"; @override @@ -2898,7 +3199,8 @@ class $pt extends S { @override String get trade_id => "ID da troca:"; @override - String get restore_description_from_seed => "Restaure sua carteira a partir de semente com 25 palavras ou 13 palavras"; + String get restore_description_from_seed => + "Restaure sua carteira a partir de semente com 25 palavras ou 13 palavras"; @override String get trade_state_underpaid => "Parcialmente paga"; @override @@ -2910,7 +3212,8 @@ class $pt extends S { @override String get send_templates => "Modelos"; @override - String get please_try_to_connect_to_another_node => "Por favor, tente conectar-se a outro nó"; + String get please_try_to_connect_to_another_node => + "Por favor, tente conectar-se a outro nó"; @override String get trade_state_traded => "Troca realizada"; @override @@ -2924,7 +3227,8 @@ class $pt extends S { @override String get auth_store_banned_minutes => " minutos"; @override - String get restore_title_from_seed_keys => "Restaurar a partir de sementes/chaves"; + String get restore_title_from_seed_keys => + "Restaurar a partir de sementes/chaves"; @override String get settings_none => "Nada"; @override @@ -2940,11 +3244,13 @@ class $pt extends S { @override String get setup_pin => "Configurar PIN"; @override - String get transaction_details_recipient_address => "Endereço do destinatário"; + String get transaction_details_recipient_address => + "Endereço do destinatário"; @override String get receive_amount => "Quantia"; @override - String get settings_allow_biometrical_authentication => "Permitir autenticação biométrica"; + String get settings_allow_biometrical_authentication => + "Permitir autenticação biométrica"; @override String get view_key_private => "Chave de visualização (privada)"; @override @@ -2954,13 +3260,16 @@ class $pt extends S { @override String get send_sending => "Enviando..."; @override - String get error_text_address => "O endereço da carteira deve corresponder à\ncriptomoeda selecionada"; + String get error_text_address => + "O endereço da carteira deve corresponder à\ncriptomoeda selecionada"; @override String get send_your_wallet => "Sua carteira"; @override - String get remove_node_message => "Você realmente deseja remover o nó selecionado?"; + String get remove_node_message => + "Você realmente deseja remover o nó selecionado?"; @override - String get error_text_account_name => "O nome da conta só pode conter letras, números\ne deve ter entre 1 e 15 caracteres"; + String get error_text_account_name => + "O nome da conta só pode conter letras, números\ne deve ter entre 1 e 15 caracteres"; @override String get reconnection => "Reconectar"; @override @@ -2974,23 +3283,27 @@ class $pt extends S { @override String get reconnect => "Reconectar"; @override - String get reconnect_alert_text => "Você tem certeza de que deseja reconectar?"; + String get reconnect_alert_text => + "Você tem certeza de que deseja reconectar?"; @override String get send_error_minimum_value => "O valor mínimo da quantia é 0,01"; @override String get copy_address => "Copiar endereço"; @override - String get error_text_subaddress_name => "O nome do sub-endereço não pode conter os símbolos ` , ' \" \ne deve ter entre 1 e 20 caracteres"; + String get error_text_subaddress_name => + "O nome do sub-endereço não pode conter os símbolos ` , ' \" \ne deve ter entre 1 e 20 caracteres"; @override String get incorrect_seed => "O texto digitado não é válido."; @override String get settings_all => "Tudo"; @override - String get nodes_list_reset_to_default_message => "Você realmente deseja redefinir as configurações para o padrão?"; + String get nodes_list_reset_to_default_message => + "Você realmente deseja redefinir as configurações para o padrão?"; @override String get receive => "Receber"; @override - String get amount_is_guaranteed => "Você receberá exatamente o valor informado acima"; + String get amount_is_guaranteed => + "Você receberá exatamente o valor informado acima"; @override String get auth_store_banned_for => "Banido por"; @override @@ -3024,9 +3337,13 @@ class $pt extends S { @override String get settings_title => "Configurações"; @override + String get restore_bitcoin_description_from_seed => + "Restaure sua carteira a partir de um código de combinação de 12 palavras"; + @override String get address_book_menu => "Livro de endereços"; @override - String get wallet_restoration_store_incorrect_seed_length => "Comprimento de semente incorreto"; + String get wallet_restoration_store_incorrect_seed_length => + "Comprimento de semente incorreto"; @override String get seed_language_spanish => "Espanhola"; @override @@ -3048,15 +3365,18 @@ class $pt extends S { @override String get please_select => "Escolha abaixo:"; @override - String get restore_title_from_backup => "Restaurar a partir de um arquivo de backup"; + String get restore_title_from_backup => + "Restaurar a partir de um arquivo de backup"; @override String get full_balance => "Saldo total"; @override String get sync_status_not_connected => "DESCONECTADO"; @override - String get error_text_crypto_currency => "O número de dígitos decimais\ndeve ser menor ou igual a 12"; + String get error_text_crypto_currency => + "O número de dígitos decimais\ndeve ser menor ou igual a 12"; @override - String get error_text_contact_name => "O nome do contato não pode conter os símbolos ` , ' \" \ne deve ter entre 1 e 32 caracteres"; + String get error_text_contact_name => + "O nome do contato não pode conter os símbolos ` , ' \" \ne deve ter entre 1 e 32 caracteres"; @override String get restore_seed_keys_restore => "Restauração com sementes/chaves"; @override @@ -3118,7 +3438,8 @@ class $pt extends S { @override String get copy_id => "Copiar ID"; @override - String get please_make_selection => "Escolha se quer criar uma carteira nova ou restaurar uma antiga."; + String get please_make_selection => + "Escolha se quer criar uma carteira nova ou restaurar uma antiga."; @override String get loading_your_wallet => "Abrindo sua carteira"; @override @@ -3128,11 +3449,13 @@ class $pt extends S { @override String get nodes => "Nós"; @override - String get error_text_template => "O nome e o endereço do modelo não podem conter os símbolos ` , ' \" \ne deve ter entre 1 e 106 caracteres"; + String get error_text_template => + "O nome e o endereço do modelo não podem conter os símbolos ` , ' \" \ne deve ter entre 1 e 106 caracteres"; @override String get seed_share => "Compartilhar semente"; @override - String get widgets_restore_from_blockheight => "Restaurar a partir de altura do bloco"; + String get widgets_restore_from_blockheight => + "Restaurar a partir de altura do bloco"; @override String get seed_language_chinese => "Chinesa"; @override @@ -3154,10 +3477,16 @@ class $pt extends S { @override String get trade_state_complete => "Finalizada"; @override - String get error_text_xmr => "A quantia em XMR não pode exceder o saldo disponível.\nTO número de dígitos decimais deve ser menor ou igual a 12"; + String get error_text_xmr => + "A quantia em XMR não pode exceder o saldo disponível.\nTO número de dígitos decimais deve ser menor ou igual a 12"; @override String get xmr_available_balance => "Saldo XMR disponível"; @override + String get restore_bitcoin_description_from_keys => + "Restaure sua carteira a partir da string WIF gerada de suas chaves privadas"; + @override + String get restore_bitcoin_title_from_keys => "Restaurar de WIF"; + @override String get scan_qr_code => "Digitalize o código QR para obter o endereço"; @override String get trade_state_paid => "Paga"; @@ -3182,7 +3511,8 @@ class $pt extends S { @override String get wallet_name => "Nome da carteira"; @override - String get error_text_payment_id => "O ID de pagamento pode conter apenas de 16 a 64 caracteres em hexadecimal"; + String get error_text_payment_id => + "O ID de pagamento pode conter apenas de 16 a 64 caracteres em hexadecimal"; @override String get node_reset_settings_title => "Redefinir configurações"; @override @@ -3192,7 +3522,8 @@ class $pt extends S { @override String get transactions => "Transações"; @override - String get amount_is_estimate => "O valor a ser recebido informado acima é uma estimativa"; + String get amount_is_estimate => + "O valor a ser recebido informado acima é uma estimativa"; @override String get error_text_node_address => "Digite um endereço iPv4"; @override @@ -3234,7 +3565,8 @@ class $pt extends S { @override String get seed_language_dutch => "Holandesa"; @override - String get restore_description_from_seed_keys => "Restaure a sua carteira a partir de sementes/chaves que você salvou em um local seguro"; + String get restore_description_from_seed_keys => + "Restaure a sua carteira a partir de sementes/chaves que você salvou em um local seguro"; @override String get copy => "Copiar"; @override @@ -3250,9 +3582,11 @@ class $pt extends S { @override String get contact_name => "Nome do contato"; @override - String get exchange_result_write_down_ID => "*Copie ou anote seu ID mostrado acima."; + String get exchange_result_write_down_ID => + "*Copie ou anote seu ID mostrado acima."; @override - String get exchange_result_write_down_trade_id => "Copie ou anote o ID da troca para continuar."; + String get exchange_result_write_down_trade_id => + "Copie ou anote o ID da troca para continuar."; @override String get new_subaddress_title => "Criar sub-endereço"; @override @@ -3264,7 +3598,8 @@ class $pt extends S { @override String get trade_not_created => "Troca não criada."; @override - String get confirm_delete_wallet => "Esta ação excluirá esta carteira. Você deseja continuar?"; + String get confirm_delete_wallet => + "Esta ação excluirá esta carteira. Você deseja continuar?"; @override String get restore_wallet_name => "Nome da carteira"; @override @@ -3274,7 +3609,8 @@ class $pt extends S { @override String get rename => "Renomear"; @override - String get confirm_delete_template => "Esta ação excluirá este modelo. Você deseja continuar?"; + String get confirm_delete_template => + "Esta ação excluirá este modelo. Você deseja continuar?"; @override String get restore_active_seed => "Semente ativa"; @override @@ -3290,13 +3626,15 @@ class $pt extends S { @override String get show_keys => "Mostrar chaves"; @override - String get error_text_fiat => "O valor do valor não pode exceder o saldo disponível.\nO número de dígitos decimais deve ser menor ou igual a 2"; + String get error_text_fiat => + "O valor do valor não pode exceder o saldo disponível.\nO número de dígitos decimais deve ser menor ou igual a 2"; @override String get addresses => "Endereços"; @override String get transactions_by_date => "Transações por data"; @override - String get restore_from_seed_placeholder => "Digite ou cole sua frase de código aqui"; + String get restore_from_seed_placeholder => + "Digite ou cole sua frase de código aqui"; @override String get use => "Use PIN de "; @override @@ -3322,9 +3660,11 @@ class $pt extends S { @override String get address_remove_contact => "Remover contato"; @override - String get error_text_wallet_name => "O nome da carteira só pode conter letras, números\ne deve ter entre 1 e 15 caracteres"; + String get error_text_wallet_name => + "O nome da carteira só pode conter letras, números\ne deve ter entre 1 e 15 caracteres"; @override - String get restore_description_from_keys => "Restaure sua carteira a partir de suas chaves privadas"; + String get restore_description_from_keys => + "Restaure sua carteira a partir de suas chaves privadas"; @override String get seed_language_next => "Próximo"; @override @@ -3340,9 +3680,11 @@ class $pt extends S { @override String get send_title => "Enviar"; @override - String get error_text_keys => "As chaves da carteira podem conter apenas 64 caracteres em hexadecimal"; + String get error_text_keys => + "As chaves da carteira podem conter apenas 64 caracteres em hexadecimal"; @override - String get settings_save_recipient_address => "Salvar endereço do destinatário"; + String get settings_save_recipient_address => + "Salvar endereço do destinatário"; @override String get change_exchange_provider => "Alterar o provedor de troca"; @override @@ -3392,7 +3734,8 @@ class $pt extends S { @override String get ok => "Ok"; @override - String get address_remove_content => "Tem certeza de que deseja remover o contato selecionado?"; + String get address_remove_content => + "Tem certeza de que deseja remover o contato selecionado?"; @override String get wallet_list_title => "Carteira Monero"; @override @@ -3420,9 +3763,11 @@ class $pt extends S { @override String get restore_title_from_seed => "Restaurar a partir de semente"; @override - String get restore_description_from_backup => "Você pode restaurar todo o aplicativo Cake Wallet de seu arquivo de backup"; + String get restore_description_from_backup => + "Você pode restaurar todo o aplicativo Cake Wallet de seu arquivo de backup"; @override - String get error_text_node_port => "A porta do nó deve conter apenas números entre 0 e 65535"; + String get error_text_node_port => + "A porta do nó deve conter apenas números entre 0 e 65535"; @override String get add_new_word => "Adicionar nova palavra"; @override @@ -3430,69 +3775,96 @@ class $pt extends S { @override String get digit_pin => "dígitos"; @override - String get first_wallet_text => "Uma fantástica carteira para Monero"; + String get first_wallet_text => + "Uma fantástica carteira para Monero e Bitcoin"; @override String get settings_trades => "Trocas"; @override String get account => "Conta"; @override - String change_language_to(String language) => "Alterar idioma para ${language}?"; + String change_language_to(String language) => + "Alterar idioma para ${language}?"; @override - String change_current_node(String node) => "Você realmente deseja alterar o nó atual para ${node}?"; + String change_current_node(String node) => + "Você realmente deseja alterar o nó atual para ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Abrindo a carteira ${wallet_name}"; + String wallet_list_loading_wallet(String wallet_name) => + "Abrindo a carteira ${wallet_name}"; @override String version(String currentVersion) => "Versão ${currentVersion}"; @override String router_no_route(String name) => "Nenhuma rota definida para ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "A troca por ${provider} não é criada. O valor é menor que o mínimo: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "A troca por ${provider} não é criada. O valor é menor que o mínimo: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "A troca ${tradeId} de ${title} não foi encontrada."; + String trade_id_not_found(String tradeId, String title) => + "A troca ${tradeId} de ${title} não foi encontrada."; @override - String transaction_details_copied(String title) => "${title} copiados para a área de transferência"; + String transaction_details_copied(String title) => + "${title} copiados para a área de transferência"; @override - String trade_details_copied(String title) => "${title} copiados para a área de transferência"; + String trade_details_copied(String title) => + "${title} copiados para a área de transferência"; @override String powered_by(String title) => "Troca realizada por ${title}"; @override - String send_priority(String transactionPriority) => "Atualmente, a taxa está definida para a prioridade: ${transactionPriority}.\nA prioridade da transação pode ser ajustada nas configurações"; + String send_priority(String transactionPriority) => + "Atualmente, a taxa está definida para a prioridade: ${transactionPriority}.\nA prioridade da transação pode ser ajustada nas configurações"; @override - String trade_for_not_created(String title) => "A troca por ${title} não foi criada."; + String trade_for_not_created(String title) => + "A troca por ${title} não foi criada."; @override - String trade_is_powered_by(String provider) => "Troca realizada por ${provider}"; + String trade_is_powered_by(String provider) => + "Troca realizada por ${provider}"; @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "Máx: ${value} ${currency}"; + String max_value(String value, String currency) => + "Máx: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "A troca por ${provider} não é criada. O valor é superior ao máximo: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "A troca por ${provider} não é criada. O valor é superior ao máximo: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "Endereço ${cryptoCurrency}"; @override - String min_value(String value, String currency) => "Mín: ${value} ${currency}"; + String min_value(String value, String currency) => + "Mín: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Falha na autenticação. ${state_error}"; + String failed_authentication(String state_error) => + "Falha na autenticação. ${state_error}"; @override String Blocks_remaining(String status) => "${status} blocos restantes"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Ao confirmar, você enviará ${fetchingLabel} ${from} da sua carteira ${walletName} para o endereço exibido acima. Você também pode enviar com uma carteira externa para o endereço/código QR acima.\n\nPressione Confirmar para continuar ou volte para alterar os valores."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Ao confirmar, você enviará ${fetchingLabel} ${from} da sua carteira ${walletName} para o endereço exibido acima. Você também pode enviar com uma carteira externa para o endereço/código QR acima.\n\nPressione Confirmar para continuar ou volte para alterar os valores."; @override - String error_text_limits_loading_failed(String provider) => "A troca por ${provider} não é criada. Falha no carregamento dos limites"; + String error_text_limits_loading_failed(String provider) => + "A troca por ${provider} não é criada. Falha no carregamento dos limites"; @override - String exchange_result_description(String fetchingLabel, String from) => "Por favor, envie ${fetchingLabel} ${from} para o endereço mostrado acima."; + String exchange_result_description(String fetchingLabel, String from) => + "Por favor, envie ${fetchingLabel} ${from} para o endereço mostrado acima."; @override - String commit_transaction_amount_fee(String amount, String fee) => "Confirmar transação\nQuantia: ${amount}\nTaxa: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Confirmar transação\nQuantia: ${amount}\nTaxa: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "Você enviará fundos para\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "Você enviará fundos para\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Falha ao remover a carteira ${wallet_name}. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Falha ao remover a carteira ${wallet_name}. ${error}"; @override - String copied_key_to_clipboard(String key) => "${key} copiada para a área de transferência"; + String copied_key_to_clipboard(String key) => + "${key} copiada para a área de transferência"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "Falha ao abrir a carteira ${wallet_name}. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Falha ao abrir a carteira ${wallet_name}. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Removendo a carteira ${wallet_name}"; + String wallet_list_removing_wallet(String wallet_name) => + "Removendo a carteira ${wallet_name}"; } class $uk extends S { @@ -3518,7 +3890,8 @@ class $uk extends S { @override String get hidden_balance => "Прихований баланс"; @override - String get biometric_auth_reason => "Відскануйте свій відбиток пальця для аутентифікації"; + String get biometric_auth_reason => + "Відскануйте свій відбиток пальця для аутентифікації"; @override String get transaction_sent => "Tранзакцію відправлено!"; @override @@ -3530,7 +3903,8 @@ class $uk extends S { @override String get trade_id => "ID операції:"; @override - String get restore_description_from_seed => "Ви можете відновити гаманець використовуючи 25-ти слівну мнемонічну фразу"; + String get restore_description_from_seed => + "Ви можете відновити гаманець використовуючи 25-ти слівну мнемонічну фразу"; @override String get trade_state_underpaid => "Недоплачена"; @override @@ -3542,7 +3916,8 @@ class $uk extends S { @override String get send_templates => "Шаблони"; @override - String get please_try_to_connect_to_another_node => "Будь ласка, спробуйте підключитися до іншого вузлу"; + String get please_try_to_connect_to_another_node => + "Будь ласка, спробуйте підключитися до іншого вузлу"; @override String get trade_state_traded => "Операція виконана"; @override @@ -3556,7 +3931,8 @@ class $uk extends S { @override String get auth_store_banned_minutes => " хвилин"; @override - String get restore_title_from_seed_keys => "Відновити з мнемонічної фрази/ключів"; + String get restore_title_from_seed_keys => + "Відновити з мнемонічної фрази/ключів"; @override String get settings_none => "Нічого"; @override @@ -3576,7 +3952,8 @@ class $uk extends S { @override String get receive_amount => "Сума"; @override - String get settings_allow_biometrical_authentication => "Включити біометричну аутентифікацію"; + String get settings_allow_biometrical_authentication => + "Включити біометричну аутентифікацію"; @override String get view_key_private => "Приватний ключ перегляду"; @override @@ -3586,13 +3963,16 @@ class $uk extends S { @override String get send_sending => "Відправлення..."; @override - String get error_text_address => "Адреса гаманця повинна відповідати типу\nкриптовалюти"; + String get error_text_address => + "Адреса гаманця повинна відповідати типу\nкриптовалюти"; @override String get send_your_wallet => "Ваш гаманець"; @override - String get remove_node_message => "Ви впевнені, що хочете видалити поточний вузол?"; + String get remove_node_message => + "Ви впевнені, що хочете видалити поточний вузол?"; @override - String get error_text_account_name => "Ім'я акаунту може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину"; + String get error_text_account_name => + "Ім'я акаунту може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину"; @override String get reconnection => "Перепідключення"; @override @@ -3600,7 +3980,8 @@ class $uk extends S { @override String get restore_title_from_keys => "Відновити за допомогою ключів"; @override - String get seed_language_choose => "Будь ласка, виберіть мову мнемонічної фрази:"; + String get seed_language_choose => + "Будь ласка, виберіть мову мнемонічної фрази:"; @override String get wallet_keys => "Ключі гаманця"; @override @@ -3612,13 +3993,15 @@ class $uk extends S { @override String get copy_address => "Cкопіювати адресу"; @override - String get error_text_subaddress_name => "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 20 символів в довжину"; + String get error_text_subaddress_name => + "Ім'я субадреси не може містити ` , ' \" символи\nі може бути від 1 до 20 символів в довжину"; @override String get incorrect_seed => "Введений текст невірний."; @override String get settings_all => "ВСІ"; @override - String get nodes_list_reset_to_default_message => "Ви впевнені, що хочете скинути до налаштувань за замовченням?"; + String get nodes_list_reset_to_default_message => + "Ви впевнені, що хочете скинути до налаштувань за замовченням?"; @override String get receive => "Отримати"; @override @@ -3634,7 +4017,8 @@ class $uk extends S { @override String get settings_display_balance_as => "Відображати баланс як"; @override - String get placeholder_transactions => "Тут відображатимуться ваші транзакції"; + String get placeholder_transactions => + "Тут відображатимуться ваші транзакції"; @override String get trade_details_provider => "Провайдер"; @override @@ -3656,9 +4040,13 @@ class $uk extends S { @override String get settings_title => "Налаштування"; @override + String get restore_bitcoin_description_from_seed => + "Ви можете відновити гаманець використовуючи 12-ти слівну мнемонічну фразу"; + @override String get address_book_menu => "Адресна книга"; @override - String get wallet_restoration_store_incorrect_seed_length => "Невірна довжина мнемонічної фрази"; + String get wallet_restoration_store_incorrect_seed_length => + "Невірна довжина мнемонічної фрази"; @override String get seed_language_spanish => "Іспанська"; @override @@ -3686,11 +4074,14 @@ class $uk extends S { @override String get sync_status_not_connected => "НЕ ПІДКЛЮЧЕННИЙ"; @override - String get error_text_crypto_currency => "Кількість цифр після коми\nповинно бути меншим або дорівнювати 12"; + String get error_text_crypto_currency => + "Кількість цифр після коми\nповинно бути меншим або дорівнювати 12"; @override - String get error_text_contact_name => "Ім'я контакту не може містити ` , ' \" символи\n і повинно бути від 1 до 32 символів в довжину"; + String get error_text_contact_name => + "Ім'я контакту не може містити ` , ' \" символи\n і повинно бути від 1 до 32 символів в довжину"; @override - String get restore_seed_keys_restore => "Відновити за допомогою мнемонічної фрази/ключів"; + String get restore_seed_keys_restore => + "Відновити за допомогою мнемонічної фрази/ключів"; @override String get xmr_hidden => "XMR Приховано"; @override @@ -3750,7 +4141,8 @@ class $uk extends S { @override String get copy_id => "Скопіювати ID"; @override - String get please_make_selection => "Оберіть спосіб створення гаманця: створити новий чи відновити ваш існуючий."; + String get please_make_selection => + "Оберіть спосіб створення гаманця: створити новий чи відновити ваш існуючий."; @override String get loading_your_wallet => "Завантаження гаманця"; @override @@ -3760,7 +4152,8 @@ class $uk extends S { @override String get nodes => "Вузли"; @override - String get error_text_template => "Ім'я та адреса шаблону не може містити ` , ' \" символи\nі може бути від 1 до 106 символів в довжину"; + String get error_text_template => + "Ім'я та адреса шаблону не може містити ` , ' \" символи\nі може бути від 1 до 106 символів в довжину"; @override String get seed_share => "Поділитися мнемонічною фразою"; @override @@ -3786,10 +4179,16 @@ class $uk extends S { @override String get trade_state_complete => "Завершено"; @override - String get error_text_xmr => "Значення XMR не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 12"; + String get error_text_xmr => + "Значення XMR не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 12"; @override String get xmr_available_balance => "Доступний XMR баланс"; @override + String get restore_bitcoin_description_from_keys => + "Ви можете відновити гаманець за допомогою WIF"; + @override + String get restore_bitcoin_title_from_keys => "Відновити за допомогою WIF"; + @override String get scan_qr_code => "Скануйте QR-код для одержання адреси"; @override String get trade_state_paid => "Оплачена"; @@ -3814,7 +4213,8 @@ class $uk extends S { @override String get wallet_name => "Ім'я гаманця"; @override - String get error_text_payment_id => "Ідентифікатор платежу може містити від 16 до 64 символів в hex"; + String get error_text_payment_id => + "Ідентифікатор платежу може містити від 16 до 64 символів в hex"; @override String get node_reset_settings_title => "Скинути налаштування"; @override @@ -3836,7 +4236,8 @@ class $uk extends S { @override String get new_wallet => "Новий гаманець"; @override - String get settings_display_on_dashboard_list => "Відображати в списку транзакцій"; + String get settings_display_on_dashboard_list => + "Відображати в списку транзакцій"; @override String get transaction_details_title => "Деталі транзакції"; @override @@ -3866,7 +4267,8 @@ class $uk extends S { @override String get seed_language_dutch => "Голландська"; @override - String get restore_description_from_seed_keys => "Ви можете відновити гаманець з мнемонічної фрази/ключів, які ви зберегли раніше"; + String get restore_description_from_seed_keys => + "Ви можете відновити гаманець з мнемонічної фрази/ключів, які ви зберегли раніше"; @override String get copy => "Скопіювати"; @override @@ -3882,9 +4284,11 @@ class $uk extends S { @override String get contact_name => "Ім'я контакту"; @override - String get exchange_result_write_down_ID => "*Будь ласка, скопіюйте або запишіть ID, вказаний вище."; + String get exchange_result_write_down_ID => + "*Будь ласка, скопіюйте або запишіть ID, вказаний вище."; @override - String get exchange_result_write_down_trade_id => "Будь ласка, скопіюйте або запишіть ID операції."; + String get exchange_result_write_down_trade_id => + "Будь ласка, скопіюйте або запишіть ID операції."; @override String get new_subaddress_title => "Нова субадреса"; @override @@ -3896,7 +4300,8 @@ class $uk extends S { @override String get trade_not_created => "Операція не створена."; @override - String get confirm_delete_wallet => "Ця дія видалить гаманець. Ви хочете продовжити?"; + String get confirm_delete_wallet => + "Ця дія видалить гаманець. Ви хочете продовжити?"; @override String get restore_wallet_name => "Ім'я гаманця"; @override @@ -3906,7 +4311,8 @@ class $uk extends S { @override String get rename => "Перейменувати"; @override - String get confirm_delete_template => "Ця дія видалить шаблон. Ви хочете продовжити?"; + String get confirm_delete_template => + "Ця дія видалить шаблон. Ви хочете продовжити?"; @override String get restore_active_seed => "Активна мнемонічна фраза"; @override @@ -3922,13 +4328,15 @@ class $uk extends S { @override String get show_keys => "Показати ключі"; @override - String get error_text_fiat => "Значення суми не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 2"; + String get error_text_fiat => + "Значення суми не може перевищувати доступний баланс.\nКількість цифр після коми повинно бути меншим або дорівнювати 2"; @override String get addresses => "Адреси"; @override String get transactions_by_date => "Сортувати по даті"; @override - String get restore_from_seed_placeholder => "Введіть або вставте мнемонічну фразу вашого гаманця"; + String get restore_from_seed_placeholder => + "Введіть або вставте мнемонічну фразу вашого гаманця"; @override String get use => "Використати "; @override @@ -3954,9 +4362,11 @@ class $uk extends S { @override String get address_remove_contact => "Видалити контакт"; @override - String get error_text_wallet_name => "Ім'я гаманця може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину"; + String get error_text_wallet_name => + "Ім'я гаманця може містити тільки букви, цифри\nі повинно бути від 1 до 15 символів в довжину"; @override - String get restore_description_from_keys => "Ви можете відновити гаманець за допомогою приватних ключів"; + String get restore_description_from_keys => + "Ви можете відновити гаманець за допомогою приватних ключів"; @override String get seed_language_next => "Продовжити"; @override @@ -3972,7 +4382,8 @@ class $uk extends S { @override String get send_title => "Відправити"; @override - String get error_text_keys => "Ключі гаманця можуть містити тільки 64 символів в hex"; + String get error_text_keys => + "Ключі гаманця можуть містити тільки 64 символів в hex"; @override String get settings_save_recipient_address => "Зберігати адресу отримувача"; @override @@ -4014,7 +4425,8 @@ class $uk extends S { @override String get restore_address => "Адреса"; @override - String get restore_wallet_restore_description => "Опис відновлюваного гаманця"; + String get restore_wallet_restore_description => + "Опис відновлюваного гаманця"; @override String get today => "Сьогодні"; @override @@ -4024,7 +4436,8 @@ class $uk extends S { @override String get ok => "OK"; @override - String get address_remove_content => "Ви впевнені, що хочете видалити вибраний контакт?"; + String get address_remove_content => + "Ви впевнені, що хочете видалити вибраний контакт?"; @override String get wallet_list_title => "Monero Гаманець"; @override @@ -4052,9 +4465,11 @@ class $uk extends S { @override String get restore_title_from_seed => "Відновити з мнемонічної фрази"; @override - String get restore_description_from_backup => "Ви можете відновити Cake Wallet з вашого резервного файлу"; + String get restore_description_from_backup => + "Ви можете відновити Cake Wallet з вашого резервного файлу"; @override - String get error_text_node_port => "Порт вузла може містити тільки цифри від 0 до 65535"; + String get error_text_node_port => + "Порт вузла може містити тільки цифри від 0 до 65535"; @override String get add_new_word => "Добавити нове слово"; @override @@ -4062,7 +4477,8 @@ class $uk extends S { @override String get digit_pin => "-значний PIN"; @override - String get first_wallet_text => "В самому зручному гаманці для Monero"; + String get first_wallet_text => + "В самому зручному гаманці для Monero та Bitcoin"; @override String get settings_trades => "Операції"; @override @@ -4070,61 +4486,86 @@ class $uk extends S { @override String change_language_to(String language) => "Змінити мову на ${language}?"; @override - String change_current_node(String node) => "Ви впевнені, що хочете змінити поточний вузол на ${node}?"; + String change_current_node(String node) => + "Ви впевнені, що хочете змінити поточний вузол на ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Завантаження ${wallet_name} гаманця"; + String wallet_list_loading_wallet(String wallet_name) => + "Завантаження ${wallet_name} гаманця"; @override String version(String currentVersion) => "Версія ${currentVersion}"; @override String router_no_route(String name) => "Не встановлено маршрут для ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "Операція для ${provider} не створена. Сума менша мінімальної: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "Операція для ${provider} не створена. Сума менша мінімальної: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "Операція ${tradeId} ${title} не знайдена."; + String trade_id_not_found(String tradeId, String title) => + "Операція ${tradeId} ${title} не знайдена."; @override - String transaction_details_copied(String title) => "${title} скопійовано в буфер обміну"; + String transaction_details_copied(String title) => + "${title} скопійовано в буфер обміну"; @override - String trade_details_copied(String title) => "${title} скопійовано в буфер обміну"; + String trade_details_copied(String title) => + "${title} скопійовано в буфер обміну"; @override String powered_by(String title) => "Використовуючи ${title}"; @override - String send_priority(String transactionPriority) => "Комісія встановлена в залежності від пріоритету: ${transactionPriority}.\nПріоритет транзакції може бути змінений в налаштуваннях"; + String send_priority(String transactionPriority) => + "Комісія встановлена в залежності від пріоритету: ${transactionPriority}.\nПріоритет транзакції може бути змінений в налаштуваннях"; @override - String trade_for_not_created(String title) => "Операція для ${title} не створена."; + String trade_for_not_created(String title) => + "Операція для ${title} не створена."; @override - String trade_is_powered_by(String provider) => "Операція виконана через ${provider}"; + String trade_is_powered_by(String provider) => + "Операція виконана через ${provider}"; @override String time(String minutes, String seconds) => "${minutes}хв ${seconds}сек"; @override - String max_value(String value, String currency) => "Макс: ${value} ${currency}"; + String max_value(String value, String currency) => + "Макс: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "Операція для ${provider} не створена. Сума більше максимальної: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "Операція для ${provider} не створена. Сума більше максимальної: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} адреса"; @override - String min_value(String value, String currency) => "Мін: ${value} ${currency}"; + String min_value(String value, String currency) => + "Мін: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Помилка аутентифікації. ${state_error}"; + String failed_authentication(String state_error) => + "Помилка аутентифікації. ${state_error}"; @override String Blocks_remaining(String status) => "${status} Залишилось блоків"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Натиснувши підтвердити, ви відправите ${fetchingLabel} ${from} з вашого гаманця ${walletName} на адресу вказану вище. Або ви можете відправити зі свого зовнішнього гаманця на вищевказану адресу/QR-код.\n\nБудь ласка, натисніть підтвердити для продовження або поверніться назад щоб змінити суму."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Натиснувши підтвердити, ви відправите ${fetchingLabel} ${from} з вашого гаманця ${walletName} на адресу вказану вище. Або ви можете відправити зі свого зовнішнього гаманця на вищевказану адресу/QR-код.\n\nБудь ласка, натисніть підтвердити для продовження або поверніться назад щоб змінити суму."; @override - String error_text_limits_loading_failed(String provider) => "Операція для ${provider} не створена. Помилка завантаження лімітів"; + String error_text_limits_loading_failed(String provider) => + "Операція для ${provider} не створена. Помилка завантаження лімітів"; @override - String exchange_result_description(String fetchingLabel, String from) => "Будь ласка, відправте ${fetchingLabel} ${from} на адресу, вказану вище."; + String exchange_result_description(String fetchingLabel, String from) => + "Будь ласка, відправте ${fetchingLabel} ${from} на адресу, вказану вище."; @override - String commit_transaction_amount_fee(String amount, String fee) => "Підтвердити транзакцію \nСума: ${amount}\nКомісія: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Підтвердити транзакцію \nСума: ${amount}\nКомісія: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "Ви будете відправляти кошти\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "Ви будете відправляти кошти\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Помилка при видаленні ${wallet_name} гаманця. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Помилка при видаленні ${wallet_name} гаманця. ${error}"; @override - String copied_key_to_clipboard(String key) => "Скопійовано ${key} в буфер обміну"; + String copied_key_to_clipboard(String key) => + "Скопійовано ${key} в буфер обміну"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "Помилка при завантаженні ${wallet_name} гаманця. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Помилка при завантаженні ${wallet_name} гаманця. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Видалення ${wallet_name} гаманця"; + String wallet_list_removing_wallet(String wallet_name) => + "Видалення ${wallet_name} гаманця"; } class $ja extends S { @@ -4162,7 +4603,8 @@ class $ja extends S { @override String get trade_id => "取引ID:"; @override - String get restore_description_from_seed => "25ワードからウォレットを復元しますまたは13ワードの組み合わせコード"; + String get restore_description_from_seed => + "25ワードからウォレットを復元しますまたは13ワードの組み合わせコード"; @override String get trade_state_underpaid => "支払不足"; @override @@ -4224,7 +4666,8 @@ class $ja extends S { @override String get remove_node_message => "選択したノードを削除してもよろしいですか?"; @override - String get error_text_account_name => "アカウント名には文字のみを含めることができます \n1〜15文字である必要があります"; + String get error_text_account_name => + "アカウント名には文字のみを含めることができます \n1〜15文字である必要があります"; @override String get reconnection => "再接続"; @override @@ -4244,7 +4687,8 @@ class $ja extends S { @override String get copy_address => "住所をコピー"; @override - String get error_text_subaddress_name => "サブアドレス名に含めることはできません` , ' \" シンボル\n1〜20文字の長さである必要があります"; + String get error_text_subaddress_name => + "サブアドレス名に含めることはできません` , ' \" シンボル\n1〜20文字の長さである必要があります"; @override String get incorrect_seed => "入力されたテキストは無効です。"; @override @@ -4288,6 +4732,9 @@ class $ja extends S { @override String get settings_title => "設定"; @override + String get restore_bitcoin_description_from_seed => + "12ワードの組み合わせコードからウォレットを復元する"; + @override String get address_book_menu => "住所録"; @override String get wallet_restoration_store_incorrect_seed_length => "誤ったシード長s"; @@ -4320,7 +4767,8 @@ class $ja extends S { @override String get error_text_crypto_currency => "小数桁数\n12以下でなければなりません"; @override - String get error_text_contact_name => "連絡先名に含めることはできません ` , ' \" シンボル\n長さは1〜32文字でなければなりません"; + String get error_text_contact_name => + "連絡先名に含めることはできません ` , ' \" シンボル\n長さは1〜32文字でなければなりません"; @override String get restore_seed_keys_restore => "シード/キーの復元"; @override @@ -4392,7 +4840,8 @@ class $ja extends S { @override String get nodes => "ノード"; @override - String get error_text_template => "テンプレートの名前とアドレスに含めることはできません ` , ' \" シンボル\n1〜106文字の長さである必要があります"; + String get error_text_template => + "テンプレートの名前とアドレスに含めることはできません ` , ' \" シンボル\n1〜106文字の長さである必要があります"; @override String get seed_share => "シードを共有する"; @override @@ -4422,6 +4871,11 @@ class $ja extends S { @override String get xmr_available_balance => "XMR利用可能残高"; @override + String get restore_bitcoin_description_from_keys => + "秘密鍵から生成されたWIF文字列からウォレットを復元します"; + @override + String get restore_bitcoin_title_from_keys => "WIFから復元"; + @override String get scan_qr_code => "QRコードをスキャンして住所を取得します"; @override String get trade_state_paid => "有料"; @@ -4516,7 +4970,8 @@ class $ja extends S { @override String get exchange_result_write_down_ID => "*上記のIDをコピーまたは書き留めてください."; @override - String get exchange_result_write_down_trade_id => "続行するには、取引IDをコピーまたは書き留めてください."; + String get exchange_result_write_down_trade_id => + "続行するには、取引IDをコピーまたは書き留めてください."; @override String get new_subaddress_title => "新しいサブアドレス"; @override @@ -4586,9 +5041,11 @@ class $ja extends S { @override String get address_remove_contact => "連絡先を削除します"; @override - String get error_text_wallet_name => "ウォレット名には文字のみを含めることができます\n1〜15文字である必要があります"; + String get error_text_wallet_name => + "ウォレット名には文字のみを含めることができます\n1〜15文字である必要があります"; @override - String get restore_description_from_keys => "生成されたウォレットを復元します秘密鍵から保存されたキーストローク"; + String get restore_description_from_keys => + "生成されたウォレットを復元します秘密鍵から保存されたキーストローク"; @override String get seed_language_next => "次"; @override @@ -4684,7 +5141,8 @@ class $ja extends S { @override String get restore_title_from_seed => "シードから復元"; @override - String get restore_description_from_backup => "Cake Walletアプリ全体を復元できますバックアップファイル"; + String get restore_description_from_backup => + "Cake Walletアプリ全体を復元できますバックアップファイル"; @override String get error_text_node_port => "ノードポートには、0〜65535の数字のみを含めることができます"; @override @@ -4694,7 +5152,7 @@ class $ja extends S { @override String get digit_pin => "桁ピン"; @override - String get first_wallet_text => "素晴らしい財布 ために Monero"; + String get first_wallet_text => "素晴らしい財布 ために Monero そして Bitcoin"; @override String get settings_trades => "取引"; @override @@ -4704,15 +5162,19 @@ class $ja extends S { @override String change_current_node(String node) => "現在のノードを変更してよろしいですか ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "読み込み中 ${wallet_name} 財布"; + String wallet_list_loading_wallet(String wallet_name) => + "読み込み中 ${wallet_name} 財布"; @override String version(String currentVersion) => "バージョン ${currentVersion}"; @override String router_no_route(String name) => "ルートが定義されていません ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "${provider} の取引は作成されません。 金額は最小額より少ない: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "${provider} の取引は作成されません。 金額は最小額より少ない: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "トレード ${tradeId} of ${title} 見つかりません"; + String trade_id_not_found(String tradeId, String title) => + "トレード ${tradeId} of ${title} 見つかりません"; @override String transaction_details_copied(String title) => "${title} クリップボードにコピーしました"; @override @@ -4720,7 +5182,8 @@ class $ja extends S { @override String powered_by(String title) => "搭載 ${title}"; @override - String send_priority(String transactionPriority) => "現在、料金は ${transactionPriority} 優先度.\nトランザクションの優先度は設定で調整できます"; + String send_priority(String transactionPriority) => + "現在、料金は ${transactionPriority} 優先度.\nトランザクションの優先度は設定で調整できます"; @override String trade_for_not_created(String title) => "取引 ${title} 作成されません"; @override @@ -4728,9 +5191,12 @@ class $ja extends S { @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "マックス: ${value} ${currency}"; + String max_value(String value, String currency) => + "マックス: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "${provider} の取引は作成されません。 金額は最大値を超えています: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "${provider} の取引は作成されません。 金額は最大値を超えています: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} 住所"; @override @@ -4740,23 +5206,32 @@ class $ja extends S { @override String Blocks_remaining(String status) => "${status} 残りのブロック"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "確認を押すと、送信されます ${fetchingLabel} ${from} と呼ばれるあなたの財布から ${walletName} 上記のアドレスへ. または、外部ウォレットから上記のアドレス/ QRコードに送信できます.\n\n確認を押して続行するか、戻って金額を変更してください."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "確認を押すと、送信されます ${fetchingLabel} ${from} と呼ばれるあなたの財布から ${walletName} 上記のアドレスへ. または、外部ウォレットから上記のアドレス/ QRコードに送信できます.\n\n確認を押して続行するか、戻って金額を変更してください."; @override - String error_text_limits_loading_failed(String provider) => "${provider} の取引は作成されません。 制限の読み込みに失敗しました"; + String error_text_limits_loading_failed(String provider) => + "${provider} の取引は作成されません。 制限の読み込みに失敗しました"; @override - String exchange_result_description(String fetchingLabel, String from) => "送信してください ${fetchingLabel} ${from} 上記のアドレスへ."; + String exchange_result_description(String fetchingLabel, String from) => + "送信してください ${fetchingLabel} ${from} 上記のアドレスへ."; @override - String commit_transaction_amount_fee(String amount, String fee) => "トランザクションをコミット\n量: ${amount}\n費用: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "トランザクションをコミット\n量: ${amount}\n費用: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "に送金します\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "に送金します\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "削除できませんでした ${wallet_name} 財布. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "削除できませんでした ${wallet_name} 財布. ${error}"; @override String copied_key_to_clipboard(String key) => "コピー済み ${key} クリップボードへ"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "読み込みに失敗しました ${wallet_name} 財布. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "読み込みに失敗しました ${wallet_name} 財布. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "取りはずし ${wallet_name} 財布"; + String wallet_list_removing_wallet(String wallet_name) => + "取りはずし ${wallet_name} 財布"; } class $en extends S { @@ -4786,7 +5261,8 @@ class $pl extends S { @override String get hidden_balance => "Ukryta równowaga"; @override - String get biometric_auth_reason => "Zeskanuj swój odcisk palca, aby go uwierzytelnić"; + String get biometric_auth_reason => + "Zeskanuj swój odcisk palca, aby go uwierzytelnić"; @override String get transaction_sent => "Transakcja wysłana!"; @override @@ -4798,7 +5274,8 @@ class $pl extends S { @override String get trade_id => "Identyfikator handlu:"; @override - String get restore_description_from_seed => "Przywróć swój portfel z 25 słów lub 13-słowny kod kombinacji"; + String get restore_description_from_seed => + "Przywróć swój portfel z 25 słów lub 13-słowny kod kombinacji"; @override String get trade_state_underpaid => "Niedopłacone"; @override @@ -4810,7 +5287,8 @@ class $pl extends S { @override String get send_templates => "Szablony"; @override - String get please_try_to_connect_to_another_node => "Spróbuj połączyć się z innym węzłem"; + String get please_try_to_connect_to_another_node => + "Spróbuj połączyć się z innym węzłem"; @override String get trade_state_traded => "Handlowane"; @override @@ -4844,7 +5322,8 @@ class $pl extends S { @override String get receive_amount => "Ilość"; @override - String get settings_allow_biometrical_authentication => "Zezwalaj na uwierzytelnianie biometryczne"; + String get settings_allow_biometrical_authentication => + "Zezwalaj na uwierzytelnianie biometryczne"; @override String get view_key_private => "Wyświetl klucz (prywatny)"; @override @@ -4854,13 +5333,15 @@ class $pl extends S { @override String get send_sending => "Wysyłanie..."; @override - String get error_text_address => "Wallet address must correspond to the type\nof cryptocurrency"; + String get error_text_address => + "Wallet address must correspond to the type\nof cryptocurrency"; @override String get send_your_wallet => "Twój portfel"; @override String get remove_node_message => "Czy na pewno chcesz usunąć wybrany węzeł?"; @override - String get error_text_account_name => "Nazwa konta może zawierać tylko litery, cyfry\ni musi mieć od 1 do 15 znaków"; + String get error_text_account_name => + "Nazwa konta może zawierać tylko litery, cyfry\ni musi mieć od 1 do 15 znaków"; @override String get reconnection => "Ponowne połączenie"; @override @@ -4880,13 +5361,15 @@ class $pl extends S { @override String get copy_address => "Skopiuj adress"; @override - String get error_text_subaddress_name => "Nazwa podadresu nie może zawierać ` , ' \" symbolika\ni musi mieć od 1 do 20 znaków"; + String get error_text_subaddress_name => + "Nazwa podadresu nie może zawierać ` , ' \" symbolika\ni musi mieć od 1 do 20 znaków"; @override String get incorrect_seed => "Wprowadzony tekst jest nieprawidłowy."; @override String get settings_all => "Cały"; @override - String get nodes_list_reset_to_default_message => "Czy na pewno chcesz przywrócić ustawienia domyślne?"; + String get nodes_list_reset_to_default_message => + "Czy na pewno chcesz przywrócić ustawienia domyślne?"; @override String get receive => "Otrzymać"; @override @@ -4902,7 +5385,8 @@ class $pl extends S { @override String get settings_display_balance_as => "Wyświetl saldo jako"; @override - String get placeholder_transactions => "Twoje transakcje zostaną wyświetlone tutaj"; + String get placeholder_transactions => + "Twoje transakcje zostaną wyświetlone tutaj"; @override String get trade_details_provider => "Dostawca"; @override @@ -4924,9 +5408,13 @@ class $pl extends S { @override String get settings_title => "Ustawienia"; @override + String get restore_bitcoin_description_from_seed => + "Przywróć swój portfel z kodu złożonego z 12 słów"; + @override String get address_book_menu => "Książka adresowa"; @override - String get wallet_restoration_store_incorrect_seed_length => "Nieprawidłowa długość nasion"; + String get wallet_restoration_store_incorrect_seed_length => + "Nieprawidłowa długość nasion"; @override String get seed_language_spanish => "Hiszpański"; @override @@ -4954,9 +5442,11 @@ class $pl extends S { @override String get sync_status_not_connected => "NIE POŁĄCZONY"; @override - String get error_text_crypto_currency => "Liczba cyfr ułamkowych\nmusi być mniejsza lub równa 12"; + String get error_text_crypto_currency => + "Liczba cyfr ułamkowych\nmusi być mniejsza lub równa 12"; @override - String get error_text_contact_name => "Nazwa kontaktu nie może zawierać` , ' \" symbolika\ni musi mieć od 1 do 32 znaków "; + String get error_text_contact_name => + "Nazwa kontaktu nie może zawierać` , ' \" symbolika\ni musi mieć od 1 do 32 znaków "; @override String get restore_seed_keys_restore => "Przywracanie nasion / kluczy"; @override @@ -4978,7 +5468,8 @@ class $pl extends S { @override String get pending => " (w oczekiwaniu)"; @override - String get setup_successful => "Twój kod PIN został pomyślnie skonfigurowany!"; + String get setup_successful => + "Twój kod PIN został pomyślnie skonfigurowany!"; @override String get fetching => "Ujmujący"; @override @@ -5018,7 +5509,8 @@ class $pl extends S { @override String get copy_id => "ID kopii"; @override - String get please_make_selection => "Wybierz poniżej, aby cutwórz lub odzyskaj swój portfel."; + String get please_make_selection => + "Wybierz poniżej, aby cutwórz lub odzyskaj swój portfel."; @override String get loading_your_wallet => "Ładowanie portfela"; @override @@ -5028,7 +5520,8 @@ class $pl extends S { @override String get nodes => "Węzły"; @override - String get error_text_template => "Nazwa i adres szablonu nie mogą zawierać ` , ' \" symbolika\ni musi mieć od 1 do 106 znaków"; + String get error_text_template => + "Nazwa i adres szablonu nie mogą zawierać ` , ' \" symbolika\ni musi mieć od 1 do 106 znaków"; @override String get seed_share => "Udostępnij ziarno"; @override @@ -5054,10 +5547,16 @@ class $pl extends S { @override String get trade_state_complete => "Kompletny"; @override - String get error_text_xmr => "Wartość XMR nie może przekraczać dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 12"; + String get error_text_xmr => + "Wartość XMR nie może przekraczać dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 12"; @override String get xmr_available_balance => "XMR Dostępne saldo"; @override + String get restore_bitcoin_description_from_keys => + "Przywróć swój portfel z wygenerowanego ciągu WIF z kluczy prywatnych"; + @override + String get restore_bitcoin_title_from_keys => "Przywróć z WIF"; + @override String get scan_qr_code => "Zeskanuj kod QR, aby uzyskać adres"; @override String get trade_state_paid => "Płatny"; @@ -5082,7 +5581,8 @@ class $pl extends S { @override String get wallet_name => "Nazwa portfela"; @override - String get error_text_payment_id => "ID może zawierać od 16 do 64 znaków w formacie szesnastkowym"; + String get error_text_payment_id => + "ID może zawierać od 16 do 64 znaków w formacie szesnastkowym"; @override String get node_reset_settings_title => "Resetowanie ustawień"; @override @@ -5134,7 +5634,8 @@ class $pl extends S { @override String get seed_language_dutch => "Holenderski"; @override - String get restore_description_from_seed_keys => "Odzyskaj swój portfel z nasion / kluczy, które zapisałeś w bezpiecznym miejscu"; + String get restore_description_from_seed_keys => + "Odzyskaj swój portfel z nasion / kluczy, które zapisałeś w bezpiecznym miejscu"; @override String get copy => "Kopiuj"; @override @@ -5150,9 +5651,11 @@ class $pl extends S { @override String get contact_name => "Nazwa Kontaktu"; @override - String get exchange_result_write_down_ID => "*Skopiuj lub zanotuj swój identyfikator pokazany powyżej."; + String get exchange_result_write_down_ID => + "*Skopiuj lub zanotuj swój identyfikator pokazany powyżej."; @override - String get exchange_result_write_down_trade_id => "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować."; + String get exchange_result_write_down_trade_id => + "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować."; @override String get new_subaddress_title => "Nowy podadres"; @override @@ -5164,7 +5667,8 @@ class $pl extends S { @override String get trade_not_created => "Handel nie utworzony."; @override - String get confirm_delete_wallet => "Ta czynność usunie ten portfel. Czy chcesz kontynuować?"; + String get confirm_delete_wallet => + "Ta czynność usunie ten portfel. Czy chcesz kontynuować?"; @override String get restore_wallet_name => "Nazwa portfela"; @override @@ -5174,7 +5678,8 @@ class $pl extends S { @override String get rename => "Przemianować"; @override - String get confirm_delete_template => "Ta czynność usunie ten szablon. Czy chcesz kontynuować?"; + String get confirm_delete_template => + "Ta czynność usunie ten szablon. Czy chcesz kontynuować?"; @override String get restore_active_seed => "Aktywne nasiona"; @override @@ -5190,13 +5695,15 @@ class $pl extends S { @override String get show_keys => "Pokaż klucze"; @override - String get error_text_fiat => "Wartość kwoty nie może przekroczyć dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 2"; + String get error_text_fiat => + "Wartość kwoty nie może przekroczyć dostępnego salda.\nLiczba cyfr ułamkowych musi być mniejsza lub równa 2"; @override String get addresses => "Adresy"; @override String get transactions_by_date => "Transakcje według daty"; @override - String get restore_from_seed_placeholder => "Wpisz lub wklej tutaj swoją frazę kodową"; + String get restore_from_seed_placeholder => + "Wpisz lub wklej tutaj swoją frazę kodową"; @override String get use => "Używać "; @override @@ -5222,9 +5729,11 @@ class $pl extends S { @override String get address_remove_contact => "Usuń kontakt"; @override - String get error_text_wallet_name => "Nazwa portfela może zawierać tylko litery i cyfry\ni musi mieć od 1 do 15 znaków"; + String get error_text_wallet_name => + "Nazwa portfela może zawierać tylko litery i cyfry\ni musi mieć od 1 do 15 znaków"; @override - String get restore_description_from_keys => "Przywróć swój portfel z wygenerowanego naciśnięcia klawiszy zapisane z kluczy prywatnych"; + String get restore_description_from_keys => + "Przywróć swój portfel z wygenerowanego naciśnięcia klawiszy zapisane z kluczy prywatnych"; @override String get seed_language_next => "Kolejny"; @override @@ -5240,7 +5749,8 @@ class $pl extends S { @override String get send_title => "Wyślij"; @override - String get error_text_keys => "Klucze portfela mogą zawierać tylko 64 znaki w systemie szesnastkowym"; + String get error_text_keys => + "Klucze portfela mogą zawierać tylko 64 znaki w systemie szesnastkowym"; @override String get settings_save_recipient_address => "Zapisz adres odbiorcy"; @override @@ -5292,7 +5802,8 @@ class $pl extends S { @override String get ok => "Dobrze"; @override - String get address_remove_content => "Czy na pewno chcesz usunąć wybrany kontakt?"; + String get address_remove_content => + "Czy na pewno chcesz usunąć wybrany kontakt?"; @override String get wallet_list_title => "Portfel Monero"; @override @@ -5320,9 +5831,11 @@ class $pl extends S { @override String get restore_title_from_seed => "Przywróć z nasion"; @override - String get restore_description_from_backup => "Możesz przywrócić całą aplikację Cake Wallet z plik kopii zapasowej"; + String get restore_description_from_backup => + "Możesz przywrócić całą aplikację Cake Wallet z plik kopii zapasowej"; @override - String get error_text_node_port => "Port węzła może zawierać tylko liczby od 0 do 65535"; + String get error_text_node_port => + "Port węzła może zawierać tylko liczby od 0 do 65535"; @override String get add_new_word => "Dodaj nowe słowo"; @override @@ -5330,7 +5843,7 @@ class $pl extends S { @override String get digit_pin => "-znak PIN"; @override - String get first_wallet_text => "Niesamowity portfel dla Monero"; + String get first_wallet_text => "Niesamowity portfel dla Monero i Bitcoin"; @override String get settings_trades => "Transakcje"; @override @@ -5338,61 +5851,84 @@ class $pl extends S { @override String change_language_to(String language) => "Zmień język na ${language}?"; @override - String change_current_node(String node) => "Czy na pewno chcesz przywrócić ustawienia domyślne? ${node}?"; + String change_current_node(String node) => + "Czy na pewno chcesz przywrócić ustawienia domyślne? ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Ładuję ${wallet_name} portfel"; + String wallet_list_loading_wallet(String wallet_name) => + "Ładuję ${wallet_name} portfel"; @override String version(String currentVersion) => "Wersja ${currentVersion}"; @override String router_no_route(String name) => "Brak zdefiniowanej trasy dla ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "Wymiana dla ${provider} nie została utworzona. Kwota jest mniejsza niż minimalna: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "Wymiana dla ${provider} nie została utworzona. Kwota jest mniejsza niż minimalna: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "Handel ${tradeId} of ${title} nie znaleziono."; + String trade_id_not_found(String tradeId, String title) => + "Handel ${tradeId} of ${title} nie znaleziono."; @override - String transaction_details_copied(String title) => "${title} skopiowane do schowka"; + String transaction_details_copied(String title) => + "${title} skopiowane do schowka"; @override String trade_details_copied(String title) => "${title} skopiowane do schowka"; @override String powered_by(String title) => "Zasilany przez ${title}"; @override - String send_priority(String transactionPriority) => "Obecnie opłata ustalona jest na ${transactionPriority} priorytet.\nPriorytet transakcji można zmienić w ustawieniach"; + String send_priority(String transactionPriority) => + "Obecnie opłata ustalona jest na ${transactionPriority} priorytet.\nPriorytet transakcji można zmienić w ustawieniach"; @override - String trade_for_not_created(String title) => "Zamienić się za ${title} nie jest tworzony."; + String trade_for_not_created(String title) => + "Zamienić się za ${title} nie jest tworzony."; @override - String trade_is_powered_by(String provider) => "Ten handel jest zasilany przez ${provider}"; + String trade_is_powered_by(String provider) => + "Ten handel jest zasilany przez ${provider}"; @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "Max: ${value} ${currency}"; + String max_value(String value, String currency) => + "Max: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "Wymiana dla ${provider} nie została utworzona. Kwota jest większa niż maksymalna: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "Wymiana dla ${provider} nie została utworzona. Kwota jest większa niż maksymalna: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "Adres ${cryptoCurrency}"; @override - String min_value(String value, String currency) => "Min: ${value} ${currency}"; + String min_value(String value, String currency) => + "Min: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Nieudane uwierzytelnienie. ${state_error}"; + String failed_authentication(String state_error) => + "Nieudane uwierzytelnienie. ${state_error}"; @override String Blocks_remaining(String status) => "${status} Bloki pozostałe"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} z twojego portfela. Lub możesz wysłać z zewnętrznego portfela na powyższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Naciskając Potwierdź, wyślesz ${fetchingLabel} ${from} z twojego portfela ${walletName} z twojego portfela. Lub możesz wysłać z zewnętrznego portfela na powyższy adres / kod QR.\n\nNaciśnij Potwierdź, aby kontynuować lub wróć, aby zmienić kwoty."; @override - String error_text_limits_loading_failed(String provider) => "Wymiana dla ${provider} nie została utworzona. Ładowanie limitów nie powiodło się"; + String error_text_limits_loading_failed(String provider) => + "Wymiana dla ${provider} nie została utworzona. Ładowanie limitów nie powiodło się"; @override - String exchange_result_description(String fetchingLabel, String from) => "Proszę wyślij ${fetchingLabel} ${from} na adres podany powyżej."; + String exchange_result_description(String fetchingLabel, String from) => + "Proszę wyślij ${fetchingLabel} ${from} na adres podany powyżej."; @override - String commit_transaction_amount_fee(String amount, String fee) => "Zatwierdź transakcję\nIlość: ${amount}\nOpłata: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Zatwierdź transakcję\nIlość: ${amount}\nOpłata: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "Będziesz wysyłać środki na\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "Będziesz wysyłać środki na\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Nie udało się usunąć ${wallet_name} portfel. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Nie udało się usunąć ${wallet_name} portfel. ${error}"; @override String copied_key_to_clipboard(String key) => "Skopiowane ${key} do schowka"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "Nie udało się załadować ${wallet_name} portfel. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Nie udało się załadować ${wallet_name} portfel. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Usuwanie ${wallet_name} portfel"; + String wallet_list_removing_wallet(String wallet_name) => + "Usuwanie ${wallet_name} portfel"; } class $es extends S { @@ -5418,7 +5954,8 @@ class $es extends S { @override String get hidden_balance => "Balance oculto"; @override - String get biometric_auth_reason => "Escanee su huella digital para autenticar"; + String get biometric_auth_reason => + "Escanee su huella digital para autenticar"; @override String get transaction_sent => "Transacción enviada!"; @override @@ -5430,7 +5967,8 @@ class $es extends S { @override String get trade_id => "Comercial ID:"; @override - String get restore_description_from_seed => "Restaure su billetera desde el código de combinación de 25 palabras i de 13 palabras"; + String get restore_description_from_seed => + "Restaure su billetera desde el código de combinación de 25 palabras i de 13 palabras"; @override String get trade_state_underpaid => "Poco pagado"; @override @@ -5442,7 +5980,8 @@ class $es extends S { @override String get send_templates => "Plantillas"; @override - String get please_try_to_connect_to_another_node => "Intenta conectarte a otro nodo"; + String get please_try_to_connect_to_another_node => + "Intenta conectarte a otro nodo"; @override String get trade_state_traded => "Negociado"; @override @@ -5476,7 +6015,8 @@ class $es extends S { @override String get receive_amount => "Cantidad"; @override - String get settings_allow_biometrical_authentication => "Permitir autenticación biométrica"; + String get settings_allow_biometrical_authentication => + "Permitir autenticación biométrica"; @override String get view_key_private => "View clave (privado)"; @override @@ -5486,13 +6026,16 @@ class $es extends S { @override String get send_sending => "Enviando..."; @override - String get error_text_address => "La dirección de la billetera debe corresponder al tipo \nde criptomoneda"; + String get error_text_address => + "La dirección de la billetera debe corresponder al tipo \nde criptomoneda"; @override String get send_your_wallet => "Tu billetera"; @override - String get remove_node_message => "¿Está seguro de que desea eliminar el nodo seleccionado?"; + String get remove_node_message => + "¿Está seguro de que desea eliminar el nodo seleccionado?"; @override - String get error_text_account_name => "El nombre de la cuenta solo puede contener letras, números \ny debe tener entre 1 y 15 caracteres de longitud"; + String get error_text_account_name => + "El nombre de la cuenta solo puede contener letras, números \ny debe tener entre 1 y 15 caracteres de longitud"; @override String get reconnection => "Reconexión"; @override @@ -5508,17 +6051,20 @@ class $es extends S { @override String get reconnect_alert_text => "¿Estás seguro de reconectar?"; @override - String get send_error_minimum_value => "El valor mínimo de la cantidad es 0.01"; + String get send_error_minimum_value => + "El valor mínimo de la cantidad es 0.01"; @override String get copy_address => "Copiar dirección "; @override - String get error_text_subaddress_name => "El nombre de la subdirección no puede contener símbolos `, '\" \ny debe tener entre 1 y 20 caracteres de longitud"; + String get error_text_subaddress_name => + "El nombre de la subdirección no puede contener símbolos `, '\" \ny debe tener entre 1 y 20 caracteres de longitud"; @override String get incorrect_seed => "El texto ingresado no es válido."; @override String get settings_all => "TODOS"; @override - String get nodes_list_reset_to_default_message => "¿Está seguro de que desea restablecer la configuración predeterminada?"; + String get nodes_list_reset_to_default_message => + "¿Está seguro de que desea restablecer la configuración predeterminada?"; @override String get receive => "Recibir"; @override @@ -5528,7 +6074,8 @@ class $es extends S { @override String get trade_details_pair => "Par"; @override - String get choose_wallet_currency => "Por favor, elija la moneda de la billetera:"; + String get choose_wallet_currency => + "Por favor, elija la moneda de la billetera:"; @override String get confirm => "Confirmar"; @override @@ -5556,9 +6103,13 @@ class $es extends S { @override String get settings_title => "Configuraciones"; @override + String get restore_bitcoin_description_from_seed => + "Restaure su billetera a partir del código de combinación de 12 palabras"; + @override String get address_book_menu => "Libreta de direcciones"; @override - String get wallet_restoration_store_incorrect_seed_length => "Longitud de semilla incorrecta"; + String get wallet_restoration_store_incorrect_seed_length => + "Longitud de semilla incorrecta"; @override String get seed_language_spanish => "Español"; @override @@ -5580,15 +6131,18 @@ class $es extends S { @override String get please_select => "Por favor seleccione:"; @override - String get restore_title_from_backup => "Restaurar desde un archivo de respaldo"; + String get restore_title_from_backup => + "Restaurar desde un archivo de respaldo"; @override String get full_balance => "Balance completo"; @override String get sync_status_not_connected => "NO CONECTADO"; @override - String get error_text_crypto_currency => "El número de dígitos fraccionarios \ndebe ser menor o igual a 12"; + String get error_text_crypto_currency => + "El número de dígitos fraccionarios \ndebe ser menor o igual a 12"; @override - String get error_text_contact_name => "El nombre del contacto no puede contener símbolos `, '\" \ny debe tener entre 1 y 32 caracteres de longitud"; + String get error_text_contact_name => + "El nombre del contacto no puede contener símbolos `, '\" \ny debe tener entre 1 y 32 caracteres de longitud"; @override String get restore_seed_keys_restore => "Restauración de semillas / llaves"; @override @@ -5650,7 +6204,8 @@ class $es extends S { @override String get copy_id => "Copiar ID"; @override - String get please_make_selection => "Seleccione a continuación para crear o recuperar su billetera."; + String get please_make_selection => + "Seleccione a continuación para crear o recuperar su billetera."; @override String get loading_your_wallet => "Cargando tu billetera"; @override @@ -5660,7 +6215,8 @@ class $es extends S { @override String get nodes => "Nodos"; @override - String get error_text_template => "El nombre y la dirección de la plantilla no pueden contener símbolos ` , '\" \ny debe tener entre 1 y 106 caracteres de longitud"; + String get error_text_template => + "El nombre y la dirección de la plantilla no pueden contener símbolos ` , '\" \ny debe tener entre 1 y 106 caracteres de longitud"; @override String get seed_share => "Compartir semillas"; @override @@ -5686,10 +6242,16 @@ class $es extends S { @override String get trade_state_complete => "Completar"; @override - String get error_text_xmr => "El valor XMR no puede exceder el saldo disponible.\nTEl número de dígitos de fracción debe ser menor o igual a 12"; + String get error_text_xmr => + "El valor XMR no puede exceder el saldo disponible.\nTEl número de dígitos de fracción debe ser menor o igual a 12"; @override String get xmr_available_balance => "XMR Available Balance"; @override + String get restore_bitcoin_description_from_keys => + "Restaure su billetera a partir de una cadena WIF generada a partir de sus claves privadas"; + @override + String get restore_bitcoin_title_from_keys => "Restaurar desde WIF"; + @override String get scan_qr_code => "Escanee el código QR para obtener la dirección"; @override String get trade_state_paid => "Pagado"; @@ -5714,7 +6276,8 @@ class $es extends S { @override String get wallet_name => "Nombre de la billetera"; @override - String get error_text_payment_id => "La ID de pago solo puede contener de 16 a 64 caracteres en hexadecimal"; + String get error_text_payment_id => + "La ID de pago solo puede contener de 16 a 64 caracteres en hexadecimal"; @override String get node_reset_settings_title => "Reiniciar ajustes"; @override @@ -5726,7 +6289,8 @@ class $es extends S { @override String get amount_is_estimate => "El monto recibido es un estimado"; @override - String get error_text_node_address => "Por favor, introduzca una dirección iPv4"; + String get error_text_node_address => + "Por favor, introduzca una dirección iPv4"; @override String get widgets_restore_from_date => "Restaurar desde fecha"; @override @@ -5736,7 +6300,8 @@ class $es extends S { @override String get new_wallet => "Nueva billetera"; @override - String get settings_display_on_dashboard_list => "Mostrar en la lista del tablero"; + String get settings_display_on_dashboard_list => + "Mostrar en la lista del tablero"; @override String get transaction_details_title => "Detalles de la transacción"; @override @@ -5766,7 +6331,8 @@ class $es extends S { @override String get seed_language_dutch => "Holandés"; @override - String get restore_description_from_seed_keys => "Recupere su billetera de las semillas/claves que ha guardado en un lugar seguro"; + String get restore_description_from_seed_keys => + "Recupere su billetera de las semillas/claves que ha guardado en un lugar seguro"; @override String get copy => "Dupdo"; @override @@ -5782,9 +6348,11 @@ class $es extends S { @override String get contact_name => "Nombre de contacto"; @override - String get exchange_result_write_down_ID => "*Copie o escriba su identificación que se muestra arriba."; + String get exchange_result_write_down_ID => + "*Copie o escriba su identificación que se muestra arriba."; @override - String get exchange_result_write_down_trade_id => "Por favor, copia o escribe el ID."; + String get exchange_result_write_down_trade_id => + "Por favor, copia o escribe el ID."; @override String get new_subaddress_title => "Nueva subdirección"; @override @@ -5796,7 +6364,8 @@ class $es extends S { @override String get trade_not_created => "Comercio no se crea."; @override - String get confirm_delete_wallet => "Esta acción eliminará esta billetera. ¿Desea continuar?"; + String get confirm_delete_wallet => + "Esta acción eliminará esta billetera. ¿Desea continuar?"; @override String get restore_wallet_name => "Nombre de la billetera"; @override @@ -5806,7 +6375,8 @@ class $es extends S { @override String get rename => "Rebautizar"; @override - String get confirm_delete_template => "Esta acción eliminará esta plantilla. ¿Desea continuar?"; + String get confirm_delete_template => + "Esta acción eliminará esta plantilla. ¿Desea continuar?"; @override String get restore_active_seed => "Semilla activa"; @override @@ -5822,13 +6392,15 @@ class $es extends S { @override String get show_keys => "Mostrar llaves"; @override - String get error_text_fiat => "El valor de la cantidad no puede exceder el saldo disponible.\nEl número de dígitos de fracción debe ser menor o igual a 2"; + String get error_text_fiat => + "El valor de la cantidad no puede exceder el saldo disponible.\nEl número de dígitos de fracción debe ser menor o igual a 2"; @override String get addresses => "Direcciones"; @override String get transactions_by_date => "Transacciones por fecha"; @override - String get restore_from_seed_placeholder => "Ingrese o pegue su frase de código aquí"; + String get restore_from_seed_placeholder => + "Ingrese o pegue su frase de código aquí"; @override String get use => "Utilizar a "; @override @@ -5854,9 +6426,11 @@ class $es extends S { @override String get address_remove_contact => "Remover contacto"; @override - String get error_text_wallet_name => "El nombre de la billetera solo puede contener letras, números \ny debe tener entre 1 y 15 caracteres de longitud"; + String get error_text_wallet_name => + "El nombre de la billetera solo puede contener letras, números \ny debe tener entre 1 y 15 caracteres de longitud"; @override - String get restore_description_from_keys => "Restaure su billetera de las pulsaciones de teclas generadas guardadas de sus claves privadas"; + String get restore_description_from_keys => + "Restaure su billetera de las pulsaciones de teclas generadas guardadas de sus claves privadas"; @override String get seed_language_next => "Próximo"; @override @@ -5872,9 +6446,11 @@ class $es extends S { @override String get send_title => "Enviar"; @override - String get error_text_keys => "Las llaves de billetera solo pueden contener 64 caracteres en hexadecimal"; + String get error_text_keys => + "Las llaves de billetera solo pueden contener 64 caracteres en hexadecimal"; @override - String get settings_save_recipient_address => "Guardar dirección del destinatario"; + String get settings_save_recipient_address => + "Guardar dirección del destinatario"; @override String get change_exchange_provider => "Cambiar proveedor de intercambio"; @override @@ -5924,7 +6500,8 @@ class $es extends S { @override String get ok => "OK"; @override - String get address_remove_content => "¿Estás seguro de que quieres eliminar el contacto seleccionado?"; + String get address_remove_content => + "¿Estás seguro de que quieres eliminar el contacto seleccionado?"; @override String get wallet_list_title => "Monedero Monero"; @override @@ -5952,9 +6529,11 @@ class $es extends S { @override String get restore_title_from_seed => "De la semilla"; @override - String get restore_description_from_backup => "Puede restaurar toda la aplicación Cake Wallet desde ysu archivo de respaldo"; + String get restore_description_from_backup => + "Puede restaurar toda la aplicación Cake Wallet desde ysu archivo de respaldo"; @override - String get error_text_node_port => "El puerto de nodo solo puede contener números entre 0 y 65535"; + String get error_text_node_port => + "El puerto de nodo solo puede contener números entre 0 y 65535"; @override String get add_new_word => "Agregar palabra nueva"; @override @@ -5962,69 +6541,97 @@ class $es extends S { @override String get digit_pin => "-dígito PIN"; @override - String get first_wallet_text => "Impresionante billetera para Monero"; + String get first_wallet_text => + "Impresionante billetera para Monero y Bitcoin"; @override String get settings_trades => "Comercia"; @override String get account => "Cuenta"; @override - String change_language_to(String language) => "Cambiar el idioma a ${language}?"; + String change_language_to(String language) => + "Cambiar el idioma a ${language}?"; @override - String change_current_node(String node) => "¿Está seguro de cambiar el nodo actual a ${node}?"; + String change_current_node(String node) => + "¿Está seguro de cambiar el nodo actual a ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Billetera ${wallet_name} de carga"; + String wallet_list_loading_wallet(String wallet_name) => + "Billetera ${wallet_name} de carga"; @override String version(String currentVersion) => "Versión ${currentVersion}"; @override String router_no_route(String name) => "No hay ruta definida para ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "El comercio por ${provider} no se crea. La cantidad es menos que mínima: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "El comercio por ${provider} no se crea. La cantidad es menos que mínima: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "Comercio ${tradeId} de ${title} no encontrado."; + String trade_id_not_found(String tradeId, String title) => + "Comercio ${tradeId} de ${title} no encontrado."; @override - String transaction_details_copied(String title) => "${title} Copiado al portapapeles"; + String transaction_details_copied(String title) => + "${title} Copiado al portapapeles"; @override - String trade_details_copied(String title) => "${title} Copiado al portapapeles"; + String trade_details_copied(String title) => + "${title} Copiado al portapapeles"; @override String powered_by(String title) => "Energizado por ${title}"; @override - String send_priority(String transactionPriority) => "Actualmente la tarifa se establece en ${transactionPriority} prioridad.\nLa prioridad de la transacción se puede ajustar en la configuración"; + String send_priority(String transactionPriority) => + "Actualmente la tarifa se establece en ${transactionPriority} prioridad.\nLa prioridad de la transacción se puede ajustar en la configuración"; @override - String trade_for_not_created(String title) => "Comercio por ${title} no se crea."; + String trade_for_not_created(String title) => + "Comercio por ${title} no se crea."; @override - String trade_is_powered_by(String provider) => "Este comercio es impulsado por ${provider}"; + String trade_is_powered_by(String provider) => + "Este comercio es impulsado por ${provider}"; @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "Max: ${value} ${currency}"; + String max_value(String value, String currency) => + "Max: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "El comercio por ${provider} no se crea. La cantidad es más que el máximo: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "El comercio por ${provider} no se crea. La cantidad es más que el máximo: ${max} ${currency}"; @override - String send_address(String cryptoCurrency) => "Dirección de ${cryptoCurrency}"; + String send_address(String cryptoCurrency) => + "Dirección de ${cryptoCurrency}"; @override - String min_value(String value, String currency) => "Min: ${value} ${currency}"; + String min_value(String value, String currency) => + "Min: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Autenticación fallida. ${state_error}"; + String failed_authentication(String state_error) => + "Autenticación fallida. ${state_error}"; @override String Blocks_remaining(String status) => "${status} Bloques restantes"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Al presionar confirmar, enviará ${fetchingLabel} ${from} desde su billetera llamada ${walletName} a la dirección que se muestra arriba. O puede enviar desde su billetera externa a la dirección / código QR anterior.\n\nPresione confirmar para continuar o regrese para cambiar los montos."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Al presionar confirmar, enviará ${fetchingLabel} ${from} desde su billetera llamada ${walletName} a la dirección que se muestra arriba. O puede enviar desde su billetera externa a la dirección / código QR anterior.\n\nPresione confirmar para continuar o regrese para cambiar los montos."; @override - String error_text_limits_loading_failed(String provider) => "El comercio por ${provider} no se crea. Límites de carga fallidos"; + String error_text_limits_loading_failed(String provider) => + "El comercio por ${provider} no se crea. Límites de carga fallidos"; @override - String exchange_result_description(String fetchingLabel, String from) => "Envíe ${fetchingLabel} ${from} a la dirección que se muestra arriba."; + String exchange_result_description(String fetchingLabel, String from) => + "Envíe ${fetchingLabel} ${from} a la dirección que se muestra arriba."; @override - String commit_transaction_amount_fee(String amount, String fee) => "Confirmar transacción\nCantidad: ${amount}\nCuota: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Confirmar transacción\nCantidad: ${amount}\nCuota: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "Enviará fondos a\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "Enviará fondos a\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Error al elimina ${wallet_name} billetera. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Error al elimina ${wallet_name} billetera. ${error}"; @override - String copied_key_to_clipboard(String key) => "Copiado ${key} al portapapeles"; + String copied_key_to_clipboard(String key) => + "Copiado ${key} al portapapeles"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "No se pudo cargar ${wallet_name} la billetera. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "No se pudo cargar ${wallet_name} la billetera. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Retirar ${wallet_name} billetera"; + String wallet_list_removing_wallet(String wallet_name) => + "Retirar ${wallet_name} billetera"; } class $nl extends S { @@ -6062,7 +6669,8 @@ class $nl extends S { @override String get trade_id => "Trade ID:"; @override - String get restore_description_from_seed => "Herstel uw portemonnee van het 25 woord of 13 woord combinatiecode"; + String get restore_description_from_seed => + "Herstel uw portemonnee van het 25 woord of 13 woord combinatiecode"; @override String get trade_state_underpaid => "Slecht betaald"; @override @@ -6074,7 +6682,8 @@ class $nl extends S { @override String get send_templates => "Sjablonen"; @override - String get please_try_to_connect_to_another_node => "Probeer verbinding te maken met een ander knooppunt"; + String get please_try_to_connect_to_another_node => + "Probeer verbinding te maken met een ander knooppunt"; @override String get trade_state_traded => "Traded"; @override @@ -6108,7 +6717,8 @@ class $nl extends S { @override String get receive_amount => "Bedrag"; @override - String get settings_allow_biometrical_authentication => "Biometrische authenticatie toestaan"; + String get settings_allow_biometrical_authentication => + "Biometrische authenticatie toestaan"; @override String get view_key_private => "Bekijk sleutel (privaat)"; @override @@ -6118,13 +6728,16 @@ class $nl extends S { @override String get send_sending => "Bezig met verzenden..."; @override - String get error_text_address => "Portemonnee-adres moet overeenkomen met het type\nvan cryptocurrency"; + String get error_text_address => + "Portemonnee-adres moet overeenkomen met het type\nvan cryptocurrency"; @override String get send_your_wallet => "Uw portemonnee"; @override - String get remove_node_message => "Weet u zeker dat u het geselecteerde knooppunt wilt verwijderen?"; + String get remove_node_message => + "Weet u zeker dat u het geselecteerde knooppunt wilt verwijderen?"; @override - String get error_text_account_name => "Accountnaam mag alleen letters, cijfers bevatten\nen moet tussen de 1 en 15 tekens lang zijn"; + String get error_text_account_name => + "Accountnaam mag alleen letters, cijfers bevatten\nen moet tussen de 1 en 15 tekens lang zijn"; @override String get reconnection => "Reconnection"; @override @@ -6138,19 +6751,22 @@ class $nl extends S { @override String get reconnect => "Sluit"; @override - String get reconnect_alert_text => "Weet u zeker dat u opnieuw verbinding wilt maken?"; + String get reconnect_alert_text => + "Weet u zeker dat u opnieuw verbinding wilt maken?"; @override String get send_error_minimum_value => "Minimale waarde van bedrag is 0,01"; @override String get copy_address => "Adres kopiëren"; @override - String get error_text_subaddress_name => "Naam subadres mag niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 20 tekens lang zijn"; + String get error_text_subaddress_name => + "Naam subadres mag niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 20 tekens lang zijn"; @override String get incorrect_seed => "De ingevoerde tekst is niet geldig."; @override String get settings_all => "ALLE"; @override - String get nodes_list_reset_to_default_message => "Weet u zeker dat u de standaardinstellingen wilt herstellen?"; + String get nodes_list_reset_to_default_message => + "Weet u zeker dat u de standaardinstellingen wilt herstellen?"; @override String get receive => "Krijgen"; @override @@ -6166,7 +6782,8 @@ class $nl extends S { @override String get settings_display_balance_as => "Toon saldo als"; @override - String get placeholder_transactions => "Uw transacties worden hier weergegeven"; + String get placeholder_transactions => + "Uw transacties worden hier weergegeven"; @override String get trade_details_provider => "Leverancier"; @override @@ -6188,9 +6805,13 @@ class $nl extends S { @override String get settings_title => "Instellingen"; @override + String get restore_bitcoin_description_from_seed => + "Herstel uw portemonnee met een combinatiecode van 12 woorden"; + @override String get address_book_menu => "Adresboek"; @override - String get wallet_restoration_store_incorrect_seed_length => "Onjuiste zaadlengte"; + String get wallet_restoration_store_incorrect_seed_length => + "Onjuiste zaadlengte"; @override String get seed_language_spanish => "Spaans"; @override @@ -6212,15 +6833,18 @@ class $nl extends S { @override String get please_select => "Selecteer alstublieft:"; @override - String get restore_title_from_backup => "Herstellen vanuit een back-upbestand"; + String get restore_title_from_backup => + "Herstellen vanuit een back-upbestand"; @override String get full_balance => "Volledig saldo"; @override String get sync_status_not_connected => "NIET VERBONDEN"; @override - String get error_text_crypto_currency => "Het aantal breukcijfers\nmoet kleiner zijn dan of gelijk zijn aan 12"; + String get error_text_crypto_currency => + "Het aantal breukcijfers\nmoet kleiner zijn dan of gelijk zijn aan 12"; @override - String get error_text_contact_name => "Naam contactpersoon kan niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 32 tekens lang zijn"; + String get error_text_contact_name => + "Naam contactpersoon kan niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 32 tekens lang zijn"; @override String get restore_seed_keys_restore => "Zaad / sleutels herstellen"; @override @@ -6282,7 +6906,8 @@ class $nl extends S { @override String get copy_id => "ID kopiëren"; @override - String get please_make_selection => "Maak hieronder uw keuze tot maak of herstel je portemonnee."; + String get please_make_selection => + "Maak hieronder uw keuze tot maak of herstel je portemonnee."; @override String get loading_your_wallet => "Uw portemonnee laden"; @override @@ -6292,7 +6917,8 @@ class $nl extends S { @override String get nodes => "Knooppunten"; @override - String get error_text_template => "Sjabloonnaam en -adres mogen niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 106 tekens lang zijn"; + String get error_text_template => + "Sjabloonnaam en -adres mogen niet bevatten ` , ' \" symbolen\nen moet tussen de 1 en 106 tekens lang zijn"; @override String get seed_share => "Deel zaad"; @override @@ -6318,10 +6944,16 @@ class $nl extends S { @override String get trade_state_complete => "Compleet"; @override - String get error_text_xmr => "XMR-waarde kan het beschikbare saldo niet overschrijden.\nHet aantal breukcijfers moet kleiner zijn dan of gelijk zijn aan 12"; + String get error_text_xmr => + "XMR-waarde kan het beschikbare saldo niet overschrijden.\nHet aantal breukcijfers moet kleiner zijn dan of gelijk zijn aan 12"; @override String get xmr_available_balance => "XMR Beschikbaar saldo"; @override + String get restore_bitcoin_description_from_keys => + "Herstel uw portemonnee van de gegenereerde WIF-string van uw privésleutels"; + @override + String get restore_bitcoin_title_from_keys => "Herstel van WIF"; + @override String get scan_qr_code => "Scan de QR-code om het adres te krijgen"; @override String get trade_state_paid => "Betaald"; @@ -6346,7 +6978,8 @@ class $nl extends S { @override String get wallet_name => "Portemonnee naam"; @override - String get error_text_payment_id => "Betalings-ID kan alleen 16 tot 64 tekens bevatten in hexadecimale volgorde"; + String get error_text_payment_id => + "Betalings-ID kan alleen 16 tot 64 tekens bevatten in hexadecimale volgorde"; @override String get node_reset_settings_title => "Reset instellingen"; @override @@ -6368,7 +7001,8 @@ class $nl extends S { @override String get new_wallet => "Nieuwe portemonnee"; @override - String get settings_display_on_dashboard_list => "Weergeven op dashboardlijst"; + String get settings_display_on_dashboard_list => + "Weergeven op dashboardlijst"; @override String get transaction_details_title => "Transactie details"; @override @@ -6398,7 +7032,8 @@ class $nl extends S { @override String get seed_language_dutch => "Nederlands"; @override - String get restore_description_from_seed_keys => "Ontvang uw portemonnee terug uit seed / keys die u hebt opgeslagen op een veilige plaats"; + String get restore_description_from_seed_keys => + "Ontvang uw portemonnee terug uit seed / keys die u hebt opgeslagen op een veilige plaats"; @override String get copy => "Kopiëren"; @override @@ -6414,9 +7049,11 @@ class $nl extends S { @override String get contact_name => "Contactnaam"; @override - String get exchange_result_write_down_ID => "*Kopieer of noteer uw hierboven getoonde ID."; + String get exchange_result_write_down_ID => + "*Kopieer of noteer uw hierboven getoonde ID."; @override - String get exchange_result_write_down_trade_id => "Kopieer of noteer de handels-ID om door te gaan."; + String get exchange_result_write_down_trade_id => + "Kopieer of noteer de handels-ID om door te gaan."; @override String get new_subaddress_title => "Nieuw subadres"; @override @@ -6428,7 +7065,8 @@ class $nl extends S { @override String get trade_not_created => "Handel niet gecreëerd."; @override - String get confirm_delete_wallet => "Met deze actie wordt deze portemonnee verwijderd. Wilt u doorgaan?"; + String get confirm_delete_wallet => + "Met deze actie wordt deze portemonnee verwijderd. Wilt u doorgaan?"; @override String get restore_wallet_name => "Portemonnee naam"; @override @@ -6438,7 +7076,8 @@ class $nl extends S { @override String get rename => "Hernoemen"; @override - String get confirm_delete_template => "Met deze actie wordt deze sjabloon verwijderd. Wilt u doorgaan?"; + String get confirm_delete_template => + "Met deze actie wordt deze sjabloon verwijderd. Wilt u doorgaan?"; @override String get restore_active_seed => "Actief zaad"; @override @@ -6454,13 +7093,15 @@ class $nl extends S { @override String get show_keys => "Toon sleutels"; @override - String get error_text_fiat => "Waarde van bedrag kan het beschikbare saldo niet overschrijden.\nHet aantal breukcijfers moet kleiner zijn dan of gelijk zijn aan 2"; + String get error_text_fiat => + "Waarde van bedrag kan het beschikbare saldo niet overschrijden.\nHet aantal breukcijfers moet kleiner zijn dan of gelijk zijn aan 2"; @override String get addresses => "Adressen"; @override String get transactions_by_date => "Transacties op datum"; @override - String get restore_from_seed_placeholder => "Voer hier uw codefrase in of plak deze"; + String get restore_from_seed_placeholder => + "Voer hier uw codefrase in of plak deze"; @override String get use => "Gebruik "; @override @@ -6486,9 +7127,11 @@ class $nl extends S { @override String get address_remove_contact => "Contact verwijderen"; @override - String get error_text_wallet_name => "Naam portemonnee kan alleen letters, cijfers bevatten\nen moet tussen de 1 en 15 tekens lang zijn"; + String get error_text_wallet_name => + "Naam portemonnee kan alleen letters, cijfers bevatten\nen moet tussen de 1 en 15 tekens lang zijn"; @override - String get restore_description_from_keys => "Herstel uw portemonnee van gegenereerd toetsaanslagen opgeslagen van uw privésleutels"; + String get restore_description_from_keys => + "Herstel uw portemonnee van gegenereerd toetsaanslagen opgeslagen van uw privésleutels"; @override String get seed_language_next => "Volgende"; @override @@ -6504,7 +7147,8 @@ class $nl extends S { @override String get send_title => "Stuur"; @override - String get error_text_keys => "Portefeuillesleutels kunnen maximaal 64 tekens bevatten in hexadecimale volgorde"; + String get error_text_keys => + "Portefeuillesleutels kunnen maximaal 64 tekens bevatten in hexadecimale volgorde"; @override String get settings_save_recipient_address => "Adres ontvanger opslaan"; @override @@ -6546,7 +7190,8 @@ class $nl extends S { @override String get restore_address => "Adres"; @override - String get restore_wallet_restore_description => "Portemonnee-herstelbeschrijving"; + String get restore_wallet_restore_description => + "Portemonnee-herstelbeschrijving"; @override String get today => "Vandaag"; @override @@ -6556,7 +7201,8 @@ class $nl extends S { @override String get ok => "OK"; @override - String get address_remove_content => "Weet u zeker dat u het geselecteerde contact wilt verwijderen?"; + String get address_remove_content => + "Weet u zeker dat u het geselecteerde contact wilt verwijderen?"; @override String get wallet_list_title => "Monero portemonnee"; @override @@ -6584,9 +7230,11 @@ class $nl extends S { @override String get restore_title_from_seed => "Herstel van zaad"; @override - String get restore_description_from_backup => "Je kunt de hele Cake Wallet-app herstellen van uw back-upbestand"; + String get restore_description_from_backup => + "Je kunt de hele Cake Wallet-app herstellen van uw back-upbestand"; @override - String get error_text_node_port => "Knooppuntpoort kan alleen nummers tussen 0 en 65535 bevatten"; + String get error_text_node_port => + "Knooppuntpoort kan alleen nummers tussen 0 en 65535 bevatten"; @override String get add_new_word => "Nieuw woord toevoegen"; @override @@ -6594,69 +7242,96 @@ class $nl extends S { @override String get digit_pin => "-cijferige PIN"; @override - String get first_wallet_text => "Geweldige portemonnee fvoor Monero"; + String get first_wallet_text => + "Geweldige portemonnee fvoor Monero en Bitcoin"; @override String get settings_trades => "Trades"; @override String get account => "Account"; @override - String change_language_to(String language) => "Verander de taal in ${language}?"; + String change_language_to(String language) => + "Verander de taal in ${language}?"; @override - String change_current_node(String node) => "Weet u zeker dat u het huidige knooppunt wilt wijzigen in ${node}?"; + String change_current_node(String node) => + "Weet u zeker dat u het huidige knooppunt wilt wijzigen in ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "Bezig met laden ${wallet_name} portemonnee"; + String wallet_list_loading_wallet(String wallet_name) => + "Bezig met laden ${wallet_name} portemonnee"; @override String version(String currentVersion) => "Versie ${currentVersion}"; @override String router_no_route(String name) => "Geen route gedefinieerd voor ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "Ruil voor ${provider} is niet gemaakt. Bedrag is minder dan minimaal: ${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "Ruil voor ${provider} is niet gemaakt. Bedrag is minder dan minimaal: ${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "Handel ${tradeId} van ${title} niet gevonden."; + String trade_id_not_found(String tradeId, String title) => + "Handel ${tradeId} van ${title} niet gevonden."; @override - String transaction_details_copied(String title) => "${title} gekopieerd naar het klembord"; + String transaction_details_copied(String title) => + "${title} gekopieerd naar het klembord"; @override - String trade_details_copied(String title) => "${title} gekopieerd naar het klembord"; + String trade_details_copied(String title) => + "${title} gekopieerd naar het klembord"; @override String powered_by(String title) => "Aangedreven door ${title}"; @override - String send_priority(String transactionPriority) => "Momenteel is de vergoeding vastgesteld op ${transactionPriority} prioriteit.\nTransactieprioriteit kan worden aangepast in de instellingen"; + String send_priority(String transactionPriority) => + "Momenteel is de vergoeding vastgesteld op ${transactionPriority} prioriteit.\nTransactieprioriteit kan worden aangepast in de instellingen"; @override - String trade_for_not_created(String title) => "Ruilen voor ${title} is niet gemaakt."; + String trade_for_not_created(String title) => + "Ruilen voor ${title} is niet gemaakt."; @override - String trade_is_powered_by(String provider) => "Deze transactie wordt mogelijk gemaakt door ${provider}"; + String trade_is_powered_by(String provider) => + "Deze transactie wordt mogelijk gemaakt door ${provider}"; @override String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; @override - String max_value(String value, String currency) => "Max: ${value} ${currency}"; + String max_value(String value, String currency) => + "Max: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "Ruil voor ${provider} is niet gemaakt. Bedrag is meer dan maximaal: ${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "Ruil voor ${provider} is niet gemaakt. Bedrag is meer dan maximaal: ${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency}-adres"; @override - String min_value(String value, String currency) => "Min: ${value} ${currency}"; + String min_value(String value, String currency) => + "Min: ${value} ${currency}"; @override - String failed_authentication(String state_error) => "Mislukte authenticatie. ${state_error}"; + String failed_authentication(String state_error) => + "Mislukte authenticatie. ${state_error}"; @override String Blocks_remaining(String status) => "${status} Resterende blokken"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "Door op bevestigen te drukken, wordt u verzonden ${fetchingLabel} ${from} uit je portemonnee genoemd ${walletName} naar bovenstaand adres. Of u kunt uw externe portemonnee naar bovenstaand adres / QR-code sturen.\n\nDruk op bevestigen om door te gaan of terug te gaan om de bedragen te wijzigen."; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "Door op bevestigen te drukken, wordt u verzonden ${fetchingLabel} ${from} uit je portemonnee genoemd ${walletName} naar bovenstaand adres. Of u kunt uw externe portemonnee naar bovenstaand adres / QR-code sturen.\n\nDruk op bevestigen om door te gaan of terug te gaan om de bedragen te wijzigen."; @override - String error_text_limits_loading_failed(String provider) => "Ruil voor ${provider} is niet gemaakt. Beperkingen laden mislukt"; + String error_text_limits_loading_failed(String provider) => + "Ruil voor ${provider} is niet gemaakt. Beperkingen laden mislukt"; @override - String exchange_result_description(String fetchingLabel, String from) => "Zend alstublieft ${fetchingLabel} ${from} naar bovenstaand adres."; + String exchange_result_description(String fetchingLabel, String from) => + "Zend alstublieft ${fetchingLabel} ${from} naar bovenstaand adres."; @override - String commit_transaction_amount_fee(String amount, String fee) => "Verricht transactie\nBedrag: ${amount}\nhonorarium: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "Verricht transactie\nBedrag: ${amount}\nhonorarium: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "U stuurt geld naar\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "U stuurt geld naar\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "Verwijderen mislukt ${wallet_name} portemonnee. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "Verwijderen mislukt ${wallet_name} portemonnee. ${error}"; @override - String copied_key_to_clipboard(String key) => "Gekopieerd ${key} naar het klembord"; + String copied_key_to_clipboard(String key) => + "Gekopieerd ${key} naar het klembord"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "Laden mislukt ${wallet_name} portemonnee. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "Laden mislukt ${wallet_name} portemonnee. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "Verwijderen ${wallet_name} portemonnee"; + String wallet_list_removing_wallet(String wallet_name) => + "Verwijderen ${wallet_name} portemonnee"; } class $zh extends S { @@ -6820,6 +7495,8 @@ class $zh extends S { @override String get settings_title => "设定值"; @override + String get restore_bitcoin_description_from_seed => "從12個單詞的組合碼恢復您的錢包"; + @override String get address_book_menu => "地址簿"; @override String get wallet_restoration_store_incorrect_seed_length => "种子长度错误"; @@ -6954,6 +7631,10 @@ class $zh extends S { @override String get xmr_available_balance => "XMR 可用余额 "; @override + String get restore_bitcoin_description_from_keys => "從私鑰中生成的WIF字符串還原您的錢包"; + @override + String get restore_bitcoin_title_from_keys => "從WIF還原"; + @override String get scan_qr_code => "掃描二維碼獲取地址"; @override String get trade_state_paid => "已付费"; @@ -7226,7 +7907,7 @@ class $zh extends S { @override String get digit_pin => "数字别针"; @override - String get first_wallet_text => "很棒的钱包 对于 Monero"; + String get first_wallet_text => "很棒的钱包 对于 Monero 和 Bitcoin"; @override String get settings_trades => "交易"; @override @@ -7236,15 +7917,19 @@ class $zh extends S { @override String change_current_node(String node) => "您确定将当前节点更改为 ${node}?"; @override - String wallet_list_loading_wallet(String wallet_name) => "载入中 ${wallet_name} 钱包"; + String wallet_list_loading_wallet(String wallet_name) => + "载入中 ${wallet_name} 钱包"; @override String version(String currentVersion) => "版 ${currentVersion}"; @override String router_no_route(String name) => "未定义路线 ${name}"; @override - String error_text_minimal_limit(String provider, String min, String currency) => "未創建 ${provider} 交易。 金額少於最小值:${min} ${currency}"; + String error_text_minimal_limit( + String provider, String min, String currency) => + "未創建 ${provider} 交易。 金額少於最小值:${min} ${currency}"; @override - String trade_id_not_found(String tradeId, String title) => "贸易方式 ${tradeId} 的 ${title} 未找到."; + String trade_id_not_found(String tradeId, String title) => + "贸易方式 ${tradeId} 的 ${title} 未找到."; @override String transaction_details_copied(String title) => "${title} 复制到剪贴板"; @override @@ -7252,7 +7937,8 @@ class $zh extends S { @override String powered_by(String title) => "供电 ${title}"; @override - String send_priority(String transactionPriority) => "目前,费用设置为 ${transactionPriority} 优先.\n交易优先级可以在设置中进行调整"; + String send_priority(String transactionPriority) => + "目前,费用设置为 ${transactionPriority} 优先.\n交易优先级可以在设置中进行调整"; @override String trade_for_not_created(String title) => "交易 ${title} 未创建."; @override @@ -7262,7 +7948,9 @@ class $zh extends S { @override String max_value(String value, String currency) => "最高: ${value} ${currency}"; @override - String error_text_maximum_limit(String provider, String max, String currency) => "未創建 ${provider} 交易。 金額大於最大值:${max} ${currency}"; + String error_text_maximum_limit( + String provider, String max, String currency) => + "未創建 ${provider} 交易。 金額大於最大值:${max} ${currency}"; @override String send_address(String cryptoCurrency) => "${cryptoCurrency} 地址"; @override @@ -7272,23 +7960,32 @@ class $zh extends S { @override String Blocks_remaining(String status) => "${status} 剩余的块"; @override - String exchange_result_confirm(String fetchingLabel, String from, String walletName) => "点击确认 您将发送 ${fetchingLabel} ${from} 从你的钱包里 ${walletName} 到上面显示的地址. 或者,您也可以从外部钱包发送上述地址/ QR码。\n\n请按确认继续或返回以更改金额"; + String exchange_result_confirm( + String fetchingLabel, String from, String walletName) => + "点击确认 您将发送 ${fetchingLabel} ${from} 从你的钱包里 ${walletName} 到上面显示的地址. 或者,您也可以从外部钱包发送上述地址/ QR码。\n\n请按确认继续或返回以更改金额"; @override - String error_text_limits_loading_failed(String provider) => "未創建 ${provider} 交易。 限制加載失敗"; + String error_text_limits_loading_failed(String provider) => + "未創建 ${provider} 交易。 限制加載失敗"; @override - String exchange_result_description(String fetchingLabel, String from) => "请发送 ${fetchingLabel} ${from} 到上面显示的地址."; + String exchange_result_description(String fetchingLabel, String from) => + "请发送 ${fetchingLabel} ${from} 到上面显示的地址."; @override - String commit_transaction_amount_fee(String amount, String fee) => "提交交易\n量: ${amount}\nFee: ${fee}"; + String commit_transaction_amount_fee(String amount, String fee) => + "提交交易\n量: ${amount}\nFee: ${fee}"; @override - String openalias_alert_content(String recipient_name) => "您將匯款至\n${recipient_name}"; + String openalias_alert_content(String recipient_name) => + "您將匯款至\n${recipient_name}"; @override - String wallet_list_failed_to_remove(String wallet_name, String error) => "删除失败 ${wallet_name} 钱包. ${error}"; + String wallet_list_failed_to_remove(String wallet_name, String error) => + "删除失败 ${wallet_name} 钱包. ${error}"; @override String copied_key_to_clipboard(String key) => "复制 ${key} 到剪贴板"; @override - String wallet_list_failed_to_load(String wallet_name, String error) => "加载失败 ${wallet_name} 钱包. ${error}"; + String wallet_list_failed_to_load(String wallet_name, String error) => + "加载失败 ${wallet_name} 钱包. ${error}"; @override - String wallet_list_removing_wallet(String wallet_name) => "拆下 ${wallet_name} 钱包"; + String wallet_list_removing_wallet(String wallet_name) => + "拆下 ${wallet_name} 钱包"; } class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { @@ -7311,7 +8008,8 @@ class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { ]; } - LocaleListResolutionCallback listResolution({Locale fallback, bool withCountry = true}) { + LocaleListResolutionCallback listResolution( + {Locale fallback, bool withCountry = true}) { return (List<Locale> locales, Iterable<Locale> supported) { if (locales == null || locales.isEmpty) { return fallback ?? supported.first; @@ -7321,7 +8019,8 @@ class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { }; } - LocaleResolutionCallback resolution({Locale fallback, bool withCountry = true}) { + LocaleResolutionCallback resolution( + {Locale fallback, bool withCountry = true}) { return (Locale locale, Iterable<Locale> supported) { return _resolve(locale, fallback, supported, withCountry); }; @@ -7369,7 +8068,7 @@ class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { S.current = const $zh(); return SynchronousFuture<S>(S.current); default: - // NO-OP. + // NO-OP. } } S.current = const S(); @@ -7385,7 +8084,8 @@ class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { /// /// Internal method to resolve a locale from a list of locales. /// - Locale _resolve(Locale locale, Locale fallback, Iterable<Locale> supported, bool withCountry) { + Locale _resolve(Locale locale, Locale fallback, Iterable<Locale> supported, + bool withCountry) { if (locale == null || !_isSupported(locale, withCountry)) { return fallback ?? supported.first; } @@ -7418,7 +8118,9 @@ class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { } // If no country requirement is requested, check if this locale has no country. - if (true != withCountry && (supportedLocale.countryCode == null || supportedLocale.countryCode.isEmpty)) { + if (true != withCountry && + (supportedLocale.countryCode == null || + supportedLocale.countryCode.isEmpty)) { return true; } } @@ -7428,7 +8130,7 @@ class GeneratedLocalizationsDelegate extends LocalizationsDelegate<S> { } String getLang(Locale l) => l == null - ? null - : l.countryCode != null && l.countryCode.isEmpty - ? l.languageCode - : l.toString(); + ? null + : l.countryCode != null && l.countryCode.isEmpty + ? l.languageCode + : l.toString(); diff --git a/lib/monero/monero_wallet.dart b/lib/monero/monero_wallet.dart index a98e76230..d7e8a4d26 100644 --- a/lib/monero/monero_wallet.dart +++ b/lib/monero/monero_wallet.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/src/domain/monero/monero_transaction_creation_credentials.dart'; import 'package:flutter/foundation.dart'; import 'package:mobx/mobx.dart'; import 'package:cw_monero/wallet.dart'; @@ -18,7 +19,8 @@ import 'package:cake_wallet/src/domain/monero/subaddress.dart'; import 'package:cake_wallet/src/domain/common/node.dart'; import 'package:cake_wallet/core/pending_transaction.dart'; import 'package:cake_wallet/src/domain/common/transaction_priority.dart'; -import 'package:cake_wallet/src/domain/common/calculate_fiat_amount.dart' as cfa; +import 'package:cake_wallet/src/domain/common/calculate_fiat_amount.dart' + as cfa; part 'monero_wallet.g.dart'; @@ -137,16 +139,16 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance> with Store { @override Future<PendingTransaction> createTransaction(Object credentials) async { -// final _credentials = credentials as MoneroTransactionCreationCredentials; -// final transactionDescription = await transaction_history.createTransaction( -// address: _credentials.address, -// paymentId: _credentials.paymentId, -// amount: _credentials.amount, -// priorityRaw: _credentials.priority.serialize(), -// accountIndex: _account.value.id); -// -// return PendingTransaction.fromTransactionDescription( -// transactionDescription); + final _credentials = credentials as MoneroTransactionCreationCredentials; + // final transactionDescription = await transaction_history.createTransaction( + // address: _credentials.address, + // paymentId: _credentials.paymentId, + // amount: _credentials.amount, + // priorityRaw: _credentials.priority.serialize(), + // accountIndex: _account.value.id); + + // return PendingTransaction.fromTransactionDescription( + // transactionDescription); } @override diff --git a/lib/monero/monero_wallet_service.dart b/lib/monero/monero_wallet_service.dart index 1c8d33579..c6e2d20af 100644 --- a/lib/monero/monero_wallet_service.dart +++ b/lib/monero/monero_wallet_service.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:cake_wallet/monero/monero_wallet.dart'; import 'package:cake_wallet/core/wallet_credentials.dart'; import 'package:cake_wallet/core/wallet_service.dart'; @@ -60,7 +62,7 @@ class MoneroWalletService extends WalletService< return wallet; } catch (e) { - // TODO: Implement Exception fop wallet list service. + // TODO: Implement Exception for wallet list service. print('MoneroWalletsManager Error: $e'); rethrow; } @@ -72,7 +74,7 @@ class MoneroWalletService extends WalletService< final path = await pathForWallet(name: name, type: WalletType.monero); return monero_wallet_manager.isWalletExist(path: path); } catch (e) { - // TODO: Implement Exception fop wallet list service. + // TODO: Implement Exception for wallet list service. print('MoneroWalletsManager Error: $e'); rethrow; } @@ -83,26 +85,21 @@ class MoneroWalletService extends WalletService< try { final path = await pathForWallet(name: name, type: WalletType.monero); monero_wallet_manager.openWallet(path: path, password: password); - -// final id = walletTypeToString(WalletType.monero).toLowerCase() + '_' + name; -// final walletInfo = walletInfoSource.values -// .firstWhere((info) => info.id == id, orElse: () => null); - final wallet = MoneroWallet(filename: monero_wallet.getFilename()); await wallet.init(); return wallet; } catch (e) { - // TODO: Implement Exception fop wallet list service. + // TODO: Implement Exception for wallet list service. print('MoneroWalletsManager Error: $e'); rethrow; } } - Future<void> remove(String wallet) async { - // TODO: implement remove - throw UnimplementedError(); - } + @override + Future<void> remove(String wallet) async => + File(await pathForWalletDir(name: wallet, type: WalletType.bitcoin)) + .delete(recursive: true); @override Future<MoneroWallet> restoreFromKeys( @@ -125,7 +122,7 @@ class MoneroWalletService extends WalletService< return wallet; } catch (e) { - // TODO: Implement Exception fop wallet list service. + // TODO: Implement Exception for wallet list service. print('MoneroWalletsManager Error: $e'); rethrow; } @@ -149,7 +146,7 @@ class MoneroWalletService extends WalletService< return wallet; } catch (e) { - // TODO: Implement Exception fop wallet list service. + // TODO: Implement Exception for wallet list service. print('MoneroWalletsManager Error: $e'); rethrow; } diff --git a/lib/palette.dart b/lib/palette.dart index 809c4f085..3988a53ef 100644 --- a/lib/palette.dart +++ b/lib/palette.dart @@ -90,6 +90,8 @@ class PaletteDark { static const Color distantBlue = Color.fromRGBO(72, 85, 131, 1.0); static const Color moderateVioletBlue = Color.fromRGBO(62, 73, 113, 1.0); static const Color deepVioletBlue = Color.fromRGBO(52, 66, 104, 1.0); + static const Color lightPurpleBlue = Color.fromRGBO(120, 133, 170, 1.0); + static const Color indicatorVioletBlue = Color.fromRGBO(59, 72, 119, 1.0); // FIXME: Rename. static const Color eee = Color.fromRGBO(236, 239, 245, 1.0); diff --git a/lib/reactions/bootstrap.dart b/lib/reactions/bootstrap.dart index 797f2cfb6..b371ed74e 100644 --- a/lib/reactions/bootstrap.dart +++ b/lib/reactions/bootstrap.dart @@ -24,7 +24,8 @@ import 'package:cake_wallet/store/dashboard/fiat_convertation_store.dart'; // FIXME: move me Future<void> loadCurrentWallet() async { final appStore = getIt.get<AppStore>(); - final name = getIt.get<SharedPreferences>().getString('current_wallet_name'); + final name = 'test'; + getIt.get<SharedPreferences>().getString('current_wallet_name'); final typeRaw = getIt.get<SharedPreferences>().getInt('current_wallet_type') ?? 0; final type = deserializeFromInt(typeRaw); diff --git a/lib/router.dart b/lib/router.dart index 68e010293..14f658e0c 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -2,6 +2,7 @@ import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart'; import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart'; import 'package:cake_wallet/view_model/wallet_new_vm.dart'; import 'package:cake_wallet/view_model/wallet_restoration_from_seed_vm.dart'; +import 'package:cake_wallet/view_model/wallet_restoration_from_keys_vm.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; @@ -165,6 +166,7 @@ class Router { builder: (_) => NewWalletTypePage( onTypeSelected: (context, type) => Navigator.of(context) .pushNamed(Routes.restoreWalletOptions, arguments: type), + isNewWallet: false, )); case Routes.restoreOptions: @@ -196,7 +198,7 @@ class Router { ? Routes.seedLanguage : Routes.restoreWalletFromKeys; final args = type == WalletType.monero - ? [type, Routes.restoreWalletFromSeed] + ? [type, Routes.restoreWalletFromKeys] : [type]; Navigator.of(context).pushNamed(route, arguments: args); @@ -236,17 +238,12 @@ class Router { ? args[1] as String : 'English'; // FIXME: Unnamed constant; English default and only one language for bitcoin. + final walletRestorationFromKeysVM = + getIt.get<WalletRestorationFromKeysVM>(param1: [type, language]); + return CupertinoPageRoute<void>( - builder: (_) => - ProxyProvider<AuthenticationStore, WalletRestorationStore>( - update: (_, authStore, __) => WalletRestorationStore( - authStore: authStore, - sharedPreferences: sharedPreferences, - walletListService: walletListService), - child: RestoreWalletFromKeysPage( - walletsService: walletListService, - walletService: walletService, - sharedPreferences: sharedPreferences))); + builder: (_) => RestoreWalletFromKeysPage( + walletRestorationFromKeysVM: walletRestorationFromKeysVM)); case Routes.dashboard: return CupertinoPageRoute<void>( @@ -340,11 +337,11 @@ class Router { case Routes.addressBook: return MaterialPageRoute<void>( - builder: (_) => getIt.get<ContactListPage>()); + builder: (_) => getIt.get<ContactListPage>(param1: true)); case Routes.pickerAddressBook: return MaterialPageRoute<void>( - builder: (_) => getIt.get<ContactListPage>()); + builder: (_) => getIt.get<ContactListPage>(param1: false)); case Routes.addressBookAddContact: return CupertinoPageRoute<void>( @@ -360,24 +357,6 @@ class Router { return CupertinoPageRoute<void>( builder: (_) => getIt.get<ExchangeTradePage>()); - /*MultiProvider( - providers: [ - ProxyProvider<SettingsStore, ExchangeTradeStore>( - update: (_, settingsStore, __) => ExchangeTradeStore( - trade: settings.arguments as Trade, - walletStore: walletStore, - trades: trades), - ), - ProxyProvider<SettingsStore, SendStore>( - update: (_, settingsStore, __) => SendStore( - transactionDescriptions: transactionDescriptions, - walletService: walletService, - settingsStore: settingsStore, - priceStore: priceStore)), - ], - child: ExchangeTradePage(), - ));*/ - case Routes.exchangeConfirm: return MaterialPageRoute<void>( builder: (_) => getIt.get<ExchangeConfirmPage>()); diff --git a/lib/src/domain/common/biometric_auth.dart b/lib/src/domain/common/biometric_auth.dart index 50fff4cf8..ab5d62445 100644 --- a/lib/src/domain/common/biometric_auth.dart +++ b/lib/src/domain/common/biometric_auth.dart @@ -3,22 +3,28 @@ import 'package:flutter/services.dart'; import 'package:cake_wallet/generated/i18n.dart'; class BiometricAuth { + final _localAuth = LocalAuthentication(); Future<bool> isAuthenticated() async { - final LocalAuthentication _localAuth = LocalAuthentication(); - try { return await _localAuth.authenticateWithBiometrics( localizedReason: S.current.biometric_auth_reason, useErrorDialogs: true, - stickyAuth: false - ); - } on PlatformException - catch(e) { + stickyAuth: false); + } on PlatformException catch (e) { print(e); } return false; } -} \ No newline at end of file + Future<bool> canCheckBiometrics() async { + try { + return await _localAuth.canCheckBiometrics; + } on PlatformException catch (e) { + print(e); + } + + return false; + } +} diff --git a/lib/src/domain/common/contact.dart b/lib/src/domain/common/contact.dart index faa4f8ecf..4aca925eb 100644 --- a/lib/src/domain/common/contact.dart +++ b/lib/src/domain/common/contact.dart @@ -1,11 +1,12 @@ import 'package:flutter/foundation.dart'; import 'package:hive/hive.dart'; import 'package:cake_wallet/src/domain/common/crypto_currency.dart'; +import 'package:cake_wallet/utils/mobx.dart'; part 'contact.g.dart'; @HiveType(typeId: 0) -class Contact extends HiveObject { +class Contact extends HiveObject with Keyable { Contact({@required this.name, @required this.address, CryptoCurrency type}) : raw = type?.raw; @@ -22,6 +23,9 @@ class Contact extends HiveObject { CryptoCurrency get type => CryptoCurrency.deserialize(raw: raw); + @override + dynamic get keyIndex => key; + @override bool operator ==(Object o) => o is Contact && o.key == key; diff --git a/lib/src/domain/common/contact_model.dart b/lib/src/domain/common/contact_model.dart new file mode 100644 index 000000000..94185a647 --- /dev/null +++ b/lib/src/domain/common/contact_model.dart @@ -0,0 +1,38 @@ +// import 'package:hive/hive.dart'; +// import 'package:mobx/mobx.dart'; +// import 'package:cake_wallet/src/domain/common/contact.dart'; +// import 'package:cake_wallet/src/domain/common/crypto_currency.dart'; + +// part 'contact_model.g.dart'; + +// class ContactModel = ContactModelBase with _$ContactModel; + +// abstract class ContactModelBase with Store { +// ContactModelBase(this._contacts, {Contact contact}) : _contact = contact { +// name = _contact?.name; +// address = _contact?.address; +// currency = _contact?.type; + +// _contacts.watch(key: contact.key).listen((event) { + +// }); +// } + +// @observable +// String name; + +// @observable +// String address; + +// @observable +// CryptoCurrency currency; + +// // @computed +// // bool get isReady => +// // (name?.isNotEmpty ?? false) && +// // (currency?.toString()?.isNotEmpty ?? false) && +// // (address?.isNotEmpty ?? false); + +// final Box<ContactBase> _contacts; +// final Contact _contact; +// } diff --git a/lib/src/domain/common/default_settings_migration.dart b/lib/src/domain/common/default_settings_migration.dart index 4ad41dff2..44165fdbf 100644 --- a/lib/src/domain/common/default_settings_migration.dart +++ b/lib/src/domain/common/default_settings_migration.dart @@ -107,7 +107,7 @@ Future<void> changeMoneroCurrentNodeToDefault( } Node getBitcoinDefaultElectrumServer({@required Box<Node> nodes}) { - final uri = 'bitcoin.electrumx.multicoin.co:50002'; + final uri = 'electrumx.cakewallet.com:50002'; return nodes.values .firstWhere((Node node) => node.uri == uri, orElse: () => null) ?? diff --git a/lib/src/domain/common/language.dart b/lib/src/domain/common/language.dart index 7d2860978..16e1d1a6a 100644 --- a/lib/src/domain/common/language.dart +++ b/lib/src/domain/common/language.dart @@ -30,7 +30,7 @@ class Language with ChangeNotifier { } static Future<String> localeDetection() async { - String locale = await Devicelocale.currentLocale; + var locale = await Devicelocale.currentLocale; locale = Intl.shortLocale(locale); return languages.keys.contains(locale) ? locale : 'en'; diff --git a/lib/src/domain/common/node.dart b/lib/src/domain/common/node.dart index b47f002e9..931eabf6c 100644 --- a/lib/src/domain/common/node.dart +++ b/lib/src/domain/common/node.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/utils/mobx.dart'; import 'package:flutter/foundation.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; @@ -8,7 +9,7 @@ import 'package:cake_wallet/src/domain/common/digest_request.dart'; part 'node.g.dart'; @HiveType(typeId: 1) -class Node extends HiveObject { +class Node extends HiveObject with Keyable { Node( {@required this.uri, @required WalletType type, diff --git a/lib/src/screens/auth/auth_page.dart b/lib/src/screens/auth/auth_page.dart index 346e153ed..d9c362ab4 100644 --- a/lib/src/screens/auth/auth_page.dart +++ b/lib/src/screens/auth/auth_page.dart @@ -5,19 +5,20 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/view_model/auth_state.dart'; import 'package:cake_wallet/view_model/auth_view_model.dart'; import 'package:cake_wallet/src/screens/pin_code/pin_code.dart'; -import 'package:cake_wallet/src/stores/settings/settings_store.dart'; import 'package:cake_wallet/src/domain/common/biometric_auth.dart'; typedef OnAuthenticationFinished = void Function(bool, AuthPageState); class AuthPage extends StatefulWidget { AuthPage( - {this.onAuthenticationFinished, + {@required this.allowBiometricalAuthentication, + this.onAuthenticationFinished, this.authViewModel, this.closable = true}); final AuthViewModel authViewModel; final OnAuthenticationFinished onAuthenticationFinished; + final bool allowBiometricalAuthentication; final bool closable; @override @@ -95,6 +96,27 @@ class AuthPageState extends State<AuthPage> { }); } }); + + if (widget.allowBiometricalAuthentication) { + WidgetsBinding.instance.addPostFrameCallback((_) async { + print('post'); + await Future<void>.delayed(Duration(milliseconds: 100)); + print('after timeout'); + final biometricAuth = BiometricAuth(); + final isAuth = await biometricAuth.isAuthenticated(); + + if (isAuth) { + widget.authViewModel.biometricAuth(); + _key.currentState.showSnackBar( + SnackBar( + content: Text(S.of(context).authenticated), + backgroundColor: Colors.green, + ), + ); + } + }); + } + super.initState(); } @@ -111,27 +133,7 @@ class AuthPageState extends State<AuthPage> { @override Widget build(BuildContext context) { -// final authStore = Provider.of<AuthStore>(context); -// final settingsStore = Provider.of<SettingsStore>(context); - -// if (settingsStore.allowBiometricalAuthentication) { -// WidgetsBinding.instance.addPostFrameCallback((_) { -// final biometricAuth = BiometricAuth(); -// biometricAuth.isAuthenticated().then( -// (isAuth) { -// if (isAuth) { -// authStore.biometricAuth(); -// _key.currentState.showSnackBar( -// SnackBar( -// content: Text(S.of(context).authenticated), -// backgroundColor: Colors.green, -// ), -// ); -// } -// } -// ); -// }); -// } + print('start'); return Scaffold( key: _key, diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index df93362b4..d3ae08cbe 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -88,9 +88,7 @@ class DashboardPage extends BasePage { child: PageView.builder( controller: controller, itemCount: pages.length, - itemBuilder: (context, index) { - return pages[index]; - })), + itemBuilder: (context, index) => pages[index])), Padding( padding: EdgeInsets.only(bottom: 24), child: SmoothPageIndicator( @@ -106,8 +104,9 @@ class DashboardPage extends BasePage { )), Container( width: double.infinity, - padding: EdgeInsets.only(left: 45, right: 45, bottom: 24), + padding: EdgeInsets.only(left: 44, right: 0, bottom: 24), child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ Flexible( child: ActionButton( @@ -122,14 +121,6 @@ class DashboardPage extends BasePage { image: exchangeImage, title: S.of(context).exchange, route: Routes.exchange), - ), - Flexible( - child: ActionButton( - image: receiveImage, - title: S.of(context).receive, - route: Routes.receive, - alignment: Alignment.centerRight, - ), ) ], ), diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart index 4ab08d97e..3cf1d6ded 100644 --- a/lib/src/screens/dashboard/widgets/action_button.dart +++ b/lib/src/screens/dashboard/widgets/action_button.dart @@ -1,12 +1,11 @@ import 'package:flutter/material.dart'; -class ActionButton extends StatelessWidget{ - ActionButton({ - @required this.image, - @required this.title, - @required this.route, - this.alignment = Alignment.center - }); +class ActionButton extends StatelessWidget { + ActionButton( + {@required this.image, + @required this.title, + @required this.route, + this.alignment = Alignment.center}); final Image image; final String title; @@ -35,20 +34,16 @@ class ActionButton extends StatelessWidget{ width: 60, alignment: Alignment.center, decoration: BoxDecoration( - color: Theme.of(context).buttonColor, - shape: BoxShape.circle), + color: Theme.of(context).buttonColor, shape: BoxShape.circle), child: image, ), ), Text( title, - style: TextStyle( - fontSize: 14, - color: Colors.white - ), + style: TextStyle(fontSize: 14, color: Colors.white), ) ], ), ); } -} \ No newline at end of file +} diff --git a/lib/src/screens/disclaimer/disclaimer_page.dart b/lib/src/screens/disclaimer/disclaimer_page.dart index 47cfa40ab..fde5677e7 100644 --- a/lib/src/screens/disclaimer/disclaimer_page.dart +++ b/lib/src/screens/disclaimer/disclaimer_page.dart @@ -1,4 +1,5 @@ import 'dart:ui'; +import 'package:cake_wallet/palette.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; @@ -132,6 +133,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> { _fileText, style: TextStyle( fontSize: 12.0, + fontWeight: FontWeight.normal, color: Theme.of(context).primaryTextTheme.title.color ), )) @@ -169,7 +171,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> { xmrtoUrl, textAlign: TextAlign.left, style: TextStyle( - color: Colors.blue, + color: Palette.blueCraiola, fontSize: 14.0, fontWeight: FontWeight.normal, decoration: TextDecoration.underline), @@ -190,7 +192,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> { changenowUrl, textAlign: TextAlign.left, style: TextStyle( - color: Colors.blue, + color: Palette.blueCraiola, fontSize: 14.0, fontWeight: FontWeight.normal, decoration: TextDecoration.underline), @@ -211,7 +213,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> { morphUrl, textAlign: TextAlign.left, style: TextStyle( - color: Colors.blue, + color: Palette.blueCraiola, fontSize: 14.0, fontWeight: FontWeight.normal, decoration: TextDecoration.underline), diff --git a/lib/src/screens/faq/faq_page.dart b/lib/src/screens/faq/faq_page.dart index c823dfba9..70fbaa6d2 100644 --- a/lib/src/screens/faq/faq_page.dart +++ b/lib/src/screens/faq/faq_page.dart @@ -1,4 +1,6 @@ import 'dart:convert'; +import 'package:cake_wallet/palette.dart'; +import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; @@ -27,93 +29,85 @@ class FaqFormState extends State<FaqForm> { @override Widget build(BuildContext context) { final addIcon = Icon(Icons.add, color: Theme.of(context).primaryTextTheme.title.color); - final removeIcon = Icon(Icons.remove, color: Colors.green); + final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola); return Container( - padding: EdgeInsets.only(top: 12), - child: Container( - color: Theme.of(context).accentTextTheme.headline.color, - child: FutureBuilder( - builder: (context, snapshot) { - final faqItems = jsonDecode(snapshot.data.toString()) as List; + padding: EdgeInsets.only(top: 12, left: 24), + child: FutureBuilder( + builder: (context, snapshot) { + final faqItems = jsonDecode(snapshot.data.toString()) as List; - if (snapshot.hasData) { - setIconsAndColors(context, faqItems.length, addIcon); - } + if (snapshot.hasData) { + setIconsAndColors(context, faqItems.length, addIcon); + } - return SingleChildScrollView( - child: ListView.separated( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - itemBuilder: (BuildContext context, int index) { - final itemTitle = faqItems[index]["question"].toString(); - final itemChild = faqItems[index]["answer"].toString(); + return SingleChildScrollView( + child: Column( + children: <Widget>[ + StandardListSeparator(), + ListView.separated( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (BuildContext context, int index) { + final itemTitle = faqItems[index]["question"].toString(); + final itemChild = faqItems[index]["answer"].toString(); - return ExpansionTile( - title: Padding( - padding: EdgeInsets.only(left: 8, top: 12, bottom: 12), - child: Text( - itemTitle, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: colors[index] + return ListTileTheme( + contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6), + child: ExpansionTile( + title: Text( + itemTitle, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: colors[index] + ), ), - ), - ), - trailing: Padding( - padding: EdgeInsets.only(right: 24), - child: Container( - width: double.minPositive, - child: Center( - child: icons[index] - ), - ), - ), - backgroundColor: Theme.of(context).accentTextTheme.headline.backgroundColor, - onExpansionChanged: (value) { - setState(() { - if (value) { - icons[index] = removeIcon; - colors[index] = Colors.green; - } else { - icons[index] = addIcon; - colors[index] = Theme.of(context).primaryTextTheme.title.color; - } - }); - }, - children: <Widget>[ - Row( - mainAxisAlignment: MainAxisAlignment.start, + trailing: icons[index], + onExpansionChanged: (value) { + setState(() { + if (value) { + icons[index] = removeIcon; + colors[index] = Palette.blueCraiola; + } else { + icons[index] = addIcon; + colors[index] = Theme.of(context).primaryTextTheme.title.color; + } + }); + }, children: <Widget>[ - Expanded( - child: Container( - padding: EdgeInsets.only( - left: 24.0, - right: 24.0, - bottom: 8 - ), - child: Text( - itemChild, - style: TextStyle( - fontSize: 12, - color: Theme.of(context).primaryTextTheme.title.color - ), - ), - )) + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: <Widget>[ + Expanded( + child: Container( + padding: EdgeInsets.only( + right: 24.0, + ), + child: Text( + itemChild, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.normal, + color: Theme.of(context).primaryTextTheme.title.color + ), + ), + )) + ], + ) ], - ) - ], - ); - }, - separatorBuilder: (_, __) => - Container(color: Theme.of(context).dividerColor, height: 1.0), - itemCount: faqItems == null ? 0 : faqItems.length, - ), - ); - }, - future: rootBundle.loadString(getFaqPath(context)), - ), + ), + ); + }, + separatorBuilder: (_, __) => + StandardListSeparator(), + itemCount: faqItems == null ? 0 : faqItems.length, + ) + ], + ), + ); + }, + future: rootBundle.loadString(getFaqPath(context)), ), ); } diff --git a/lib/src/screens/new_wallet/new_wallet_page.dart b/lib/src/screens/new_wallet/new_wallet_page.dart index 1eaf95b46..60d780d2d 100644 --- a/lib/src/screens/new_wallet/new_wallet_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_page.dart @@ -1,3 +1,5 @@ +import 'package:cake_wallet/di.dart'; +import 'package:cake_wallet/store/settings_store.dart'; import 'package:mobx/mobx.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter/material.dart'; @@ -40,6 +42,7 @@ class _WalletNameFormState extends State<WalletNameForm> { static const aspectRatioImage = 1.22; final walletNameImage = Image.asset('assets/images/wallet_name.png'); + final walletNameLightImage = Image.asset('assets/images/wallet_name_light.png'); final _formKey = GlobalKey<FormState>(); final _languageSelectorKey = GlobalKey<SeedLanguageSelectorState>(); ReactionDisposer _stateReaction; @@ -72,6 +75,9 @@ class _WalletNameFormState extends State<WalletNameForm> { @override Widget build(BuildContext context) { + final walletImage = getIt.get<SettingsStore>().isDarkTheme + ? walletNameImage : walletNameLightImage; + return Container( padding: EdgeInsets.only(top: 24), child: ScrollableWithBottomSection( @@ -82,7 +88,7 @@ class _WalletNameFormState extends State<WalletNameForm> { padding: EdgeInsets.only(left: 12, right: 12), child: AspectRatio( aspectRatio: aspectRatioImage, - child: FittedBox(child: walletNameImage, fit: BoxFit.fill)), + child: FittedBox(child: walletImage, fit: BoxFit.fill)), ), Padding( padding: EdgeInsets.only(top: 24), @@ -98,19 +104,26 @@ class _WalletNameFormState extends State<WalletNameForm> { Theme.of(context).primaryTextTheme.title.color), decoration: InputDecoration( hintStyle: TextStyle( - fontSize: 16.0, + fontSize: 18.0, + fontWeight: FontWeight.w500, color: Theme.of(context) - .primaryTextTheme - .caption + .accentTextTheme + .display3 .color), hintText: S.of(context).wallet_name, focusedBorder: UnderlineInputBorder( borderSide: BorderSide( - color: Theme.of(context).dividerColor, + color: Theme.of(context) + .accentTextTheme + .display3 + .decorationColor, width: 1.0)), enabledBorder: UnderlineInputBorder( borderSide: BorderSide( - color: Theme.of(context).dividerColor, + color: Theme.of(context) + .accentTextTheme + .display3 + .decorationColor, width: 1.0))), validator: WalletNameValidator())), ), @@ -122,7 +135,7 @@ class _WalletNameFormState extends State<WalletNameForm> { textAlign: TextAlign.center, style: TextStyle( fontSize: 16.0, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color), ), ), @@ -140,7 +153,8 @@ class _WalletNameFormState extends State<WalletNameForm> { builder: (context) { return LoadingPrimaryButton( onPressed: _confirmForm, - text: S.of(context).continue_text, + //text: S.of(context).continue_text, + text: S.of(context).seed_language_next, color: Colors.green, textColor: Colors.white, isLoading: _walletNewVM.state is WalletCreatedSuccessfully, diff --git a/lib/src/screens/new_wallet/new_wallet_type_page.dart b/lib/src/screens/new_wallet/new_wallet_type_page.dart index 9dfcfbf33..673bd9478 100644 --- a/lib/src/screens/new_wallet/new_wallet_type_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_type_page.dart @@ -1,4 +1,6 @@ +import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/src/domain/common/wallet_type.dart'; +import 'package:cake_wallet/store/settings_store.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:cake_wallet/generated/i18n.dart'; @@ -6,15 +8,17 @@ import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart'; -import 'package:cake_wallet/routes.dart'; class NewWalletTypePage extends BasePage { - NewWalletTypePage({this.onTypeSelected}); + NewWalletTypePage({this.onTypeSelected, this.isNewWallet = true}); final void Function(BuildContext, WalletType) onTypeSelected; + final bool isNewWallet; @override - String get title => S.current.new_wallet; + String get title => isNewWallet + ? S.current.new_wallet + : S.current.wallet_list_restore_wallet; @override Widget body(BuildContext context) => @@ -38,6 +42,7 @@ class WalletTypeFormState extends State<WalletTypeForm> { final bitcoinIcon = Image.asset('assets/images/bitcoin.png', height: 24, width: 24); final walletTypeImage = Image.asset('assets/images/wallet_type.png'); + final walletTypeLightImage = Image.asset('assets/images/wallet_type_light.png'); WalletType selected; List<WalletType> types; @@ -50,6 +55,9 @@ class WalletTypeFormState extends State<WalletTypeForm> { @override Widget build(BuildContext context) { + final walletImage = getIt.get<SettingsStore>().isDarkTheme + ? walletTypeImage : walletTypeLightImage; + return Container( padding: EdgeInsets.only(top: 24), child: ScrollableWithBottomSection( @@ -61,7 +69,7 @@ class WalletTypeFormState extends State<WalletTypeForm> { padding: EdgeInsets.only(left: 12, right: 12), child: AspectRatio( aspectRatio: aspectRatioImage, - child: FittedBox(child: walletTypeImage, fit: BoxFit.fill)), + child: FittedBox(child: walletImage, fit: BoxFit.fill)), ), Padding( padding: EdgeInsets.only(top: 48), @@ -70,7 +78,7 @@ class WalletTypeFormState extends State<WalletTypeForm> { textAlign: TextAlign.center, style: TextStyle( fontSize: 16, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color), ), ), @@ -79,8 +87,7 @@ class WalletTypeFormState extends State<WalletTypeForm> { child: SelectButton( image: _iconFor(type), text: walletTypeToString(type), - color: _backgroundColorFor(selected == type), - textColor: _textColorFor(selected == type), + isSelected: selected == type, onTap: () => setState(() => selected = type)), )) ], @@ -97,16 +104,6 @@ class WalletTypeFormState extends State<WalletTypeForm> { ); } - // FIXME: Move color selection inside ui element; add isSelected to buttons. - - Color _backgroundColorFor(bool isSelected) => isSelected - ? Theme.of(context).accentTextTheme.title.decorationColor - : Theme.of(context).accentTextTheme.title.backgroundColor; - - Color _textColorFor(bool isSelected) => isSelected - ? Theme.of(context).primaryTextTheme.title.backgroundColor - : Theme.of(context).primaryTextTheme.title.color; - Image _iconFor(WalletType type) { switch (type) { case WalletType.monero: diff --git a/lib/src/screens/new_wallet/widgets/select_button.dart b/lib/src/screens/new_wallet/widgets/select_button.dart index 7e583ec4e..bd69a8015 100644 --- a/lib/src/screens/new_wallet/widgets/select_button.dart +++ b/lib/src/screens/new_wallet/widgets/select_button.dart @@ -4,21 +4,30 @@ class SelectButton extends StatelessWidget { SelectButton({ @required this.image, @required this.text, - @required this.color, - @required this.textColor, @required this.onTap, + this.isSelected = false, }); final Image image; final String text; - final Color color; - final Color textColor; + final bool isSelected; final VoidCallback onTap; - final selectArrowImage = Image.asset('assets/images/select_arrow.png'); - @override Widget build(BuildContext context) { + final color = isSelected + ? Theme.of(context).accentTextTheme.subtitle.decorationColor + : Theme.of(context).accentTextTheme.caption.color; + final textColor = isSelected + ? Theme.of(context).accentTextTheme.headline.decorationColor + : Theme.of(context).primaryTextTheme.title.color; + final arrowColor = isSelected + ? Theme.of(context).accentTextTheme.headline.decorationColor + : Theme.of(context).accentTextTheme.subhead.color; + + final selectArrowImage = Image.asset('assets/images/select_arrow.png', + color: arrowColor); + return GestureDetector( onTap: onTap, child: Container( @@ -39,9 +48,7 @@ class SelectButton extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ - image != null - ? image - : Offstage(), + image ?? Offstage(), Padding( padding: image != null ? EdgeInsets.only(left: 15) @@ -50,7 +57,7 @@ class SelectButton extends StatelessWidget { text, style: TextStyle( fontSize: 18, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w500, color: textColor ), ), diff --git a/lib/src/screens/nodes/nodes_list_page.dart b/lib/src/screens/nodes/nodes_list_page.dart index ab715058c..b5a6dfba1 100644 --- a/lib/src/screens/nodes/nodes_list_page.dart +++ b/lib/src/screens/nodes/nodes_list_page.dart @@ -108,7 +108,7 @@ class NodeListPage extends BasePage { }); final dismissibleRow = Dismissible( - key: Key('${node.value.key}'), + key: Key('${node.keyIndex}'), confirmDismiss: (direction) async { return await showDialog( context: context, diff --git a/lib/src/screens/pin_code/pin_code.dart b/lib/src/screens/pin_code/pin_code.dart index b046b3fef..392705b52 100644 --- a/lib/src/screens/pin_code/pin_code.dart +++ b/lib/src/screens/pin_code/pin_code.dart @@ -108,7 +108,7 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> { Text(title, style: TextStyle( fontSize: 20, - fontWeight: FontWeight.bold, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color)), Spacer(flex: 3), Container( @@ -126,7 +126,11 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> { shape: BoxShape.circle, color: isFilled ? Theme.of(context).primaryTextTheme.title.color - : Theme.of(context).primaryTextTheme.caption.color, + : Theme.of(context) + .accentTextTheme + .body1 + .color + .withOpacity(0.25), )); }), ), @@ -143,7 +147,11 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> { _changePinLengthText(), style: TextStyle( fontSize: 14.0, - color: Theme.of(context).primaryTextTheme.caption.color), + fontWeight: FontWeight.normal, + color: Theme.of(context) + .accentTextTheme + .body1 + .decorationColor), )) ], Spacer(flex: 1), @@ -227,7 +235,7 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> { child: Text('$index', style: TextStyle( fontSize: 30.0, - fontWeight: FontWeight.bold, + fontWeight: FontWeight.w600, color: Theme.of(context) .primaryTextTheme .title diff --git a/lib/src/screens/restore/restore_wallet_from_keys_page.dart b/lib/src/screens/restore/restore_wallet_from_keys_page.dart index 766ef7a0e..6f950f6e4 100644 --- a/lib/src/screens/restore/restore_wallet_from_keys_page.dart +++ b/lib/src/screens/restore/restore_wallet_from_keys_page.dart @@ -1,40 +1,36 @@ -import 'package:mobx/mobx.dart'; -import 'package:provider/provider.dart'; -import 'package:shared_preferences/shared_preferences.dart'; +import 'package:cake_wallet/core/validator.dart'; +import 'package:cake_wallet/palette.dart'; import 'package:flutter/services.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/domain/services/wallet_list_service.dart'; -import 'package:cake_wallet/src/domain/services/wallet_service.dart'; -import 'package:cake_wallet/src/stores/wallet_restoration/wallet_restoration_store.dart'; -import 'package:cake_wallet/src/stores/wallet_restoration/wallet_restoration_state.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; -import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; +import 'package:cake_wallet/view_model/wallet_restoration_from_keys_vm.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; class RestoreWalletFromKeysPage extends BasePage { RestoreWalletFromKeysPage( - {@required this.walletsService, - @required this.sharedPreferences, - @required this.walletService}); + {@required this.walletRestorationFromKeysVM}); - final WalletListService walletsService; - final WalletService walletService; - final SharedPreferences sharedPreferences; + final WalletRestorationFromKeysVM walletRestorationFromKeysVM; @override String get title => S.current.restore_title_from_keys; @override - Widget body(BuildContext context) => RestoreFromKeysFrom(); + Widget body(BuildContext context) => RestoreFromKeysFrom(walletRestorationFromKeysVM); } class RestoreFromKeysFrom extends StatefulWidget { + RestoreFromKeysFrom(this.walletRestorationFromKeysVM); + + final WalletRestorationFromKeysVM walletRestorationFromKeysVM; + @override _RestoreFromKeysFromState createState() => _RestoreFromKeysFromState(); } @@ -46,6 +42,23 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { final _addressController = TextEditingController(); final _viewKeyController = TextEditingController(); final _spendKeyController = TextEditingController(); + final _wifController = TextEditingController(); + + @override + void initState() { + _nameController.addListener(() => + widget.walletRestorationFromKeysVM.name = _nameController.text); + _addressController.addListener(() => + widget.walletRestorationFromKeysVM.address = _addressController.text); + _viewKeyController.addListener(() => + widget.walletRestorationFromKeysVM.viewKey = _viewKeyController.text); + _spendKeyController.addListener(() => + widget.walletRestorationFromKeysVM.spendKey = _spendKeyController.text); + _wifController.addListener(() => + widget.walletRestorationFromKeysVM.wif = _wifController.text); + + super.initState(); + } @override void dispose() { @@ -53,31 +66,14 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { _addressController.dispose(); _viewKeyController.dispose(); _spendKeyController.dispose(); + _wifController.dispose(); super.dispose(); } - void onHandleControllers(WalletRestorationStore walletRestorationStore) { - if (_nameController.text.isNotEmpty && - _addressController.text.isNotEmpty && - _viewKeyController.text.isNotEmpty && - _spendKeyController.text.isNotEmpty) { - walletRestorationStore.setDisabledState(false); - } else { - walletRestorationStore.setDisabledState(true); - } - } - @override Widget build(BuildContext context) { - final walletRestorationStore = Provider.of<WalletRestorationStore>(context); - final seedLanguageStore = Provider.of<SeedLanguageStore>(context); - _nameController.addListener(() {onHandleControllers(walletRestorationStore);}); - _addressController.addListener(() {onHandleControllers(walletRestorationStore);}); - _viewKeyController.addListener(() {onHandleControllers(walletRestorationStore);}); - _spendKeyController.addListener(() {onHandleControllers(walletRestorationStore);}); - - reaction((_) => walletRestorationStore.state, (WalletRestorationState state) { + /*reaction((_) => walletRestorationStore.state, (WalletRestorationState state) { if (state is WalletRestoredSuccessfully) { Navigator.of(context).popUntil((route) => route.isFirst); } @@ -96,7 +92,7 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { }); }); } - }); + });*/ return Container( padding: EdgeInsets.only(left: 24, right: 24), @@ -110,66 +106,39 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { Flexible( child: Container( padding: EdgeInsets.only(top: 20.0), - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color - ), + child: BaseTextFormField( controller: _nameController, - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context).primaryTextTheme.caption.color, - fontSize: 16 - ), - hintText: S.of(context).restore_wallet_name, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), - validator: (value) { - walletRestorationStore.validateWalletName(value); - return walletRestorationStore.errorMessage; - }, - ), + hintText: S.of(context).restore_wallet_name, + validator: WalletNameValidator(), + ) )) ], ), + if (!widget.walletRestorationFromKeysVM.hasRestorationHeight) + Row( + children: <Widget>[ + Flexible( + child: Container( + padding: EdgeInsets.only(top: 20.0), + child: BaseTextFormField( + controller: _wifController, + hintText: 'WIF', + ) + )) + ], + ), + if (widget.walletRestorationFromKeysVM.hasRestorationHeight) ... [ Row( children: <Widget>[ Flexible( child: Container( padding: EdgeInsets.only(top: 20.0), - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color - ), + child: BaseTextFormField( controller: _addressController, keyboardType: TextInputType.multiline, maxLines: null, - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context).primaryTextTheme.caption.color, - fontSize: 16 - ), - hintText: S.of(context).restore_address, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), - validator: (value) { - walletRestorationStore.validateAddress(value); - return walletRestorationStore.errorMessage; - }, - ), + hintText: S.of(context).restore_address, + ) )) ], ), @@ -178,31 +147,10 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { Flexible( child: Container( padding: EdgeInsets.only(top: 20.0), - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color - ), + child: BaseTextFormField( controller: _viewKeyController, - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context).primaryTextTheme.caption.color, - fontSize: 16 - ), - hintText: S.of(context).restore_view_key_private, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), - validator: (value) { - walletRestorationStore.validateKeys(value); - return walletRestorationStore.errorMessage; - }, - ), + hintText: S.of(context).restore_view_key_private, + ) )) ], ), @@ -211,35 +159,19 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { Flexible( child: Container( padding: EdgeInsets.only(top: 20.0), - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color - ), + child: BaseTextFormField( controller: _spendKeyController, - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context).primaryTextTheme.caption.color, - fontSize: 16 - ), - hintText: S.of(context).restore_spend_key_private, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), - validator: (value) { - walletRestorationStore.validateKeys(value); - return walletRestorationStore.errorMessage; - }, - ), + hintText: S.of(context).restore_spend_key_private, + ) )) ], ), - BlockchainHeightWidget(key: _blockchainHeightKey), + BlockchainHeightWidget( + key: _blockchainHeightKey, + onHeightChange: (height) { + widget.walletRestorationFromKeysVM.height = height; + print(height); + })], ]), ), bottomSectionPadding: EdgeInsets.only(bottom: 24), @@ -247,19 +179,19 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> { return LoadingPrimaryButton( onPressed: () { if (_formKey.currentState.validate()) { - walletRestorationStore.restoreFromKeys( + /*walletRestorationStore.restoreFromKeys( name: _nameController.text, language: seedLanguageStore.selectedSeedLanguage, address: _addressController.text, viewKey: _viewKeyController.text, spendKey: _spendKeyController.text, - restoreHeight: _blockchainHeightKey.currentState.height); + restoreHeight: _blockchainHeightKey.currentState.height);*/ } }, text: S.of(context).restore_recover, - color: Colors.green, + color: Palette.blueCraiola, textColor: Colors.white, - isDisabled: walletRestorationStore.disabledState, + //isDisabled: walletRestorationStore.disabledState, ); }), ), diff --git a/lib/src/screens/restore/restore_wallet_from_seed_details.dart b/lib/src/screens/restore/restore_wallet_from_seed_details.dart index 5a83a8b3c..3225be9e7 100644 --- a/lib/src/screens/restore/restore_wallet_from_seed_details.dart +++ b/lib/src/screens/restore/restore_wallet_from_seed_details.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/palette.dart'; import 'package:mobx/mobx.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -9,6 +10,7 @@ import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; import 'package:cake_wallet/view_model/wallet_restoration_from_seed_vm.dart'; class RestoreWalletFromSeedDetailsPage extends BasePage { @@ -91,27 +93,9 @@ class _RestoreFromSeedDetailsFormState Flexible( child: Container( padding: EdgeInsets.only(top: 20.0), - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color), + child: BaseTextFormField( controller: _nameController, - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context) - .primaryTextTheme - .caption - .color, - fontSize: 16), - hintText: S.of(context).restore_wallet_name, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), + hintText: S.of(context).restore_wallet_name, validator: WalletNameValidator(), ), )) @@ -137,7 +121,7 @@ class _RestoreFromSeedDetailsFormState isLoading: widget.walletRestorationFromSeedVM.state is WalletCreating, text: S.of(context).restore_recover, - color: Colors.green, + color: Palette.blueCraiola, textColor: Colors.white, isDisabled: _nameController.text.isNotEmpty, ); diff --git a/lib/src/screens/restore/restore_wallet_from_seed_page.dart b/lib/src/screens/restore/restore_wallet_from_seed_page.dart index 5c46b32ef..bc30a48d8 100644 --- a/lib/src/screens/restore/restore_wallet_from_seed_page.dart +++ b/lib/src/screens/restore/restore_wallet_from_seed_page.dart @@ -20,20 +20,40 @@ class RestoreWalletFromSeedPage extends BasePage { String get title => S.current.restore_title_from_seed; @override - Color get backgroundLightColor => Palette.lavender; + Color get titleColor => Colors.white; @override - Color get backgroundDarkColor => PaletteDark.lightNightBlue; + Color get backgroundLightColor => Colors.transparent; + + @override + Color get backgroundDarkColor => Colors.transparent; + + @override + bool get resizeToAvoidBottomPadding => false; @override Widget body(BuildContext context) => - RestoreFromSeedForm(key: formKey, type: type, language: language); + RestoreFromSeedForm(key: formKey, type: type, language: language, + leading: leading(context), middle: middle(context)); + + @override + Widget build(BuildContext context) { + return Scaffold( + resizeToAvoidBottomPadding: resizeToAvoidBottomPadding, + body: Container( + color: Theme.of(context).backgroundColor, + child: body(context) + ) + ); + } } class RestoreFromSeedForm extends StatefulWidget { - RestoreFromSeedForm({Key key, this.type, this.language}) : super(key: key); + RestoreFromSeedForm({Key key, this.type, this.language, this.leading, this.middle}) : super(key: key); final WalletType type; final String language; + final Widget leading; + final Widget middle; @override _RestoreFromSeedFormState createState() => _RestoreFromSeedFormState(); @@ -49,18 +69,17 @@ class _RestoreFromSeedFormState extends State<RestoreFromSeedForm> { return GestureDetector( onTap: () => SystemChannels.textInput.invokeMethod<void>('TextInput.hide'), - child: Container( - color: Theme.of(context).backgroundColor, - child: SeedWidget( - key: _seedKey, - maxLength: mnemonicLength(widget.type), - onMnemonicChange: (seed) => null, - onFinish: () => Navigator.of(context).pushNamed( - Routes.restoreWalletFromSeedDetails, - arguments: [widget.type, widget.language, mnemonic()]), - validator: - SeedValidator(type: widget.type, language: widget.language), - ), + child: SeedWidget( + key: _seedKey, + maxLength: mnemonicLength(widget.type), + onMnemonicChange: (seed) => null, + onFinish: () => Navigator.of(context).pushNamed( + Routes.restoreWalletFromSeedDetails, + arguments: [widget.type, widget.language, mnemonic()]), + leading: widget.leading, + middle: widget.middle, + validator: + SeedValidator(type: widget.type, language: widget.language), ), ); } diff --git a/lib/src/screens/restore/restore_wallet_options_page.dart b/lib/src/screens/restore/restore_wallet_options_page.dart index bb805e7c0..750a9c7e0 100644 --- a/lib/src/screens/restore/restore_wallet_options_page.dart +++ b/lib/src/screens/restore/restore_wallet_options_page.dart @@ -1,11 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/restore/widgets/restore_button.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/domain/common/wallet_type.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart'; class RestoreWalletOptionsPage extends BasePage { RestoreWalletOptionsPage( @@ -18,7 +15,7 @@ class RestoreWalletOptionsPage extends BasePage { final Function(BuildContext context) onRestoreFromKeys; @override - String get title => S.current.restore_seed_keys_restore; + String get title => S.current.restore_restore_wallet; final imageSeed = Image.asset('assets/images/restore_seed.png'); final imageKeys = Image.asset('assets/images/restore_keys.png'); @@ -56,7 +53,7 @@ class RestoreWalletOptionsPage extends BasePage { return S.of(context).restore_description_from_seed; case WalletType.bitcoin: // TODO: Add transaction for bitcoin description. - return 'Restore your wallet from 12 word combination code'; + return S.of(context).restore_bitcoin_description_from_seed; default: return ''; } @@ -68,7 +65,7 @@ class RestoreWalletOptionsPage extends BasePage { return S.of(context).restore_description_from_keys; case WalletType.bitcoin: // TODO: Add transaction for bitcoin description. - return 'Restore your wallet from generated WIF string from your private keys'; + return S.of(context).restore_bitcoin_description_from_keys; default: return ''; } @@ -80,7 +77,7 @@ class RestoreWalletOptionsPage extends BasePage { return S.of(context).restore_title_from_keys; case WalletType.bitcoin: // TODO: Add transaction for bitcoin description. - return 'Restore from WIF'; + return S.of(context).restore_bitcoin_title_from_keys; default: return ''; } diff --git a/lib/src/screens/restore/widgets/restore_button.dart b/lib/src/screens/restore/widgets/restore_button.dart index ba07d1fe8..8945d51c4 100644 --- a/lib/src/screens/restore/widgets/restore_button.dart +++ b/lib/src/screens/restore/widgets/restore_button.dart @@ -19,12 +19,12 @@ class RestoreButton extends StatelessWidget { onTap: onPressed, child: Container( width: double.infinity, - height: 150, + height: 170, padding: EdgeInsets.all(24), alignment: Alignment.topLeft, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(12)), - color: Theme.of(context).accentTextTheme.title.backgroundColor, + color: Theme.of(context).accentTextTheme.caption.color, ), child: Row( mainAxisSize: MainAxisSize.max, @@ -44,7 +44,7 @@ class RestoreButton extends StatelessWidget { title, style: TextStyle( fontSize: 16, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color ), ), @@ -54,7 +54,8 @@ class RestoreButton extends StatelessWidget { description, style: TextStyle( fontSize: 14, - color: Theme.of(context).primaryTextTheme.caption.color + fontWeight: FontWeight.normal, + color: Theme.of(context).primaryTextTheme.overline.color ), ), ) diff --git a/lib/src/screens/seed_language/seed_language_page.dart b/lib/src/screens/seed_language/seed_language_page.dart index 48b2fd5b6..ccee8aae5 100644 --- a/lib/src/screens/seed_language/seed_language_page.dart +++ b/lib/src/screens/seed_language/seed_language_page.dart @@ -1,5 +1,6 @@ +import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/src/widgets/seed_language_selector.dart'; -import 'package:provider/provider.dart'; +import 'package:cake_wallet/store/settings_store.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; @@ -7,8 +8,6 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; -import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart'; -import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart'; import 'package:cake_wallet/src/screens/seed_language/widgets/seed_language_picker.dart'; class SeedLanguage extends BasePage { @@ -16,6 +15,9 @@ class SeedLanguage extends BasePage { final Function(BuildContext, String) onConfirm; + @override + String get title => S.current.wallet_list_restore_wallet; + @override Widget body(BuildContext context) => SeedLanguageForm(onConfirm: onConfirm); } @@ -33,10 +35,14 @@ class SeedLanguageFormState extends State<SeedLanguageForm> { static const aspectRatioImage = 1.22; final walletNameImage = Image.asset('assets/images/wallet_name.png'); + final walletNameLightImage = Image.asset('assets/images/wallet_name_light.png'); final _languageSelectorKey = GlobalKey<SeedLanguageSelectorState>(); @override Widget build(BuildContext context) { + final walletImage = getIt.get<SettingsStore>().isDarkTheme + ? walletNameImage : walletNameLightImage; + return Container( padding: EdgeInsets.only(top: 24), child: ScrollableWithBottomSection( @@ -47,7 +53,7 @@ class SeedLanguageFormState extends State<SeedLanguageForm> { padding: EdgeInsets.only(left: 12, right: 12), child: AspectRatio( aspectRatio: aspectRatioImage, - child: FittedBox(child: walletNameImage, fit: BoxFit.fill)), + child: FittedBox(child: walletImage, fit: BoxFit.fill)), ), Padding( padding: EdgeInsets.only(top: 40), @@ -56,7 +62,7 @@ class SeedLanguageFormState extends State<SeedLanguageForm> { textAlign: TextAlign.center, style: TextStyle( fontSize: 16.0, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color), ), ), diff --git a/lib/src/screens/seed_language/widgets/seed_language_picker.dart b/lib/src/screens/seed_language/widgets/seed_language_picker.dart index cc476b294..47e43c7c7 100644 --- a/lib/src/screens/seed_language/widgets/seed_language_picker.dart +++ b/lib/src/screens/seed_language/widgets/seed_language_picker.dart @@ -1,9 +1,9 @@ import 'dart:ui'; +import 'package:cake_wallet/src/widgets/alert_background.dart'; +import 'package:cake_wallet/src/widgets/alert_close_button.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/palette.dart'; -import 'package:provider/provider.dart'; -import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart'; import 'package:cake_wallet/generated/i18n.dart'; List<Image> flagImages = [ @@ -57,170 +57,111 @@ class SeedLanguagePicker extends StatefulWidget { class SeedLanguagePickerState extends State<SeedLanguagePicker> { SeedLanguagePickerState({this.selected}); + final closeButton = Image.asset('assets/images/close.png'); String selected; @override Widget build(BuildContext context) { - return GestureDetector( - onTap: () => Navigator.of(context).pop(), - child: Container( - color: Colors.transparent, - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0), - child: Container( - decoration: BoxDecoration( - color: PaletteDark.darkNightBlue.withOpacity(0.75)), - child: Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: <Widget>[ - Container( - padding: EdgeInsets.only(left: 24, right: 24), - child: Text( - S.of(context).seed_choose, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - decoration: TextDecoration.none, - color: Colors.white), + return AlertBackground( + child: Stack( + alignment: Alignment.center, + children: <Widget>[ + Column( + mainAxisSize: MainAxisSize.min, + children: <Widget>[ + Container( + padding: EdgeInsets.only(left: 24, right: 24), + child: Text( + S.of(context).seed_choose, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + fontFamily: 'Poppins', + decoration: TextDecoration.none, + color: Colors.white ), ), - Padding( - padding: EdgeInsets.only(top: 24), - child: GestureDetector( - onTap: () => null, - child: Container( - height: 300, - width: 300, - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(14)), - color: Theme.of(context).dividerColor), - child: GridView.count( - shrinkWrap: true, - crossAxisCount: 3, - childAspectRatio: 1, - physics: const NeverScrollableScrollPhysics(), - crossAxisSpacing: 1, - mainAxisSpacing: 1, - children: List.generate(9, (index) { - if (index == 8) { - return gridTile( - isCurrent: false, - place: Places.bottomRight, - image: null, - text: '', - onTap: null); - } else { - final code = languageCodes[index]; - final flag = flagImages[index]; - final isCurrent = - index == seedLanguages.indexOf(selected); + ), + Padding( + padding: EdgeInsets.only(top: 24), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(14)), + child: Container( + height: 300, + width: 300, + color: Theme.of(context).accentTextTheme.title.backgroundColor, + child: GridView.count( + shrinkWrap: true, + crossAxisCount: 3, + childAspectRatio: 1, + physics: const NeverScrollableScrollPhysics(), + crossAxisSpacing: 1, + mainAxisSpacing: 1, + children: List.generate(9, (index) { - if (index == 0) { - return gridTile( - isCurrent: isCurrent, - place: Places.topLeft, - image: flag, - text: code, - onTap: () { - selected = seedLanguages[index]; - Navigator.of(context).pop(selected); - }); + if (index == 8) { + + return gridTile( + isCurrent: false, + image: null, + text: '', + onTap: null); + + } + + final code = languageCodes[index]; + final flag = flagImages[index]; + final isCurrent = + index == seedLanguages.indexOf(selected); + + return gridTile( + isCurrent: isCurrent, + image: flag, + text: code, + onTap: () { + selected = seedLanguages[index]; + Navigator.of(context).pop(selected); } - - if (index == 2) { - return gridTile( - isCurrent: isCurrent, - place: Places.topRight, - image: flag, - text: code, - onTap: () { - selected = seedLanguages[index]; - Navigator.of(context).pop(selected); - }); - } - - if (index == 6) { - return gridTile( - isCurrent: isCurrent, - place: Places.bottomLeft, - image: flag, - text: code, - onTap: () { - selected = seedLanguages[index]; - Navigator.of(context).pop(selected); - }); - } - - return gridTile( - isCurrent: isCurrent, - place: Places.inside, - image: flag, - text: code, - onTap: () { - selected = seedLanguages[index]; - Navigator.of(context).pop(selected); - }); - } - }), - ), + ); + }), ), ), - ) - ], - ), + ), + ) + ], ), - ), - ), - ), + AlertCloseButton(image: closeButton) + ], + ) ); } - Widget gridTile( - {@required bool isCurrent, - @required Places place, - @required Image image, - @required String text, - @required VoidCallback onTap}) { - BorderRadius borderRadius; - final color = isCurrent - ? Theme.of(context).accentTextTheme.subtitle.decorationColor - : Theme.of(context).primaryTextTheme.display1.color; - final textColor = isCurrent - ? Colors.blue - : Theme.of(context).primaryTextTheme.title.color; + Widget gridTile({ + @required bool isCurrent, + @required Image image, + @required String text, + @required VoidCallback onTap}) { - switch (place) { - case Places.topLeft: - borderRadius = BorderRadius.only(topLeft: Radius.circular(14)); - break; - case Places.topRight: - borderRadius = BorderRadius.only(topRight: Radius.circular(14)); - break; - case Places.bottomLeft: - borderRadius = BorderRadius.only(bottomLeft: Radius.circular(14)); - break; - case Places.bottomRight: - borderRadius = BorderRadius.only(bottomRight: Radius.circular(14)); - break; - case Places.inside: - borderRadius = BorderRadius.all(Radius.circular(0)); - break; - } + final color = isCurrent + ? Theme.of(context).textTheme.body2.color + : Theme.of(context).accentTextTheme.title.color; + final textColor = isCurrent + ? Palette.blueCraiola + : Theme.of(context).primaryTextTheme.title.color; return GestureDetector( onTap: onTap, child: Container( padding: EdgeInsets.all(10), - decoration: BoxDecoration(borderRadius: borderRadius, color: color), + color: color, child: Center( child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ - image != null ? image : Offstage(), + image ?? Offstage(), Padding( padding: image != null ? EdgeInsets.only(left: 10) @@ -229,14 +170,17 @@ class SeedLanguagePickerState extends State<SeedLanguagePicker> { text, style: TextStyle( fontSize: 18, - fontWeight: FontWeight.bold, + fontWeight: FontWeight.w600, + fontFamily: 'Poppins', decoration: TextDecoration.none, - color: textColor), + color: textColor + ), ), ) ], ), ), - )); + ) + ); } } diff --git a/lib/src/screens/settings/change_language.dart b/lib/src/screens/settings/change_language.dart index 8e2c49ea2..5ef079216 100644 --- a/lib/src/screens/settings/change_language.dart +++ b/lib/src/screens/settings/change_language.dart @@ -1,3 +1,5 @@ +import 'package:cake_wallet/src/screens/settings/widgets/language_row.dart'; +import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; @@ -16,29 +18,13 @@ class ChangeLanguage extends BasePage { final settingsStore = Provider.of<SettingsStore>(context); final currentLanguage = Provider.of<Language>(context); - final currentColor = Colors.green; - final notCurrentColor = Theme.of(context).primaryTextTheme.title.color; - - final shortDivider = Container( - height: 1, - padding: EdgeInsets.only(left: 24), - color: Theme.of(context).accentTextTheme.title.backgroundColor, - child: Container( - height: 1, - color: Theme.of(context).dividerColor, - ), - ); - - final longDivider = Container( - height: 1, - color: Theme.of(context).dividerColor, - ); - return Container( padding: EdgeInsets.only(top: 10.0), - child: ListView.builder( - itemCount: languages.values.length, - itemBuilder: (BuildContext context, int index) { + child: SectionStandardList( + sectionCount: 1, + context: context, + itemCounter: (int sectionIndex) => languages.values.length, + itemBuilder: (_, sectionIndex, index) { final item = languages.values.elementAt(index); final code = languages.keys.elementAt(index); @@ -46,52 +32,30 @@ class ChangeLanguage extends BasePage { ? false : code == settingsStore.languageCode; - return Column( - children: <Widget>[ - index == 0 ? longDivider : Offstage(), - Container( - padding: EdgeInsets.only(top: 4, bottom: 4), - color: Theme.of(context).accentTextTheme.title.backgroundColor, - child: ListTile( - contentPadding: EdgeInsets.only(left: 24, right: 24), - title: Text( - item, - style: TextStyle( - fontSize: 14.0, - fontWeight: FontWeight.w600, - color: isCurrent ? currentColor : notCurrentColor - ), - ), - trailing: isCurrent - ? Icon(Icons.done, color: currentColor) - : Offstage(), - onTap: () async { - if (!isCurrent) { - await showDialog<void>( - context: context, - builder: (BuildContext context) { - return AlertWithTwoActions( - alertTitle: S.of(context).change_language, - alertContent: S.of(context).change_language_to(item), - leftButtonText: S.of(context).change, - rightButtonText: S.of(context).cancel, - actionLeftButton: () { - settingsStore.saveLanguageCode( - languageCode: code); - currentLanguage.setCurrentLanguage(code); - Navigator.of(context).pop(); - }, - actionRightButton: () => Navigator.of(context).pop() - ); - }); - } - }, - ), - ), - item == languages.values.last - ? longDivider - : shortDivider - ], + return LanguageRow( + title: item, + isSelected: isCurrent, + handler: (context) async { + if (!isCurrent) { + await showDialog<void>( + context: context, + builder: (BuildContext context) { + return AlertWithTwoActions( + alertTitle: S.of(context).change_language, + alertContent: S.of(context).change_language_to(item), + leftButtonText: S.of(context).change, + rightButtonText: S.of(context).cancel, + actionLeftButton: () { + settingsStore.saveLanguageCode( + languageCode: code); + currentLanguage.setCurrentLanguage(code); + Navigator.of(context).pop(); + }, + actionRightButton: () => Navigator.of(context).pop() + ); + }); + } + }, ); }, ) diff --git a/lib/src/screens/settings/settings.dart b/lib/src/screens/settings/settings.dart index e35508d81..2ee3b94ff 100644 --- a/lib/src/screens/settings/settings.dart +++ b/lib/src/screens/settings/settings.dart @@ -1,3 +1,5 @@ +import 'package:cake_wallet/src/screens/settings/widgets/settings_version_cell.dart'; +import 'package:cake_wallet/view_model/settings/version_list_item.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -41,6 +43,7 @@ class SettingsPage extends BasePage { return SettingsPickerCell<dynamic>( title: item.title, selectedItem: item.selectedItem(), + isAlwaysShowScrollThumb: item.isAlwaysShowScrollThumb, items: item.items, onItemSelected: (dynamic value) => item.onItemSelected(value), ); @@ -57,7 +60,8 @@ class SettingsPage extends BasePage { } if (item is RegularListItem) { - return SettingsCellWithArrow(title: item.title); + return SettingsCellWithArrow( + title: item.title, handler: item.handler); } if (item is LinkListItem) { @@ -68,6 +72,14 @@ class SettingsPage extends BasePage { linkTitle: item.linkTitle); } + if (item is VersionListItem) { + return Observer(builder: (_) { + return SettingsVersionCell( + title: + S.of(context).version(settingsViewModel.currentVersion)); + }); + } + return Container(); }); } diff --git a/lib/src/screens/settings/widgets/language_row.dart b/lib/src/screens/settings/widgets/language_row.dart new file mode 100644 index 000000000..0f807a843 --- /dev/null +++ b/lib/src/screens/settings/widgets/language_row.dart @@ -0,0 +1,30 @@ +import 'package:cake_wallet/palette.dart'; +import 'package:flutter/material.dart'; +import 'package:cake_wallet/src/widgets/standard_list.dart'; + +class LanguageRow extends StandardListRow { + LanguageRow({@required String title, @required this.isSelected, @required Function(BuildContext context) handler}) : + super(title: title, isSelected: isSelected, onTap: handler); + + @override + final bool isSelected; + + @override + Widget buildCenter(BuildContext context, {@required bool hasLeftOffset}) { + return Expanded( + child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [ + if (hasLeftOffset) SizedBox(width: 10), + Text(title, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: titleColor(context))) + ])); + } + + @override + Widget buildTrailing(BuildContext context) => + isSelected + ? Icon(Icons.done, color: Palette.blueCraiola) + : Offstage(); +} \ No newline at end of file diff --git a/lib/src/screens/settings/widgets/settings_cell_with_arrow.dart b/lib/src/screens/settings/widgets/settings_cell_with_arrow.dart index 6e55aa5ee..270b3d88b 100644 --- a/lib/src/screens/settings/widgets/settings_cell_with_arrow.dart +++ b/lib/src/screens/settings/widgets/settings_cell_with_arrow.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; class SettingsCellWithArrow extends StandardListRow { - SettingsCellWithArrow({@required String title}) - : super(title: title, isSelected: false); + SettingsCellWithArrow({@required String title, @required Function(BuildContext context) handler}) + : super(title: title, isSelected: false, onTap: handler); @override Widget buildTrailing(BuildContext context) => Image.asset('assets/images/select_arrow.png', - color: Theme.of(context).primaryTextTheme.caption.color); + color: Theme.of(context).primaryTextTheme.overline.color); } \ No newline at end of file diff --git a/lib/src/screens/settings/widgets/settings_link_provider_cell.dart b/lib/src/screens/settings/widgets/settings_link_provider_cell.dart index 3babf3097..362d5ac46 100644 --- a/lib/src/screens/settings/widgets/settings_link_provider_cell.dart +++ b/lib/src/screens/settings/widgets/settings_link_provider_cell.dart @@ -1,5 +1,7 @@ +import 'package:cake_wallet/palette.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart'; +import 'package:url_launcher/url_launcher.dart'; class SettingsLinkProviderCell extends StandardListRow { SettingsLinkProviderCell( @@ -7,7 +9,7 @@ class SettingsLinkProviderCell extends StandardListRow { @required this.icon, @required this.link, @required this.linkTitle}) - : super(title: title, isSelected: false); + : super(title: title, isSelected: false, onTap: (BuildContext context) => _launchUrl(link) ); final String icon; final String link; @@ -20,5 +22,11 @@ class SettingsLinkProviderCell extends StandardListRow { @override Widget buildTrailing(BuildContext context) => Text(linkTitle, style: TextStyle( - fontSize: 14.0, fontWeight: FontWeight.w500, color: Colors.blue)); + fontSize: 14.0, + fontWeight: FontWeight.w500, + color: Palette.blueCraiola)); + + static void _launchUrl(String url) async { + if (await canLaunch(url)) await launch(url); + } } \ No newline at end of file diff --git a/lib/src/screens/settings/widgets/settings_picker_cell.dart b/lib/src/screens/settings/widgets/settings_picker_cell.dart index 1fc574b7a..a77e76efd 100644 --- a/lib/src/screens/settings/widgets/settings_picker_cell.dart +++ b/lib/src/screens/settings/widgets/settings_picker_cell.dart @@ -8,7 +8,8 @@ class SettingsPickerCell<ItemType> extends StandardListRow { {@required String title, this.selectedItem, this.items, - this.onItemSelected}) + this.onItemSelected, + this.isAlwaysShowScrollThumb}) : super( title: title, isSelected: false, @@ -22,12 +23,15 @@ class SettingsPickerCell<ItemType> extends StandardListRow { selectedAtIndex: selectedAtIndex, title: S.current.please_select, mainAxisAlignment: MainAxisAlignment.center, - onItemSelected: (ItemType item) => onItemSelected?.call(item))); + isAlwaysShowScrollThumb: isAlwaysShowScrollThumb, + onItemSelected: (ItemType item) => + onItemSelected?.call(item))); }); final ItemType selectedItem; final List<ItemType> items; final void Function(ItemType item) onItemSelected; + final bool isAlwaysShowScrollThumb; @override Widget buildTrailing(BuildContext context) { @@ -37,7 +41,7 @@ class SettingsPickerCell<ItemType> extends StandardListRow { style: TextStyle( fontSize: 14.0, fontWeight: FontWeight.w500, - color: Theme.of(context).primaryTextTheme.caption.color), + color: Theme.of(context).primaryTextTheme.overline.color), ); } } diff --git a/lib/src/screens/settings/widgets/settings_switcher_cell.dart b/lib/src/screens/settings/widgets/settings_switcher_cell.dart index db42274e0..8a02c7e2b 100644 --- a/lib/src/screens/settings/widgets/settings_switcher_cell.dart +++ b/lib/src/screens/settings/widgets/settings_switcher_cell.dart @@ -8,9 +8,9 @@ class SettingsSwitcherCell extends StandardListRow { : super(title: title, isSelected: false); final bool value; - final void Function(bool value) onValueChange; + final void Function(BuildContext context, bool value) onValueChange; @override - Widget buildTrailing(BuildContext context) => - StandartSwitch(value: value, onTaped: () => onValueChange(!value)); + Widget buildTrailing(BuildContext context) => StandartSwitch( + value: value, onTaped: () => onValueChange(context, !value)); } diff --git a/lib/src/screens/settings/widgets/settings_version_cell.dart b/lib/src/screens/settings/widgets/settings_version_cell.dart new file mode 100644 index 000000000..91bd8fc1a --- /dev/null +++ b/lib/src/screens/settings/widgets/settings_version_cell.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; + +class SettingsVersionCell extends StatelessWidget { + SettingsVersionCell({@required this.title}); + + final String title; + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(bottom: 24), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: <Widget>[ + Text( + title, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.normal, + color: Theme.of(context).primaryTextTheme.overline.color + ), + ) + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/src/screens/setup_pin_code/setup_pin_code.dart b/lib/src/screens/setup_pin_code/setup_pin_code.dart index 3313f72a3..628337e30 100644 --- a/lib/src/screens/setup_pin_code/setup_pin_code.dart +++ b/lib/src/screens/setup_pin_code/setup_pin_code.dart @@ -53,7 +53,7 @@ class _SetupPinCodeFormState<WidgetType extends SetupPinCodeForm> state.clear(); } else { if (listEquals<int>(state.pin, _originalPin)) { - final String pin = state.pin.fold("", (ac, val) => ac + '$val'); + final String pin = state.pin.fold('', (ac, val) => ac + '$val'); _userStore.set(password: pin); _settingsStore.setDefaultPinLength(pinLength: state.pinLength); diff --git a/lib/src/screens/wallet_list/wallet_menu.dart b/lib/src/screens/wallet_list/wallet_menu.dart index 7ac1c1986..8d6a793c5 100644 --- a/lib/src/screens/wallet_list/wallet_menu.dart +++ b/lib/src/screens/wallet_list/wallet_menu.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/routes.dart'; @@ -36,10 +37,14 @@ class WalletMenu { ]; final List<Image> listImages = [ - Image.asset('assets/images/load.png', height: 24, width: 24, color: Colors.white), - Image.asset('assets/images/eye_action.png', height: 24, width: 24, color: Colors.white), - Image.asset('assets/images/trash.png', height: 24, width: 24, color: Colors.white), - Image.asset('assets/images/scanner.png', height: 24, width: 24, color: Colors.white) + Image.asset('assets/images/load.png', + height: 24, width: 24, color: Colors.white), + Image.asset('assets/images/eye_action.png', + height: 24, width: 24, color: Colors.white), + Image.asset('assets/images/trash.png', + height: 24, width: 24, color: Colors.white), + Image.asset('assets/images/scanner.png', + height: 24, width: 24, color: Colors.white) ]; List<String> generateItemsForWalletMenu(bool isCurrentWallet) { @@ -87,10 +92,11 @@ class WalletMenu { return images; } - void action(int index, WalletListItem wallet, bool isCurrentWallet) { + Future<void> action( + int index, WalletListItem wallet, bool isCurrentWallet) async { switch (index) { case 0: - Navigator.of(context).pushNamed(Routes.auth, arguments: + await Navigator.of(context).pushNamed(Routes.auth, arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) async { if (!isAuthenticatedSuccessfully) { return; @@ -110,7 +116,7 @@ class WalletMenu { }); break; case 1: - Navigator.of(context).pushNamed(Routes.auth, arguments: + await Navigator.of(context).pushNamed(Routes.auth, arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) async { if (!isAuthenticatedSuccessfully) { return; @@ -120,7 +126,23 @@ class WalletMenu { }); break; case 2: - Navigator.of(context).pushNamed(Routes.auth, arguments: + final isComfirmed = await showDialog<bool>( + context: context, + builder: (BuildContext context) { + return AlertWithTwoActions( + alertTitle: 'Remove wallet', + alertContent: S.of(context).confirm_delete_wallet, + leftButtonText: S.of(context).cancel, + rightButtonText: S.of(context).remove, + actionLeftButton: () => Navigator.of(context).pop(false), + actionRightButton: () => Navigator.of(context).pop(true)); + }); + + if (isComfirmed == null || !isComfirmed) { + return; + } + + await Navigator.of(context).pushNamed(Routes.auth, arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) async { if (!isAuthenticatedSuccessfully) { return; @@ -139,7 +161,7 @@ class WalletMenu { }); break; case 3: - Navigator.of(context).pushNamed(Routes.rescan); + await Navigator.of(context).pushNamed(Routes.rescan); break; default: break; diff --git a/lib/src/screens/welcome/welcome_page.dart b/lib/src/screens/welcome/welcome_page.dart index 46a4fb89f..78cd04835 100644 --- a/lib/src/screens/welcome/welcome_page.dart +++ b/lib/src/screens/welcome/welcome_page.dart @@ -1,12 +1,10 @@ +import 'package:cake_wallet/di.dart'; +import 'package:cake_wallet/store/settings_store.dart'; import 'package:flutter/material.dart'; -import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:provider/provider.dart'; -import 'package:cake_wallet/themes.dart'; -import 'package:cake_wallet/theme_changer.dart'; class WelcomePage extends BasePage { static const aspectRatioImage = 1.25; @@ -23,14 +21,13 @@ class WelcomePage extends BasePage { @override Widget body(BuildContext context) { - final _themeChanger = Provider.of<ThemeChanger>(context); - final welcomeImage = _themeChanger.getTheme() == Themes.darkTheme - ? welcomeImageDark : welcomeImageLight; + final welcomeImage = getIt.get<SettingsStore>().isDarkTheme + ? welcomeImageDark : welcomeImageLight; final newWalletImage = Image.asset('assets/images/new_wallet.png', height: 12, width: 12, - color: Palette.oceanBlue); + color: Theme.of(context).accentTextTheme.headline.decorationColor); final restoreWalletImage = Image.asset('assets/images/restore_wallet.png', height: 12, width: 12, @@ -60,13 +57,14 @@ class WelcomePage extends BasePage { S.of(context).welcome, style: TextStyle( fontSize: 18, - color: Theme.of(context).primaryTextTheme.caption.color, + fontWeight: FontWeight.w500, + color: Theme.of(context).accentTextTheme.display3.color, ), textAlign: TextAlign.center, ), ), Padding( - padding: EdgeInsets.only(top: 10), + padding: EdgeInsets.only(top: 5), child: Text( S.of(context).cake_wallet, style: TextStyle( @@ -78,13 +76,13 @@ class WelcomePage extends BasePage { ), ), Padding( - padding: EdgeInsets.only(top: 14), + padding: EdgeInsets.only(top: 5), child: Text( S.of(context).first_wallet_text, style: TextStyle( fontSize: 16, - fontWeight: FontWeight.w600, - color: Theme.of(context).primaryTextTheme.caption.color, + fontWeight: FontWeight.w500, + color: Theme.of(context).accentTextTheme.display3.color, ), textAlign: TextAlign.center, ), @@ -97,7 +95,8 @@ class WelcomePage extends BasePage { S.of(context).please_make_selection, style: TextStyle( fontSize: 12, - color: Theme.of(context).primaryTextTheme.caption.color, + fontWeight: FontWeight.normal, + color: Theme.of(context).accentTextTheme.display3.color, ), textAlign: TextAlign.center, ), @@ -107,18 +106,17 @@ class WelcomePage extends BasePage { onPressed: () => Navigator.pushNamed(context, Routes.newWalletFromWelcome), image: newWalletImage, text: S.of(context).create_new, - color: Colors.white, - textColor: Palette.oceanBlue, - borderColor: Palette.oceanBlue, + color: Theme.of(context).accentTextTheme.subtitle.decorationColor, + textColor: Theme.of(context).accentTextTheme.headline.decorationColor, ), ), Padding( padding: EdgeInsets.only(top: 10), child: PrimaryImageButton( - onPressed: () => Navigator.pushNamed(context, Routes.restoreOptions), + onPressed: () => Navigator.pushNamed(context, Routes.restoreWalletOptionsFromWelcome), image: restoreWalletImage, text: S.of(context).restore_wallet, - color: Theme.of(context).primaryTextTheme.overline.color, + color: Theme.of(context).accentTextTheme.caption.color, textColor: Theme.of(context).primaryTextTheme.title.color), ) ], diff --git a/lib/src/widgets/base_alert_dialog.dart b/lib/src/widgets/base_alert_dialog.dart index 14b5a58a4..d22d01d5a 100644 --- a/lib/src/widgets/base_alert_dialog.dart +++ b/lib/src/widgets/base_alert_dialog.dart @@ -31,6 +31,7 @@ class BaseAlertDialog extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontSize: 16, + fontWeight: FontWeight.normal, fontFamily: 'Poppins', color: Theme.of(context).primaryTextTheme.title.color, decoration: TextDecoration.none, diff --git a/lib/src/widgets/blockchain_height_widget.dart b/lib/src/widgets/blockchain_height_widget.dart index 9e66d4077..2f6105887 100644 --- a/lib/src/widgets/blockchain_height_widget.dart +++ b/lib/src/widgets/blockchain_height_widget.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/domain/monero/get_height_by_date.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; class BlockchainHeightWidget extends StatefulWidget { BlockchainHeightWidget({GlobalKey key, this.onHeightChange}) @@ -46,26 +47,12 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> { Flexible( child: Container( padding: EdgeInsets.only(top: 20.0, bottom: 10.0), - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color), + child: BaseTextFormField( controller: restoreHeightController, keyboardType: TextInputType.numberWithOptions( signed: false, decimal: false), - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context).primaryTextTheme.caption.color, - fontSize: 16), - hintText: S.of(context).widgets_restore_from_blockheight, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), - ), + hintText: S.of(context).widgets_restore_from_blockheight, + ) )) ], ), @@ -75,7 +62,7 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> { S.of(context).widgets_or, style: TextStyle( fontSize: 16.0, - fontWeight: FontWeight.bold, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color), ), ), @@ -86,31 +73,10 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> { child: InkWell( onTap: () => _selectDate(context), child: IgnorePointer( - child: TextFormField( - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context).primaryTextTheme.title.color), - decoration: InputDecoration( - hintStyle: TextStyle( - color: Theme.of(context) - .primaryTextTheme - .caption - .color, - fontSize: 16), - hintText: S.of(context).widgets_restore_from_date, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).dividerColor, - width: 1.0))), + child: BaseTextFormField( controller: dateController, - validator: (value) { - return null; - }, - ), + hintText: S.of(context).widgets_restore_from_date, + ) ), ), )) diff --git a/lib/src/widgets/picker.dart b/lib/src/widgets/picker.dart index 732c2118d..935237573 100644 --- a/lib/src/widgets/picker.dart +++ b/lib/src/widgets/picker.dart @@ -123,9 +123,7 @@ class PickerState<Item> extends State<Picker> { mainAxisAlignment: widget.mainAxisAlignment, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ - image != null - ? image - : Offstage(), + image ?? Offstage(), Padding( padding: EdgeInsets.only( left: image != null ? 12 : 0 diff --git a/lib/src/widgets/seed_language_selector.dart b/lib/src/widgets/seed_language_selector.dart index f66cadb8e..74420d370 100644 --- a/lib/src/widgets/seed_language_selector.dart +++ b/lib/src/widgets/seed_language_selector.dart @@ -34,14 +34,14 @@ class SeedLanguageSelectorState extends State<SeedLanguageSelector> { return SelectButton( image: null, text: seedLocales[seedLanguages.indexOf(selected)], - color: Theme.of(context).accentTextTheme.title.backgroundColor, - textColor: Theme.of(context).primaryTextTheme.title.color, onTap: () async { final selected = await showDialog<String>( context: context, builder: (BuildContext context) => SeedLanguagePicker(key: _pickerKey, selected: this.selected)); - setState(() => this.selected = selected); + if (selected != null) { + setState(() => this.selected = selected); + } }); } } diff --git a/lib/src/widgets/seed_widget.dart b/lib/src/widgets/seed_widget.dart index c9b918556..d3070af16 100644 --- a/lib/src/widgets/seed_widget.dart +++ b/lib/src/widgets/seed_widget.dart @@ -6,6 +6,7 @@ import 'package:cake_wallet/core/seed_validator.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/domain/common/mnemonic_item.dart'; import 'package:cake_wallet/generated/i18n.dart'; +import 'package:flutter/widgets.dart'; class SeedWidget extends StatefulWidget { SeedWidget( @@ -13,6 +14,8 @@ class SeedWidget extends StatefulWidget { this.maxLength, this.onMnemonicChange, this.onFinish, + this.leading, + this.middle, this.validator}) : super(key: key); @@ -20,6 +23,8 @@ class SeedWidget extends StatefulWidget { final Function(List<MnemonicItem>) onMnemonicChange; final Function() onFinish; final SeedValidator validator; + final Widget leading; + final Widget middle; @override SeedWidgetState createState() => SeedWidgetState(maxLength: maxLength); @@ -199,74 +204,90 @@ class SeedWidgetState extends State<SeedWidget> { child: Column(children: [ Flexible( fit: FlexFit.tight, - flex: 1, + flex: 2, child: Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(24), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(24), - bottomRight: Radius.circular(24)), - color: Theme.of(context).accentTextTheme.title.backgroundColor), - child: SingleChildScrollView( + width: double.infinity, + height: double.infinity, + padding: EdgeInsets.all(0), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(24), + bottomRight: Radius.circular(24)), + gradient: LinearGradient(colors: [ + Theme.of(context).primaryTextTheme.subhead.color, + Theme.of(context).primaryTextTheme.subhead.decorationColor, + ], begin: Alignment.topLeft, end: Alignment.bottomRight)), child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ - Text( - S.of(context).restore_active_seed, - style: TextStyle( - fontSize: 14, - color: - Theme.of(context).primaryTextTheme.caption.color), + CupertinoNavigationBar( + leading: widget.leading, + middle: widget.middle, + backgroundColor: Colors.transparent, + border: null, ), - Padding( - padding: EdgeInsets.only(top: 5), - child: Wrap( - children: items.map((item) { - final isValid = widget.validator.isValid(item); - final isSelected = selectedItem == item; + Expanded( + child: Container( + padding: EdgeInsets.all(24), + alignment: Alignment.topLeft, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + Text( + S.of(context).restore_active_seed, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Theme.of(context) + .textTheme + .overline + .backgroundColor), + ), + Padding( + padding: EdgeInsets.only(top: 5), + child: Wrap( + children: items.map((item) { + final isValid = + widget.validator.isValid(item); + final isSelected = selectedItem == item; - return InkWell( - onTap: () => onMnemonicTap(item), - child: Container( - decoration: BoxDecoration( - color: isValid - ? Colors.transparent - : Palette.red), - margin: EdgeInsets.only(right: 7, bottom: 8), - child: Text( - item.toString(), - style: TextStyle( - color: isValid - ? Theme.of(context) - .primaryTextTheme - .title - .color - : Theme.of(context) - .primaryTextTheme - .caption - .color, - fontSize: 16, - fontWeight: isSelected - ? FontWeight.w900 - : FontWeight.w400, - decoration: isSelected - ? TextDecoration.underline - : TextDecoration.none), - )), - ); - }).toList(), - )) + return InkWell( + onTap: () => onMnemonicTap(item), + child: Container( + decoration: BoxDecoration( + color: isValid + ? Colors.transparent + : Palette.red), + margin: EdgeInsets.only( + right: 7, bottom: 8), + child: Text( + item.toString(), + style: TextStyle( + color: isValid + ? Colors.white + : Colors.grey, + fontSize: 16, + fontWeight: isSelected + ? FontWeight.w900 + : FontWeight.w600, + decoration: isSelected + ? TextDecoration.underline + : TextDecoration.none), + )), + ); + }).toList(), + )) + ], + ), + ), + )) ], - ), - ), - ), + )), ), Flexible( fit: FlexFit.tight, - flex: 2, + flex: 3, child: Padding( padding: EdgeInsets.only(left: 24, top: 48, right: 24, bottom: 24), @@ -277,8 +298,8 @@ class SeedWidgetState extends State<SeedWidget> { Text( S.of(context).restore_new_seed, style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, + fontSize: 20, + fontWeight: FontWeight.w500, color: Theme.of(context).primaryTextTheme.title.color), ), @@ -291,6 +312,7 @@ class SeedWidgetState extends State<SeedWidget> { : null, style: TextStyle( fontSize: 16.0, + fontWeight: FontWeight.normal, color: Theme.of(context).primaryTextTheme.title.color), controller: _seedController, @@ -306,10 +328,11 @@ class SeedWidgetState extends State<SeedWidget> { Text('${items.length}/$maxLength', style: TextStyle( color: Theme.of(context) - .primaryTextTheme - .caption - .color, - fontSize: 14)), + .accentTextTheme + .display2 + .decorationColor, + fontWeight: FontWeight.normal, + fontSize: 16)), SizedBox(width: 10), InkWell( onTap: () async => @@ -322,17 +345,14 @@ class SeedWidgetState extends State<SeedWidget> { decoration: BoxDecoration( color: Theme.of(context) .accentTextTheme - .title - .backgroundColor, + .caption + .color, borderRadius: BorderRadius.circular(10.0)), child: Text( S.of(context).paste, style: TextStyle( - color: Theme.of(context) - .primaryTextTheme - .title - .color), + color: Palette.blueCraiola), )), ) ], @@ -341,20 +361,27 @@ class SeedWidgetState extends State<SeedWidget> { ), hintStyle: TextStyle( color: Theme.of(context) - .primaryTextTheme - .caption - .color, + .accentTextTheme + .display2 + .decorationColor, + fontWeight: FontWeight.normal, fontSize: 16), hintText: S.of(context).restore_from_seed_placeholder, errorText: _errorMessage, focusedBorder: UnderlineInputBorder( borderSide: BorderSide( - color: Theme.of(context).dividerColor, + color: Theme.of(context) + .accentTextTheme + .subtitle + .backgroundColor, width: 1.0)), enabledBorder: UnderlineInputBorder( borderSide: BorderSide( - color: Theme.of(context).dividerColor, + color: Theme.of(context) + .accentTextTheme + .subtitle + .backgroundColor, width: 1.0))), enableInteractiveSelection: false, ), @@ -386,7 +413,7 @@ class SeedWidgetState extends State<SeedWidget> { onPressed: () => widget.onFinish != null ? widget.onFinish() : null, - color: Colors.green, + color: Palette.blueCraiola, textColor: Colors.white) : PrimaryButton( text: selectedItem != null @@ -397,7 +424,7 @@ class SeedWidgetState extends State<SeedWidget> { : null, onDisabledPressed: () => showErrorIfExist(), isDisabled: !isCurrentMnemonicValid, - color: Colors.green, + color: Palette.blueCraiola, textColor: Colors.white), ), ) diff --git a/lib/src/widgets/standard_list.dart b/lib/src/widgets/standard_list.dart index 9ad338870..e4f82a877 100644 --- a/lib/src/widgets/standard_list.dart +++ b/lib/src/widgets/standard_list.dart @@ -41,18 +41,17 @@ class StandardListRow extends StatelessWidget { style: TextStyle( fontSize: 14, fontWeight: FontWeight.normal, - color: _titleColor(context))) + color: titleColor(context))) ])); } Widget buildTrailing(BuildContext context) => null; - Color _titleColor(BuildContext context) => isSelected + Color titleColor(BuildContext context) => isSelected ? Palette.blueCraiola : Theme.of(context).primaryTextTheme.title.color; Color _backgroundColor(BuildContext context) { -// return Theme.of(context).accentTextTheme.subtitle.decorationColor; return Theme.of(context).backgroundColor; } } @@ -114,16 +113,20 @@ class SectionStandardList extends StatelessWidget { {@required this.itemCounter, @required this.itemBuilder, @required this.sectionCount, + this.hasTopSeparator = false, BuildContext context}) - : totalRows = transform(context, sectionCount, itemCounter, itemBuilder); + : totalRows = transform(hasTopSeparator, context, sectionCount, + itemCounter, itemBuilder); final int sectionCount; + final bool hasTopSeparator; final int Function(int sectionIndex) itemCounter; final Widget Function(BuildContext context, int sectionIndex, int itemIndex) itemBuilder; final List<Widget> totalRows; static List<Widget> transform( + bool hasTopSeparator, BuildContext context, int sectionCount, int Function(int sectionIndex) itemCounter, @@ -132,9 +135,9 @@ class SectionStandardList extends StatelessWidget { final items = <Widget>[]; for (var sectionIndex = 0; sectionIndex < sectionCount; sectionIndex++) { - /*if (sectionIndex == 0) { - items.add(StandardListSeparator()); - }*/ + if ((sectionIndex == 0)&&(hasTopSeparator)) { + items.add(StandardListSeparator(padding: EdgeInsets.only(left: 24))); + } final itemCount = itemCounter(sectionIndex); diff --git a/lib/src/widgets/standart_switch.dart b/lib/src/widgets/standart_switch.dart index cb2696339..0fa56f6ad 100644 --- a/lib/src/widgets/standart_switch.dart +++ b/lib/src/widgets/standart_switch.dart @@ -26,7 +26,7 @@ class StandartSwitchState extends State<StandartSwitch> { decoration: BoxDecoration( color: widget.value ? Colors.green - : PaletteDark.distantBlue, + : Theme.of(context).accentTextTheme.display4.color, borderRadius: BorderRadius.all(Radius.circular(14.0))), child: Container( width: 24.0, diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart index f27943be4..22589bedb 100644 --- a/lib/store/settings_store.dart +++ b/lib/store/settings_store.dart @@ -44,9 +44,14 @@ abstract class SettingsStoreBase with Store { languageCode = initialLanguageCode; currentLocale = initialCurrentLocale; itemHeaders = {}; + this.nodes = ObservableMap<WalletType, Node>.of(nodes); _sharedPreferences = sharedPreferences; _nodeSource = nodeSource; - _nodes = nodes; + + reaction( + (_) => allowBiometricalAuthentication, + (bool biometricalAuthentication) => sharedPreferences.setBool( + allowBiometricalAuthenticationKey, biometricalAuthentication)); } static const currentNodeIdKey = 'current_node_id'; @@ -62,9 +67,6 @@ abstract class SettingsStoreBase with Store { static const currentPinLength = 'current_pin_length'; static const currentLanguageCode = 'language_code'; -// @observable -// Node node; - @observable FiatCurrency fiatCurrency; @@ -101,9 +103,9 @@ abstract class SettingsStoreBase with Store { SharedPreferences _sharedPreferences; Box<Node> _nodeSource; - Map<WalletType, Node> _nodes; + ObservableMap<WalletType, Node> nodes; - Node getCurrentNode(WalletType walletType) => _nodes[walletType]; + Node getCurrentNode(WalletType walletType) => nodes[walletType]; Future<void> setCurrentNode(Node node, WalletType walletType) async { switch (walletType) { @@ -118,7 +120,7 @@ abstract class SettingsStoreBase with Store { break; } - _nodes[walletType] = node; + nodes[walletType] = node; } static Future<SettingsStore> load( diff --git a/lib/themes.dart b/lib/themes.dart index a25a61de1..f8d984baf 100644 --- a/lib/themes.dart +++ b/lib/themes.dart @@ -154,7 +154,19 @@ class Themes { ), display2: TextStyle( color: Palette.shadowWhite, // action button color (address text field) + decorationColor: Palette.darkGray // hint text (seed widget) ), + display3: TextStyle( + color: Palette.darkGray, // hint text (new wallet page) + decorationColor: Palette.periwinkleCraiola // underline (new wallet page) + ), + display4: TextStyle( + color: Palette.darkGray, // switch background (settings page) + ), + body1: TextStyle( + color: Palette.darkGray, // indicators (PIN code) + decorationColor: Palette.darkGray // switch (PIN code) + ) ), @@ -320,7 +332,19 @@ class Themes { ), display2: TextStyle( color: PaletteDark.nightBlue, // action button color (address text field) + decorationColor: PaletteDark.darkCyanBlue // hint text (seed widget) ), + display3: TextStyle( + color: PaletteDark.cyanBlue, // hint text (new wallet page) + decorationColor: PaletteDark.darkGrey // underline (new wallet page) + ), + display4: TextStyle( + color: PaletteDark.deepVioletBlue, // switch background (settings page) + ), + body1: TextStyle( + color: PaletteDark.indicatorVioletBlue, // indicators (PIN code) + decorationColor: PaletteDark.lightPurpleBlue // switch (PIN code) + ) ), diff --git a/lib/utils/item_cell.dart b/lib/utils/item_cell.dart new file mode 100644 index 000000000..4aca57b46 --- /dev/null +++ b/lib/utils/item_cell.dart @@ -0,0 +1,11 @@ +import 'package:flutter/foundation.dart'; +import 'package:cake_wallet/utils/mobx.dart'; + +class ItemCell<Item> with Keyable { + ItemCell(this.value, {@required this.isSelected, @required dynamic key}) { + keyIndex = key; + } + + final Item value; + final bool isSelected; +} diff --git a/lib/utils/mobx.dart b/lib/utils/mobx.dart index 0065a939d..6a8413aff 100644 --- a/lib/utils/mobx.dart +++ b/lib/utils/mobx.dart @@ -1,46 +1,90 @@ +import 'dart:async'; + +import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; -void connectDifferent<T, Y>( +mixin Keyable { + dynamic keyIndex; +} + +void connectDifferent<T extends Keyable, Y extends Keyable>( ObservableList<T> source, ObservableList<Y> dest, Y Function(T) transform, {bool Function(T) filter}) { source.observe((ListChange<T> change) { -// switch (change.type) { -// case OperationType.add: -// final _values = change.added; -// Iterable<T> values; + change.elementChanges.forEach((change) { + switch (change.type) { + case OperationType.add: + if (filter?.call(change.newValue as T) ?? true) { + dest.add(transform(change.newValue as T)); + } + break; + case OperationType.remove: + // Hive could has equal index and key + dest.removeWhere( + (elem) => elem.keyIndex == (change.oldValue.key ?? change.index)); + break; + case OperationType.update: + for (var i = 0; i < dest.length; i++) { + final item = dest[i]; -// if (filter != null) { -// values = _values.where(filter); -// } - -// dest.addAll(values.map((e) => transform(e))); -// break; -// case OperationType.remove: -// change.removed.forEach((element) { -// dest.remove(element); -// }); - -// // dest.removeAt(change.index); -// break; -// case OperationType.update: -// // change.index -// break; -// } + if (item.keyIndex == change.newValue.key) { + dest[i] = transform(change.newValue as T); + } + } + break; + } + }); }); } -void connect<T>(ObservableList<T> source, ObservableList<T> dest) { +void connect<T extends Keyable>( + ObservableList<T> source, ObservableList<T> dest) { source.observe((ListChange<T> change) { -// switch (change.type) { -// case OperationType.add: -// dest.addAll(change.added); -// break; -// case OperationType.remove: -// dest.removeAt(change.index); -// break; -// case OperationType.update: -// // change.index -// break; -// } + source.observe((ListChange<T> change) { + change.elementChanges.forEach((change) { + switch (change.type) { + case OperationType.add: + // if (filter?.call(change.newValue as T) ?? true) { + dest.add(change.newValue as T); + // } + break; + case OperationType.remove: + // Hive could has equal index and key + dest.removeWhere((elem) => + elem.keyIndex == (change.oldValue.key ?? change.index)); + break; + case OperationType.update: + for (var i = 0; i < dest.length; i++) { + final item = dest[i]; + + if (item.keyIndex == change.newValue.key) { + dest[i] = change.newValue as T; + } + } + break; + } + }); + }); + }); +} + +StreamSubscription<BoxEvent> bindBox<T extends Keyable>( + Box<T> source, ObservableList<T> dest) { + return source.watch().listen((event) { + if (event.deleted) { + dest.removeWhere((el) => el.keyIndex == event.key); + } + + final dynamic value = event.value; + + if (value is T) { + final elIndex = dest.indexWhere((el) => el.keyIndex == value.keyIndex); + + if (elIndex > -1) { + dest[elIndex] = value; + } else { + dest.add(value); + } + } }); } diff --git a/lib/view_model/contact_list/contact_list_view_model.dart b/lib/view_model/contact_list/contact_list_view_model.dart index a3f526a86..87917b25a 100644 --- a/lib/view_model/contact_list/contact_list_view_model.dart +++ b/lib/view_model/contact_list/contact_list_view_model.dart @@ -1,20 +1,34 @@ +import 'dart:async'; + +import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/core/contact_service.dart'; import 'package:cake_wallet/store/contact_list_store.dart'; import 'package:cake_wallet/src/domain/common/contact.dart'; +import 'package:cake_wallet/utils/mobx.dart'; part 'contact_list_view_model.g.dart'; -class ContactListViewModel = ContactListViewModelBase with _$ContactListViewModel; +class ContactListViewModel = ContactListViewModelBase + with _$ContactListViewModel; abstract class ContactListViewModelBase with Store { - ContactListViewModelBase(this.addressBookStore, this.contactService); + ContactListViewModelBase( + this.addressBookStore, this.contactService, this.contactSource) { + _subscription = bindBox(contactSource, addressBookStore.contacts); + } final ContactListStore addressBookStore; final ContactService contactService; + final Box<Contact> contactSource; - @computed ObservableList<Contact> get contacts => addressBookStore.contacts; + StreamSubscription<BoxEvent> _subscription; + + void dispose() { + _subscription.cancel(); + } + Future<void> delete(Contact contact) async => contactService.delete(contact); -} \ No newline at end of file +} diff --git a/lib/view_model/contact_list/contact_view_model.dart b/lib/view_model/contact_list/contact_view_model.dart index addb56606..780f5ca66 100644 --- a/lib/view_model/contact_list/contact_view_model.dart +++ b/lib/view_model/contact_list/contact_view_model.dart @@ -1,3 +1,4 @@ +import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/core/wallet_base.dart'; import 'package:cake_wallet/core/contact_service.dart'; @@ -10,7 +11,7 @@ part 'contact_view_model.g.dart'; class ContactViewModel = ContactViewModelBase with _$ContactViewModel; abstract class ContactViewModelBase with Store { - ContactViewModelBase(this._contactService, this._wallet, {Contact contact}) + ContactViewModelBase(this._contacts, this._wallet, {Contact contact}) : state = InitialContactViewModelState(), currencies = CryptoCurrency.all, _contact = contact { @@ -33,12 +34,14 @@ abstract class ContactViewModelBase with Store { @computed bool get isReady => - (name?.isNotEmpty ?? false) && (currency?.toString()?.isNotEmpty ?? false) - && (address?.isNotEmpty ?? false); + (name?.isNotEmpty ?? false) && + (currency?.toString()?.isNotEmpty ?? false) && + (address?.isNotEmpty ?? false); final List<CryptoCurrency> currencies; - final ContactService _contactService; + // final ContactService _contactService; final WalletBase _wallet; + final Box<Contact> _contacts; final Contact _contact; @action @@ -57,10 +60,13 @@ abstract class ContactViewModelBase with Store { _contact.name = name; _contact.address = address; _contact.updateCryptoCurrency(currency: currency); - await _contactService.update(_contact); + await _contacts.put(_contact.key, _contact); + // await _contactService.update(_contact); } else { - await _contactService + await _contacts .add(Contact(name: name, address: address, type: currency)); + // await _contactService + // .add(Contact(name: name, address: address, type: currency)); } state = ContactSavingSuccessfully(); diff --git a/lib/view_model/node_list/node_list_view_model.dart b/lib/view_model/node_list/node_list_view_model.dart index 73f2b934e..4a68d23aa 100644 --- a/lib/view_model/node_list/node_list_view_model.dart +++ b/lib/view_model/node_list/node_list_view_model.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/utils/item_cell.dart'; import 'package:flutter/foundation.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; @@ -14,13 +15,6 @@ part 'node_list_view_model.g.dart'; class NodeListViewModel = NodeListViewModelBase with _$NodeListViewModel; -class ItemCell<Item> { - ItemCell(this.value, {@required this.isSelected}); - - final Item value; - final bool isSelected; -} - abstract class NodeListViewModelBase with Store { NodeListViewModelBase( this._nodeListStore, this._nodeSource, this._wallet, this._settingsStore) @@ -29,16 +23,16 @@ abstract class NodeListViewModelBase with Store { final values = _nodeListStore.nodes; nodes.clear(); nodes.addAll(values.where((Node node) => node.type == _wallet.type).map( - (Node val) => - ItemCell<Node>(val, isSelected: val.key == currentNode.key))); + (Node val) => ItemCell<Node>(val, + isSelected: val.key == currentNode.key, key: val.key))); connectDifferent( _nodeListStore.nodes, nodes, - (Node val) => - ItemCell<Node>(val, isSelected: val.key == currentNode.key), - filter: (Node val) { - return val.type == _wallet.type; - }); + (Node val) => ItemCell<Node>(val, + isSelected: val.key == currentNode.key, key: val.key), + filter: (Node val) => val.type == _wallet.type); + reaction((_) => _settingsStore.nodes[_wallet.type], + (Node _) => _updateCurrentNode()); } ObservableList<ItemCell<Node>> nodes; @@ -66,17 +60,18 @@ abstract class NodeListViewModelBase with Store { break; } - await _wallet.connectToNode(node: node); + await setAsCurrent(node); } Future<void> delete(Node node) async => _nodeSource.delete(node.key); Future<void> setAsCurrent(Node node) async { - await _wallet.connectToNode(node: node); await _settingsStore.setCurrentNode(node, _wallet.type); _updateCurrentNode(); + await _wallet.connectToNode(node: node); } + @action void _updateCurrentNode() { final currentNode = _settingsStore.getCurrentNode(_wallet.type); @@ -85,7 +80,8 @@ abstract class NodeListViewModelBase with Store { final isSelected = item.value.key == currentNode.key; if (item.isSelected != isSelected) { - nodes[i] = ItemCell<Node>(item.value, isSelected: isSelected); + nodes[i] = ItemCell<Node>(item.value, + isSelected: isSelected, key: item.keyIndex); } } } diff --git a/lib/view_model/settings/picker_list_item.dart b/lib/view_model/settings/picker_list_item.dart index 1dfc9c06d..13d502d7e 100644 --- a/lib/view_model/settings/picker_list_item.dart +++ b/lib/view_model/settings/picker_list_item.dart @@ -6,13 +6,15 @@ class PickerListItem<ItemType> extends SettingsListItem { {@required String title, @required this.selectedItem, @required this.items, - void Function(ItemType item) onItemSelected}) + void Function(ItemType item) onItemSelected, + this.isAlwaysShowScrollThumb = false}) : _onItemSelected = onItemSelected, super(title); final ItemType Function() selectedItem; final List<ItemType> items; final void Function(ItemType item) _onItemSelected; + final bool isAlwaysShowScrollThumb; void onItemSelected(dynamic item) { if (item is ItemType) { diff --git a/lib/view_model/settings/settings_view_model.dart b/lib/view_model/settings/settings_view_model.dart index 308026c9f..ab6e68a09 100644 --- a/lib/view_model/settings/settings_view_model.dart +++ b/lib/view_model/settings/settings_view_model.dart @@ -1,8 +1,10 @@ import 'package:cake_wallet/core/wallet_base.dart'; +import 'package:cake_wallet/src/domain/common/biometric_auth.dart'; import 'package:cake_wallet/src/domain/common/wallet_type.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/store/theme_changer_store.dart'; import 'package:cake_wallet/themes.dart'; +import 'package:cake_wallet/view_model/settings/version_list_item.dart'; import 'package:flutter/cupertino.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/routes.dart'; @@ -19,6 +21,7 @@ import 'package:cake_wallet/view_model/settings/picker_list_item.dart'; import 'package:cake_wallet/view_model/settings/regular_list_item.dart'; import 'package:cake_wallet/view_model/settings/settings_list_item.dart'; import 'package:cake_wallet/view_model/settings/switcher_list_item.dart'; +import 'package:package_info/package_info.dart'; part 'settings_view_model.g.dart'; @@ -27,7 +30,11 @@ class SettingsViewModel = SettingsViewModelBase with _$SettingsViewModel; abstract class SettingsViewModelBase with Store { SettingsViewModelBase(this._settingsStore, WalletBase wallet) : itemHeaders = {}, - _walletType = wallet.type { + _walletType = wallet.type, + _biometricAuth = BiometricAuth() { + currentVersion = ''; + PackageInfo.fromPlatform().then( + (PackageInfo packageInfo) => currentVersion = packageInfo.version); sections = [ [ PickerListItem( @@ -37,17 +44,22 @@ abstract class SettingsViewModelBase with Store { PickerListItem( title: S.current.settings_currency, items: FiatCurrency.all, - selectedItem: () => fiatCurrency), + isAlwaysShowScrollThumb: true, + selectedItem: () => fiatCurrency, + onItemSelected: (FiatCurrency currency) => + setFiatCurrency(currency)), PickerListItem( title: S.current.settings_fee_priority, items: _transactionPriorities(wallet.type), selectedItem: () => transactionPriority, + isAlwaysShowScrollThumb: true, onItemSelected: (TransactionPriority priority) => _settingsStore.transactionPriority = priority), SwitcherListItem( title: S.current.settings_save_recipient_address, value: () => shouldSaveRecipientAddress, - onValueChange: (bool value) => setShouldSaveRecipientAddress(value)) + onValueChange: (_, bool value) => + setShouldSaveRecipientAddress(value)) ], [ RegularListItem( @@ -72,12 +84,32 @@ abstract class SettingsViewModelBase with Store { SwitcherListItem( title: S.current.settings_allow_biometrical_authentication, value: () => allowBiometricalAuthentication, - onValueChange: (bool value) => - setAllowBiometricalAuthentication(value)), + onValueChange: (BuildContext context, bool value) { + if (value) { + Navigator.of(context).pushNamed(Routes.auth, arguments: + (bool isAuthenticatedSuccessfully, + AuthPageState auth) async { + if (isAuthenticatedSuccessfully) { + if (await _biometricAuth.canCheckBiometrics() && + await _biometricAuth.isAuthenticated()) { + setAllowBiometricalAuthentication( + isAuthenticatedSuccessfully); + } + } else { + setAllowBiometricalAuthentication( + isAuthenticatedSuccessfully); + } + + Navigator.of(context).pop(); + }); + } else { + setAllowBiometricalAuthentication(value); + } + }), SwitcherListItem( title: S.current.settings_dark_mode, value: () => _settingsStore.isDarkTheme, - onValueChange: (bool value) { + onValueChange: (_, bool value) { _settingsStore.isDarkTheme = value; getIt .get<ThemeChangerStore>() @@ -119,11 +151,20 @@ abstract class SettingsViewModelBase with Store { title: S.current.settings_terms_and_conditions, handler: (BuildContext context) => Navigator.of(context).pushNamed(Routes.disclaimer), + ), + RegularListItem( + title: S.current.faq, + handler: (BuildContext context) => + Navigator.pushNamed(context, Routes.faq), ) - ] + ], + [VersionListItem(title: currentVersion)] ]; } + @observable + String currentVersion; + @computed Node get node => _settingsStore.getCurrentNode(_walletType); @@ -151,10 +192,18 @@ abstract class SettingsViewModelBase with Store { _settingsStore.allowBiometricalAuthentication; final Map<String, String> itemHeaders; + List<List<SettingsListItem>> sections; final SettingsStore _settingsStore; final WalletType _walletType; - List<List<SettingsListItem>> sections; + final BiometricAuth _biometricAuth; + @action + void setBalanceDisplayMode(BalanceDisplayMode value) => + _settingsStore.balanceDisplayMode = value; + + @action + void setFiatCurrency(FiatCurrency value) => + _settingsStore.fiatCurrency = value; @action void setShouldSaveRecipientAddress(bool value) => _settingsStore.shouldSaveRecipientAddress = value; @@ -190,11 +239,6 @@ abstract class SettingsViewModelBase with Store { @action void _showTrades() => actionlistDisplayMode.add(ActionListDisplayMode.trades); -// -// @observable -// int defaultPinLength; -// bool isDarkTheme; - static List<TransactionPriority> _transactionPriorities(WalletType type) { switch (type) { case WalletType.monero: diff --git a/lib/view_model/settings/switcher_list_item.dart b/lib/view_model/settings/switcher_list_item.dart index cf181302d..f37126a51 100644 --- a/lib/view_model/settings/switcher_list_item.dart +++ b/lib/view_model/settings/switcher_list_item.dart @@ -1,13 +1,14 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:cake_wallet/view_model/settings/settings_list_item.dart'; class SwitcherListItem extends SettingsListItem { SwitcherListItem( {@required String title, - @required this.value, - @required this.onValueChange}) + @required this.value, + @required this.onValueChange}) : super(title); final bool Function() value; - final void Function(bool value) onValueChange; -} \ No newline at end of file + final void Function(BuildContext context, bool value) onValueChange; +} diff --git a/lib/view_model/settings/version_list_item.dart b/lib/view_model/settings/version_list_item.dart new file mode 100644 index 000000000..5d64e7023 --- /dev/null +++ b/lib/view_model/settings/version_list_item.dart @@ -0,0 +1,6 @@ +import 'package:flutter/foundation.dart'; +import 'package:cake_wallet/view_model/settings/settings_list_item.dart'; + +class VersionListItem extends SettingsListItem { + VersionListItem({@required String title}) : super(title); +} \ No newline at end of file diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart index 4f2e3662c..0b02bc08a 100644 --- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart @@ -67,7 +67,8 @@ abstract class WalletAddressListViewModelBase with Store { WalletType get type => _wallet.type; @computed - WalletAddressListItem get address => WalletAddressListItem(address: _wallet.address); + WalletAddressListItem get address => + WalletAddressListItem(address: _wallet.address); @computed PaymentURI get uri { @@ -100,15 +101,16 @@ abstract class WalletAddressListViewModelBase with Store { } if (wallet is BitcoinWallet) { - final bitcoinAddresses = wallet.addresses.map( - (addr) => WalletAddressListItem(name: addr.label, address: addr.address)); + final bitcoinAddresses = wallet.addresses.map((addr) => + WalletAddressListItem(name: addr.label, address: addr.address)); addressList.addAll(bitcoinAddresses); } return addressList; } - set address(WalletAddressListItem address) => _wallet.address = address.address; + set address(WalletAddressListItem address) => + _wallet.address = address.address; bool hasAccounts; diff --git a/lib/view_model/wallet_creation_vm.dart b/lib/view_model/wallet_creation_vm.dart index a105f388e..d1d79dd05 100644 --- a/lib/view_model/wallet_creation_vm.dart +++ b/lib/view_model/wallet_creation_vm.dart @@ -27,7 +27,7 @@ abstract class WalletCreationVMBase with Store { final bool isRecovery; - Box<WalletInfo> _walletInfoSource; + final Box<WalletInfo> _walletInfoSource; Future<void> create({dynamic options}) async { try { diff --git a/lib/view_model/wallet_restoration_from_keys_vm.dart b/lib/view_model/wallet_restoration_from_keys_vm.dart new file mode 100644 index 000000000..e0e0114c6 --- /dev/null +++ b/lib/view_model/wallet_restoration_from_keys_vm.dart @@ -0,0 +1,64 @@ +import 'package:flutter/foundation.dart'; +import 'package:hive/hive.dart'; +import 'package:mobx/mobx.dart'; +import 'package:cake_wallet/monero/monero_wallet_service.dart'; +import 'package:cake_wallet/bitcoin/bitcoin_wallet_creation_credentials.dart'; +import 'package:cake_wallet/core/generate_wallet_password.dart'; +import 'package:cake_wallet/core/wallet_creation_service.dart'; +import 'package:cake_wallet/core/wallet_credentials.dart'; +import 'package:cake_wallet/src/domain/common/wallet_type.dart'; +import 'package:cake_wallet/view_model/wallet_creation_vm.dart'; +import 'package:cake_wallet/src/domain/common/wallet_info.dart'; + +part 'wallet_restoration_from_keys_vm.g.dart'; + +class WalletRestorationFromKeysVM = WalletRestorationFromKeysVMBase + with _$WalletRestorationFromKeysVM; + +abstract class WalletRestorationFromKeysVMBase extends WalletCreationVM + with Store { + WalletRestorationFromKeysVMBase(this._walletCreationService, Box<WalletInfo> walletInfoSource, + {@required WalletType type, @required this.language}) + : super(walletInfoSource, type: type, isRecovery: true); + + @observable + int height; + + @observable + String viewKey; + + @observable + String spendKey; + + @observable + String wif; + + @observable + String address; + + bool get hasRestorationHeight => type == WalletType.monero; + + final String language; + final WalletCreationService _walletCreationService; + + @override + WalletCredentials getCredentials(dynamic options) { + final password = generateWalletPassword(type); + + switch (type) { + case WalletType.monero: + return MoneroRestoreWalletFromKeysCredentials( + name: name, password: password, language: language, address: address, + viewKey: viewKey, spendKey: spendKey, height: height); + case WalletType.bitcoin: + return BitcoinRestoreWalletFromWIFCredentials( + name: name, password: password, wif: wif); + default: + return null; + } + } + + @override + Future<void> process(WalletCredentials credentials) async => + _walletCreationService.restoreFromKeys(credentials); +} diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 68095ca01..219e17320 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Beschreibung zur Wiederherstellung der Brieftasche", "restore_new_seed" : "Neuer Seed", "restore_active_seed" : "Aktives Seed", + "restore_bitcoin_description_from_seed" : "Stellen Sie Ihre Brieftasche aus dem 12-Wort-Kombinationscode wieder her", + "restore_bitcoin_description_from_keys" : "Stellen Sie Ihre Brieftasche aus der generierten WIF-Zeichenfolge aus Ihren privaten Schlüsseln wieder her", + "restore_bitcoin_title_from_keys" : "Aus WIF wiederherstellen", "seed_title" : "Seed", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 277ce28ba..c001cbb8a 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -1,7 +1,7 @@ { "welcome" : "Welcome to", "cake_wallet" : "Cake Wallet", - "first_wallet_text" : "Awesome wallet for Monero", + "first_wallet_text" : "Awesome wallet for Monero and Bitcoin", "please_make_selection" : "Please make selection below to create or recover your wallet.", "create_new" : "Create New Wallet", "restore_wallet" : "Restore Wallet", @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Wallet restore description", "restore_new_seed" : "New seed", "restore_active_seed" : "Active seed", + "restore_bitcoin_description_from_seed" : "Restore your wallet from 12 word combination code", + "restore_bitcoin_description_from_keys" : "Restore your wallet from generated WIF string from your private keys", + "restore_bitcoin_title_from_keys" : "Restore from WIF", "seed_title" : "Seed", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index f6cc257f6..f01e9002b 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Restaurar billetera", "restore_new_seed" : "Nueva semilla", "restore_active_seed" : "Semilla activa", + "restore_bitcoin_description_from_seed" : "Restaure su billetera a partir del código de combinación de 12 palabras", + "restore_bitcoin_description_from_keys" : "Restaure su billetera a partir de una cadena WIF generada a partir de sus claves privadas", + "restore_bitcoin_title_from_keys" : "Restaurar desde WIF", "seed_title" : "Semilla", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 9e0e1a032..7b0d95adf 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "बटुआ विवरण पुनर्स्थापित करें", "restore_new_seed" : "नया बीज", "restore_active_seed" : "सक्रिय बीज", + "restore_bitcoin_description_from_seed" : "12 शब्द संयोजन कोड से अपने वॉलेट को पुनर्स्थापित करें", + "restore_bitcoin_description_from_keys" : "अपने निजी कुंजी से उत्पन्न WIF स्ट्रिंग से अपने वॉलेट को पुनर्स्थापित करें", + "restore_bitcoin_title_from_keys" : "WIF से पुनर्स्थापित करें", "seed_title" : "बीज", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index a1822f806..000475bd8 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "ウォレットの復元", "restore_new_seed" : "新しい種", "restore_active_seed" : "アクティブシード", + "restore_bitcoin_description_from_seed" : "12ワードの組み合わせコードからウォレットを復元する", + "restore_bitcoin_description_from_keys" : "秘密鍵から生成されたWIF文字列からウォレットを復元します", + "restore_bitcoin_title_from_keys" : "WIFから復元", "seed_title" : "シード", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 31d7f6cfd..c33dded12 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "월렛 복원 설명", "restore_new_seed" : "새로운 씨앗", "restore_active_seed" : "활성 종자", + "restore_bitcoin_description_from_seed" : "12 단어 조합 코드에서 지갑 복원", + "restore_bitcoin_description_from_keys" : "개인 키에서 생성 된 WIF 문자열에서 지갑 복원", + "restore_bitcoin_title_from_keys" : "WIF에서 복원", "seed_title" : "씨", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 542be0271..2fc68aef3 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Portemonnee-herstelbeschrijving", "restore_new_seed" : "Nieuw zaad", "restore_active_seed" : "Actief zaad", + "restore_bitcoin_description_from_seed" : "Herstel uw portemonnee met een combinatiecode van 12 woorden", + "restore_bitcoin_description_from_keys" : "Herstel uw portemonnee van de gegenereerde WIF-string van uw privésleutels", + "restore_bitcoin_title_from_keys" : "Herstel van WIF", "seed_title" : "Zaad", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index da2bd6f2e..5970fadb8 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Opis przywracania portfela", "restore_new_seed" : "Nowe nasienie", "restore_active_seed" : "Aktywne nasiona", + "restore_bitcoin_description_from_seed" : "Przywróć swój portfel z kodu złożonego z 12 słów", + "restore_bitcoin_description_from_keys" : "Przywróć swój portfel z wygenerowanego ciągu WIF z kluczy prywatnych", + "restore_bitcoin_title_from_keys" : "Przywróć z WIF", "seed_title" : "Ziarno", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 7f4df2a4a..f085280bf 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Restauração da carteira", "restore_new_seed" : "Nova semente", "restore_active_seed" : "Semente ativa", + "restore_bitcoin_description_from_seed" : "Restaure sua carteira a partir de um código de combinação de 12 palavras", + "restore_bitcoin_description_from_keys" : "Restaure sua carteira a partir da string WIF gerada de suas chaves privadas", + "restore_bitcoin_title_from_keys" : "Restaurar de WIF", "seed_title" : "Semente", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index b5f82e379..68c1453b3 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Описание восстановления кошелька", "restore_new_seed" : "Новая мнемоническая фраза", "restore_active_seed" : "Активная мнемоническая фраза", + "restore_bitcoin_description_from_seed" : "Вы можете восстановить кошелёк используя 12-ти значную мнемоническую фразу", + "restore_bitcoin_description_from_keys" : "Вы можете восстановить кошелёк с помощью WIF", + "restore_bitcoin_title_from_keys" : "Восстановить с помощью WIF", "seed_title" : "Мнемоническая фраза", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index bcfc96688..2cf2119b2 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "Опис відновлюваного гаманця", "restore_new_seed" : "Нова мнемонічна фраза", "restore_active_seed" : "Активна мнемонічна фраза", + "restore_bitcoin_description_from_seed" : "Ви можете відновити гаманець використовуючи 12-ти слівну мнемонічну фразу", + "restore_bitcoin_description_from_keys" : "Ви можете відновити гаманець за допомогою WIF", + "restore_bitcoin_title_from_keys" : "Відновити за допомогою WIF", "seed_title" : "Мнемонічна фраза", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 0f5794a10..8fcce5de1 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -165,6 +165,9 @@ "restore_wallet_restore_description" : "钱包还原说明", "restore_new_seed" : "新種子", "restore_active_seed" : "活性種子", + "restore_bitcoin_description_from_seed" : "從12個單詞的組合碼恢復您的錢包", + "restore_bitcoin_description_from_keys" : "從私鑰中生成的WIF字符串還原您的錢包", + "restore_bitcoin_title_from_keys" : "從WIF還原", "seed_title" : "种子",