mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 03:29:36 +00:00
Mweb enhancements (#1715)
* node peer enhancement, delay mweb address generation, increase logging * prevent unnecessary sync status changes if we can't connect to the ltc node * handle potential errors * set nodeUri to null for testing * [skip ci] redo good changes * [skip ci] draft * [skip ci] minor * [skip ci] cleanup * [skip ci] minor * [skip ci] minor * [skip ci] localization * [skip ci] save * [skip ci] wip * use proxy layer * ui * minor changes Add ToDos for later * fixes * [skip ci] minor * [skip ci] minor * [skip ci] ui * handle case where there are no addresses with txcount > 0 * comment out pegin button --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
This commit is contained in:
parent
382a0ff35d
commit
37b822b7f5
46 changed files with 853 additions and 421 deletions
|
@ -100,10 +100,12 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
|||
static const gap = 20;
|
||||
|
||||
final ObservableList<BitcoinAddressRecord> _addresses;
|
||||
late ObservableList<BaseBitcoinAddressRecord> addressesByReceiveType;
|
||||
final ObservableList<BaseBitcoinAddressRecord> addressesByReceiveType;
|
||||
final ObservableList<BitcoinAddressRecord> receiveAddresses;
|
||||
final ObservableList<BitcoinAddressRecord> changeAddresses;
|
||||
// TODO: add this variable in `bitcoin_wallet_addresses` and just add a cast in cw_bitcoin to use it
|
||||
final ObservableList<BitcoinSilentPaymentAddressRecord> silentAddresses;
|
||||
// TODO: add this variable in `litecoin_wallet_addresses` and just add a cast in cw_bitcoin to use it
|
||||
final ObservableList<BitcoinAddressRecord> mwebAddresses;
|
||||
final BasedUtxoNetwork network;
|
||||
final Bip32Slip10Secp256k1 mainHd;
|
||||
|
|
|
@ -236,16 +236,18 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
|
|||
Future<void> waitForMwebAddresses() async {
|
||||
// ensure that we have the full 1000 mweb addresses generated before continuing:
|
||||
// should no longer be needed, but leaving here just in case
|
||||
final mwebAddrs = (walletAddresses as LitecoinWalletAddresses).mwebAddrs;
|
||||
while (mwebAddrs.length < 1000) {
|
||||
print("waiting for mweb addresses to finish generating...");
|
||||
await Future.delayed(const Duration(milliseconds: 1000));
|
||||
}
|
||||
// final mwebAddrs = (walletAddresses as LitecoinWalletAddresses).mwebAddrs;
|
||||
// while (mwebAddrs.length < 1000) {
|
||||
// print("waiting for mweb addresses to finish generating...");
|
||||
// await Future.delayed(const Duration(milliseconds: 1000));
|
||||
// }
|
||||
await (walletAddresses as LitecoinWalletAddresses).ensureMwebAddressUpToIndexExists(1020);
|
||||
}
|
||||
|
||||
@action
|
||||
@override
|
||||
Future<void> startSync() async {
|
||||
print("startSync() called!");
|
||||
if (syncStatus is SyncronizingSyncStatus) {
|
||||
return;
|
||||
}
|
||||
|
@ -289,46 +291,59 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
|
|||
_syncTimer = Timer.periodic(const Duration(milliseconds: 1500), (timer) async {
|
||||
if (syncStatus is FailedSyncStatus) return;
|
||||
|
||||
print("SYNCING....");
|
||||
|
||||
final nodeHeight =
|
||||
await electrumClient.getCurrentBlockChainTip() ?? 0; // current block height of our node
|
||||
final resp = await CwMweb.status(StatusRequest());
|
||||
print("resp.mwebUtxosHeight: ${resp.mwebUtxosHeight}");
|
||||
print("resp.mwebHeaderHeight: ${resp.mwebHeaderHeight}");
|
||||
print("resp.blockHeaderHeight: ${resp.blockHeaderHeight}");
|
||||
|
||||
if (resp.blockHeaderHeight < nodeHeight) {
|
||||
int h = resp.blockHeaderHeight;
|
||||
syncStatus = SyncingSyncStatus(nodeHeight - h, h / nodeHeight);
|
||||
} else if (resp.mwebHeaderHeight < nodeHeight) {
|
||||
int h = resp.mwebHeaderHeight;
|
||||
syncStatus = SyncingSyncStatus(nodeHeight - h, h / nodeHeight);
|
||||
} else if (resp.mwebUtxosHeight < nodeHeight) {
|
||||
syncStatus = SyncingSyncStatus(1, 0.999);
|
||||
} else {
|
||||
if (resp.mwebUtxosHeight > walletInfo.restoreHeight) {
|
||||
await walletInfo.updateRestoreHeight(resp.mwebUtxosHeight);
|
||||
await checkMwebUtxosSpent();
|
||||
// update the confirmations for each transaction:
|
||||
for (final transaction in transactionHistory.transactions.values) {
|
||||
if (transaction.isPending) continue;
|
||||
int txHeight = transaction.height ?? resp.mwebUtxosHeight;
|
||||
final confirmations = (resp.mwebUtxosHeight - txHeight) + 1;
|
||||
if (transaction.confirmations == confirmations) continue;
|
||||
transaction.confirmations = confirmations;
|
||||
transactionHistory.addOne(transaction);
|
||||
}
|
||||
await transactionHistory.save();
|
||||
}
|
||||
|
||||
// prevent unnecessary reaction triggers:
|
||||
if (syncStatus is! SyncedSyncStatus) {
|
||||
// mwebd is synced, but we could still be processing incoming utxos:
|
||||
if (!processingUtxos) {
|
||||
syncStatus = SyncedSyncStatus();
|
||||
}
|
||||
if (nodeHeight == 0) {
|
||||
// we aren't connected to the ltc node yet
|
||||
if (syncStatus is! NotConnectedSyncStatus) {
|
||||
syncStatus = FailedSyncStatus(error: "Failed to connect to Litecoin node");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
final resp = await CwMweb.status(StatusRequest());
|
||||
|
||||
try {
|
||||
if (resp.blockHeaderHeight < nodeHeight) {
|
||||
int h = resp.blockHeaderHeight;
|
||||
syncStatus = SyncingSyncStatus(nodeHeight - h, h / nodeHeight);
|
||||
} else if (resp.mwebHeaderHeight < nodeHeight) {
|
||||
int h = resp.mwebHeaderHeight;
|
||||
syncStatus = SyncingSyncStatus(nodeHeight - h, h / nodeHeight);
|
||||
} else if (resp.mwebUtxosHeight < nodeHeight) {
|
||||
syncStatus = SyncingSyncStatus(1, 0.999);
|
||||
} else {
|
||||
if (resp.mwebUtxosHeight > walletInfo.restoreHeight) {
|
||||
await walletInfo.updateRestoreHeight(resp.mwebUtxosHeight);
|
||||
await checkMwebUtxosSpent();
|
||||
// update the confirmations for each transaction:
|
||||
for (final transaction in transactionHistory.transactions.values) {
|
||||
if (transaction.isPending) continue;
|
||||
int txHeight = transaction.height ?? resp.mwebUtxosHeight;
|
||||
final confirmations = (resp.mwebUtxosHeight - txHeight) + 1;
|
||||
if (transaction.confirmations == confirmations) continue;
|
||||
transaction.confirmations = confirmations;
|
||||
transactionHistory.addOne(transaction);
|
||||
}
|
||||
await transactionHistory.save();
|
||||
}
|
||||
|
||||
// prevent unnecessary reaction triggers:
|
||||
if (syncStatus is! SyncedSyncStatus) {
|
||||
// mwebd is synced, but we could still be processing incoming utxos:
|
||||
if (!processingUtxos) {
|
||||
syncStatus = SyncedSyncStatus();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
print("error syncing: $e");
|
||||
syncStatus = FailedSyncStatus(error: e.toString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -411,6 +426,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
|
|||
}
|
||||
|
||||
Future<void> handleIncoming(MwebUtxo utxo, RpcClient stub) async {
|
||||
print("handleIncoming() called!");
|
||||
final status = await stub.status(StatusRequest());
|
||||
var date = DateTime.now();
|
||||
var confirmations = 0;
|
||||
|
|
|
@ -70,13 +70,9 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
|
|||
await Future.delayed(Duration(milliseconds: 100));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> initMwebAddresses() async {
|
||||
if (mwebAddrs.length < 1000) {
|
||||
print("Generating MWEB addresses...");
|
||||
await ensureMwebAddressUpToIndexExists(1020);
|
||||
print("done generating MWEB addresses");
|
||||
// ensure mweb addresses are up to date:
|
||||
if (mwebAddresses.length < mwebAddrs.length) {
|
||||
List<BitcoinAddressRecord> addressRecords = mwebAddrs
|
||||
.asMap()
|
||||
.entries
|
||||
|
@ -88,7 +84,27 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
|
|||
))
|
||||
.toList();
|
||||
addMwebAddresses(addressRecords);
|
||||
print("added ${addressRecords.length} mweb addresses");
|
||||
print("set ${addressRecords.length} mweb addresses");
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> initMwebAddresses() async {
|
||||
if (mwebAddrs.length < 1000) {
|
||||
print("Generating MWEB addresses...");
|
||||
await ensureMwebAddressUpToIndexExists(20);
|
||||
print("done generating MWEB addresses");
|
||||
// List<BitcoinAddressRecord> addressRecords = mwebAddrs
|
||||
// .asMap()
|
||||
// .entries
|
||||
// .map((e) => BitcoinAddressRecord(
|
||||
// e.value,
|
||||
// index: e.key,
|
||||
// type: SegwitAddresType.mweb,
|
||||
// network: network,
|
||||
// ))
|
||||
// .toList();
|
||||
// addMwebAddresses(addressRecords);
|
||||
// print("added ${addressRecords.length} mweb addresses");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,7 +67,13 @@ class AttemptingScanSyncStatus extends SyncStatus {
|
|||
double progress() => 0.0;
|
||||
}
|
||||
|
||||
class FailedSyncStatus extends NotConnectedSyncStatus {}
|
||||
class FailedSyncStatus extends NotConnectedSyncStatus {
|
||||
String? error;
|
||||
FailedSyncStatus({this.error});
|
||||
|
||||
@override
|
||||
String toString() => error ?? super.toString();
|
||||
}
|
||||
|
||||
class ConnectingSyncStatus extends SyncStatus {
|
||||
@override
|
||||
|
@ -89,4 +95,4 @@ class TimedOutSyncStatus extends NotConnectedSyncStatus {
|
|||
class LostConnectionSyncStatus extends NotConnectedSyncStatus {
|
||||
@override
|
||||
String toString() => 'Reconnecting';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@ class CwMwebPlugin: FlutterPlugin, MethodCallHandler {
|
|||
if (call.method == "start") {
|
||||
server?.stop()
|
||||
val dataDir = call.argument("dataDir") ?: ""
|
||||
server = server ?: Mwebd.newServer("", dataDir, "")
|
||||
val nodeUri = call.argument("nodeUri") ?: ""
|
||||
server = server ?: Mwebd.newServer("", dataDir, nodeUri)
|
||||
port = server?.start(0)
|
||||
result.success(port)
|
||||
} else if (call.method == "stop") {
|
||||
|
|
|
@ -12,6 +12,7 @@ public static func register(with registrar: FlutterPluginRegistrar) {
|
|||
private static var server: MwebdServer?
|
||||
private static var port: Int = 0
|
||||
private static var dataDir: String?
|
||||
private static var nodeUri: String?
|
||||
|
||||
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
||||
switch call.method {
|
||||
|
@ -22,7 +23,9 @@ public static func register(with registrar: FlutterPluginRegistrar) {
|
|||
stopServer()
|
||||
let args = call.arguments as? [String: String]
|
||||
let dataDir = args?["dataDir"]
|
||||
let nodeUri = args?["nodeUri"]
|
||||
CwMwebPlugin.dataDir = dataDir
|
||||
CwMwebPlugin.nodeUri = nodeUri
|
||||
startServer(result: result)
|
||||
break
|
||||
case "stop":
|
||||
|
@ -48,7 +51,7 @@ public static func register(with registrar: FlutterPluginRegistrar) {
|
|||
private func startServer(result: @escaping FlutterResult) {
|
||||
if CwMwebPlugin.server == nil {
|
||||
var error: NSError?
|
||||
CwMwebPlugin.server = MwebdNewServer("", CwMwebPlugin.dataDir, "", &error)
|
||||
CwMwebPlugin.server = MwebdNewServer("", CwMwebPlugin.dataDir, CwMwebPlugin.nodeUri, &error)
|
||||
|
||||
if let server = CwMwebPlugin.server {
|
||||
do {
|
||||
|
|
|
@ -17,7 +17,8 @@ class CwMweb {
|
|||
await Future.delayed(const Duration(seconds: 5));
|
||||
|
||||
final appDir = await getApplicationSupportDirectory();
|
||||
_port = await CwMwebPlatform.instance.start(appDir.path);
|
||||
const ltcNodeUri = "45.79.13.180:9333";
|
||||
_port = await CwMwebPlatform.instance.start(appDir.path, ltcNodeUri);
|
||||
if (_port == null || _port == 0) {
|
||||
throw Exception("Failed to start server");
|
||||
}
|
||||
|
|
|
@ -10,8 +10,9 @@ class MethodChannelCwMweb extends CwMwebPlatform {
|
|||
final methodChannel = const MethodChannel('cw_mweb');
|
||||
|
||||
@override
|
||||
Future<int?> start(String dataDir) async {
|
||||
final result = await methodChannel.invokeMethod<int>('start', {'dataDir': dataDir});
|
||||
Future<int?> start(String dataDir, String nodeUri) async {
|
||||
final result =
|
||||
await methodChannel.invokeMethod<int>('start', {'dataDir': dataDir, 'nodeUri': nodeUri});
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ abstract class CwMwebPlatform extends PlatformInterface {
|
|||
_instance = instance;
|
||||
}
|
||||
|
||||
Future<int?> start(String dataDir) {
|
||||
Future<int?> start(String dataDir, String nodeUri) {
|
||||
throw UnimplementedError('start() has not been implemented.');
|
||||
}
|
||||
|
||||
|
|
|
@ -654,4 +654,15 @@ class CWBitcoin extends Bitcoin {
|
|||
// TODO: this could be improved:
|
||||
return inputAddressesContainMweb || outputAddressesContainMweb;
|
||||
}
|
||||
|
||||
String? getUnusedMwebAddress(Object wallet) {
|
||||
try {
|
||||
final electrumWallet = wallet as ElectrumWallet;
|
||||
final walletAddresses = electrumWallet.walletAddresses as ElectrumWalletAddresses;
|
||||
final mwebAddress = walletAddresses.mwebAddresses.firstWhere((element) => !element.isUsed);
|
||||
return mwebAddress.address;
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,13 @@ String syncStatusTitle(SyncStatus syncStatus) {
|
|||
return S.current.sync_status_syncronized;
|
||||
}
|
||||
|
||||
if (syncStatus is FailedSyncStatus) {
|
||||
if (syncStatus.error != null) {
|
||||
return syncStatus.error!;
|
||||
}
|
||||
return S.current.sync_status_failed_connect;
|
||||
}
|
||||
|
||||
if (syncStatus is NotConnectedSyncStatus) {
|
||||
return S.current.sync_status_not_connected;
|
||||
}
|
||||
|
@ -24,10 +31,6 @@ String syncStatusTitle(SyncStatus syncStatus) {
|
|||
return S.current.sync_status_attempting_sync;
|
||||
}
|
||||
|
||||
if (syncStatus is FailedSyncStatus) {
|
||||
return S.current.sync_status_failed_connect;
|
||||
}
|
||||
|
||||
if (syncStatus is ConnectingSyncStatus) {
|
||||
return S.current.sync_status_connecting;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:cake_wallet/generated/i18n.dart';
|
|||
import 'package:cake_wallet/reactions/wallet_connect.dart';
|
||||
import 'package:cake_wallet/routes.dart';
|
||||
import 'package:cake_wallet/src/screens/dashboard/pages/nft_listing_page.dart';
|
||||
import 'package:cake_wallet/src/screens/dashboard/widgets/action_button.dart';
|
||||
import 'package:cake_wallet/src/screens/dashboard/widgets/home_screen_account_widget.dart';
|
||||
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
|
||||
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
|
||||
|
@ -19,14 +20,14 @@ import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
|
|||
import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
|
||||
import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
|
||||
import 'package:cake_wallet/utils/feature_flag.dart';
|
||||
import 'package:cake_wallet/utils/payment_request.dart';
|
||||
import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_receive_page_option.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class BalancePage extends StatelessWidget {
|
||||
|
@ -238,8 +239,8 @@ class CryptoBalanceWidget extends StatelessWidget {
|
|||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
|
||||
child: DashBoardRoundedCardWidget(
|
||||
title: S.current.rep_warning,
|
||||
subTitle: S.current.rep_warning_sub,
|
||||
title: S.of(context).rep_warning,
|
||||
subTitle: S.of(context).rep_warning_sub,
|
||||
onTap: () => Navigator.of(context).pushNamed(Routes.changeRep),
|
||||
onClose: () {
|
||||
dashboardViewModel.settingsStore.shouldShowRepWarning = false;
|
||||
|
@ -259,6 +260,7 @@ class CryptoBalanceWidget extends StatelessWidget {
|
|||
dashboardViewModel.balanceViewModel.formattedBalances.elementAt(index);
|
||||
return Observer(builder: (_) {
|
||||
return BalanceRowWidget(
|
||||
dashboardViewModel: dashboardViewModel,
|
||||
availableBalanceLabel:
|
||||
'${dashboardViewModel.balanceViewModel.availableBalanceLabel}',
|
||||
availableBalance: balance.availableBalance,
|
||||
|
@ -379,57 +381,68 @@ class CryptoBalanceWidget extends StatelessWidget {
|
|||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
|
||||
child: DashBoardRoundedCardWidget(
|
||||
customBorder: 30,
|
||||
title: S.current.litecoin_mweb,
|
||||
subTitle: S.current.litecoin_enable_mweb_sync,
|
||||
title: S.of(context).litecoin_mweb,
|
||||
subTitle: '',
|
||||
hint: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
Uri.parse(
|
||||
"https://guides.cakewallet.com/docs/cryptos/litecoin/#mweb"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
Text(
|
||||
S.of(context).litecoin_mweb_description,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 14,
|
||||
),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
Uri.parse(
|
||||
"https://guides.cakewallet.com/docs/cryptos/litecoin/#mweb"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
S.of(context).learn_more,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Text(
|
||||
S.current.litecoin_what_is_mweb,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
softWrap: true,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.help_outline,
|
||||
size: 16,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor),
|
||||
)
|
||||
],
|
||||
softWrap: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 24),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
ElevatedButton(
|
||||
onPressed: () => _dismissMweb(context),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Theme.of(context).primaryColor,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(50),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
S.of(context).litecoin_mweb_dismiss,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
),
|
||||
Observer(
|
||||
builder: (_) => StandardSwitch(
|
||||
value: dashboardViewModel.mwebScanningActive,
|
||||
onTaped: () => _toggleMweb(context),
|
||||
),
|
||||
)
|
||||
ElevatedButton(
|
||||
onPressed: () => _enableMweb(context),
|
||||
child: Text(S.of(context).litecoin_enable_mweb_sync),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
onTap: () => _toggleMweb(context),
|
||||
onTap: () => {},
|
||||
icon: ImageIcon(
|
||||
AssetImage('assets/images/mweb_logo.png'),
|
||||
color:
|
||||
|
@ -479,20 +492,34 @@ class CryptoBalanceWidget extends StatelessWidget {
|
|||
return dashboardViewModel.setSilentPaymentsScanning(newValue);
|
||||
}
|
||||
|
||||
Future<void> _toggleMweb(BuildContext context) async {
|
||||
Future<void> _enableMweb(BuildContext context) async {
|
||||
if (!dashboardViewModel.hasEnabledMwebBefore) {
|
||||
await showPopUp<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => AlertWithOneAction(
|
||||
alertTitle: S.of(context).warning,
|
||||
alertContent: S.current.litecoin_mweb_warning,
|
||||
buttonText: S.of(context).ok,
|
||||
alertTitle: S.of(context).alert_notice,
|
||||
alertContent: S.of(context).litecoin_mweb_warning,
|
||||
buttonText: S.of(context).understand,
|
||||
buttonAction: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
));
|
||||
}
|
||||
dashboardViewModel.setMwebScanningActive(!dashboardViewModel.mwebScanningActive);
|
||||
dashboardViewModel.setMwebScanningActive();
|
||||
}
|
||||
|
||||
Future<void> _dismissMweb(BuildContext context) async {
|
||||
await showPopUp<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => AlertWithOneAction(
|
||||
alertTitle: S.of(context).alert_notice,
|
||||
alertContent: S.of(context).litecoin_mweb_enable_later,
|
||||
buttonText: S.of(context).understand,
|
||||
buttonAction: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
));
|
||||
dashboardViewModel.dismissMweb();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -517,6 +544,7 @@ class BalanceRowWidget extends StatelessWidget {
|
|||
required this.hasSecondAvailableBalance,
|
||||
required this.hasSecondAdditionalBalance,
|
||||
required this.isTestnet,
|
||||
required this.dashboardViewModel,
|
||||
super.key,
|
||||
});
|
||||
|
||||
|
@ -539,187 +567,238 @@ class BalanceRowWidget extends StatelessWidget {
|
|||
final bool hasSecondAvailableBalance;
|
||||
final bool hasSecondAdditionalBalance;
|
||||
final bool isTestnet;
|
||||
final DashboardViewModel dashboardViewModel;
|
||||
|
||||
// void _showBalanceDescription(BuildContext context) {
|
||||
// showPopUp<void>(
|
||||
// context: context,
|
||||
// builder: (_) =>
|
||||
// InformationPage(information: S.current.available_balance_description),
|
||||
// InformationPage(information: S.of(context).available_balance_description),
|
||||
// );
|
||||
// }
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: const EdgeInsets.only(left: 16, right: 16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
border: Border.all(
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.cardBorderColor,
|
||||
width: 1,
|
||||
return Column(children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(left: 16, right: 16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
border: Border.all(
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.cardBorderColor,
|
||||
width: 1,
|
||||
),
|
||||
color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
|
||||
),
|
||||
color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
|
||||
),
|
||||
child: Container(
|
||||
margin: const EdgeInsets.only(top: 16, left: 24, right: 8, bottom: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
child: Container(
|
||||
margin: const EdgeInsets.only(top: 16, left: 24, right: 8, bottom: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: hasAdditionalBalance
|
||||
? () => _showBalanceDescription(
|
||||
context, S.of(context).available_balance_description)
|
||||
: null,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Semantics(
|
||||
hint: 'Double tap to see more information',
|
||||
container: true,
|
||||
child: Text('${availableBalanceLabel}',
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor,
|
||||
height: 1)),
|
||||
),
|
||||
if (hasAdditionalBalance)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.help_outline,
|
||||
size: 16,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 6),
|
||||
AutoSizeText(availableBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 24,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w900,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.balanceAmountColor,
|
||||
height: 1),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.start),
|
||||
SizedBox(height: 6),
|
||||
if (isTestnet)
|
||||
Text(S.of(context).testnet_coins_no_value,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1)),
|
||||
if (!isTestnet)
|
||||
Text('${availableFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1)),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: min(MediaQuery.of(context).size.width * 0.2, 100),
|
||||
child: Center(
|
||||
child: Column(
|
||||
children: [
|
||||
CakeImageWidget(
|
||||
imageUrl: currency.iconPath,
|
||||
height: 40,
|
||||
width: 40,
|
||||
displayOnError: Container(
|
||||
height: 30.0,
|
||||
width: 30.0,
|
||||
child: Center(
|
||||
child: Text(
|
||||
currency.title.substring(0, min(currency.title.length, 2)),
|
||||
style: TextStyle(fontSize: 11),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
currency.title,
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w800,
|
||||
color:
|
||||
Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (frozenBalance.isNotEmpty)
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: hasAdditionalBalance
|
||||
? () =>
|
||||
_showBalanceDescription(context, S.current.available_balance_description)
|
||||
? () => _showBalanceDescription(
|
||||
context, S.of(context).unavailable_balance_description)
|
||||
: null,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 26),
|
||||
Row(
|
||||
children: [
|
||||
Semantics(
|
||||
hint: 'Double tap to see more information',
|
||||
container: true,
|
||||
child: Text('${availableBalanceLabel}',
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor,
|
||||
height: 1)),
|
||||
),
|
||||
if (hasAdditionalBalance)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.help_outline,
|
||||
size: 16,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor),
|
||||
Text(
|
||||
S.of(context).unavailable_balance,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.help_outline,
|
||||
size: 16,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 6),
|
||||
AutoSizeText(availableBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 24,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w900,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.balanceAmountColor,
|
||||
height: 1),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.start),
|
||||
SizedBox(height: 6),
|
||||
if (isTestnet)
|
||||
Text(S.current.testnet_coins_no_value,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1)),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
frozenBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
Theme.of(context).extension<BalancePageTheme>()!.balanceAmountColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text('${availableFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1)),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: min(MediaQuery.of(context).size.width * 0.2, 100),
|
||||
child: Center(
|
||||
child: Column(
|
||||
children: [
|
||||
CakeImageWidget(
|
||||
imageUrl: currency.iconPath,
|
||||
height: 40,
|
||||
width: 40,
|
||||
displayOnError: Container(
|
||||
height: 30.0,
|
||||
width: 30.0,
|
||||
child: Center(
|
||||
child: Text(
|
||||
currency.title.substring(0, min(currency.title.length, 2)),
|
||||
style: TextStyle(fontSize: 11),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
currency.title,
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w800,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (frozenBalance.isNotEmpty)
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: hasAdditionalBalance
|
||||
? () =>
|
||||
_showBalanceDescription(context, S.current.unavailable_balance_description)
|
||||
: null,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 26),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
S.current.unavailable_balance,
|
||||
frozenFiatBalance,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.help_outline,
|
||||
size: 16,
|
||||
color:
|
||||
Theme.of(context).extension<BalancePageTheme>()!.labelTextColor),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
if (hasAdditionalBalance)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'${additionalBalanceLabel}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
frozenBalance,
|
||||
additionalBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.balanceAmountColor,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
|
@ -728,7 +807,7 @@ class BalanceRowWidget extends StatelessWidget {
|
|||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text(
|
||||
frozenFiatBalance,
|
||||
'${additionalFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
|
@ -740,143 +819,247 @@ class BalanceRowWidget extends StatelessWidget {
|
|||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
if (hasAdditionalBalance)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'${additionalBalanceLabel}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
additionalBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text(
|
||||
'${additionalFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (hasSecondAvailableBalance)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'${secondAvailableBalanceLabel}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
secondAvailableBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text(
|
||||
'${secondAvailableFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (hasSecondAdditionalBalance)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'${secondAdditionalBalanceLabel}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
secondAdditionalBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text(
|
||||
'${secondAdditionalFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
if (hasSecondAdditionalBalance || hasSecondAvailableBalance) ...[
|
||||
SizedBox(height: 16),
|
||||
Container(
|
||||
margin: const EdgeInsets.only(left: 16, right: 16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
border: Border.all(
|
||||
color: Theme.of(context).extension<BalancePageTheme>()!.cardBorderColor,
|
||||
width: 1,
|
||||
),
|
||||
color: Theme.of(context).extension<SyncIndicatorTheme>()!.syncedBackgroundColor,
|
||||
),
|
||||
child: Container(
|
||||
margin: const EdgeInsets.only(top: 0, left: 24, right: 8, bottom: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
if (currency == CryptoCurrency.ltc)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Container(
|
||||
padding: EdgeInsets.only(right: 16, top: 16),
|
||||
child: Column(
|
||||
children: [
|
||||
CakeImageWidget(
|
||||
imageUrl: 'assets/images/mweb_logo.png',
|
||||
height: 40,
|
||||
width: 40,
|
||||
displayOnError: Container(
|
||||
height: 30.0,
|
||||
width: 30.0,
|
||||
child: Center(
|
||||
child: Text(
|
||||
currency.title.substring(0, min(currency.title.length, 2)),
|
||||
style: TextStyle(fontSize: 11),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.grey.shade400,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(
|
||||
'MWEB',
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w800,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (hasSecondAvailableBalance)
|
||||
Row(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'${secondAvailableBalanceLabel}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
secondAvailableBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text(
|
||||
'${secondAvailableFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Stack(
|
||||
children: [
|
||||
if (hasSecondAdditionalBalance)
|
||||
Row(
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: 24),
|
||||
Text(
|
||||
'${secondAdditionalBalanceLabel}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8),
|
||||
AutoSizeText(
|
||||
secondAdditionalBalance,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.assetTitleColor,
|
||||
height: 1,
|
||||
),
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
SizedBox(height: 4),
|
||||
if (!isTestnet)
|
||||
Text(
|
||||
'${secondAdditionalFiatBalance}',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 12,
|
||||
fontFamily: 'Lato',
|
||||
fontWeight: FontWeight.w400,
|
||||
color:
|
||||
Theme.of(context).extension<BalancePageTheme>()!.textColor,
|
||||
height: 1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
// TODO: smarter peg in / out buttons
|
||||
// if (currency == CryptoCurrency.ltc)
|
||||
// Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.end,
|
||||
// children: [
|
||||
// Container(
|
||||
// margin: EdgeInsets.only(top: 24, right: 8),
|
||||
// child: ElevatedButton(
|
||||
// style: ElevatedButton.styleFrom(
|
||||
// backgroundColor: Theme.of(context).highlightColor,
|
||||
// ),
|
||||
// onPressed: () {
|
||||
// final mwebAddress =
|
||||
// bitcoin!.getUnusedMwebAddress(dashboardViewModel.wallet);
|
||||
// if (mwebAddress == null) return;
|
||||
// final paymentRequest =
|
||||
// PaymentRequest.fromUri(Uri.parse("litecoin:${mwebAddress}"));
|
||||
// Navigator.of(context)
|
||||
// .pushNamed(Routes.send, arguments: paymentRequest);
|
||||
// },
|
||||
// child: Container(
|
||||
// color: Colors.transparent,
|
||||
// margin: EdgeInsets.all(4),
|
||||
// child: Column(
|
||||
// mainAxisSize: MainAxisSize.max,
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// children: <Widget>[
|
||||
// Container(
|
||||
// alignment: Alignment.center,
|
||||
// decoration: BoxDecoration(shape: BoxShape.circle),
|
||||
// child: Image.asset(
|
||||
// 'assets/images/received.png',
|
||||
// color: Theme.of(context)
|
||||
// .extension<BalancePageTheme>()!
|
||||
// .balanceAmountColor,
|
||||
// width: 64,
|
||||
// height: 32,
|
||||
// ),
|
||||
// ),
|
||||
// SizedBox(height: 4),
|
||||
// Text(
|
||||
// S.of(context).litecoin_mweb_pegin,
|
||||
// style: TextStyle(
|
||||
// fontSize: 10,
|
||||
// color: Theme.of(context)
|
||||
// .extension<DashboardPageTheme>()!
|
||||
// .cardTextColor),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
void _showBalanceDescription(BuildContext context, String content) {
|
||||
|
|
|
@ -192,7 +192,7 @@ class MenuWidgetState extends State<MenuWidget> {
|
|||
final item = items[index];
|
||||
|
||||
if (!widget.dashboardViewModel.hasMweb &&
|
||||
item.name(context) == S.current.litecoin_mweb_settings) {
|
||||
item.name(context) == S.of(context).litecoin_mweb_settings) {
|
||||
return const SizedBox();
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ class SettingActions {
|
|||
);
|
||||
|
||||
static SettingActions litecoinMwebSettingAction = SettingActions._(
|
||||
name: (context) => S.current.litecoin_mweb_settings,
|
||||
name: (context) => S.of(context).litecoin_mweb_settings,
|
||||
image: 'assets/images/bitcoin_menu.png',
|
||||
onTap: (BuildContext context) {
|
||||
Navigator.pop(context);
|
||||
|
|
|
@ -358,14 +358,15 @@ abstract class BalanceViewModelBase with Store {
|
|||
}
|
||||
|
||||
bool _hasSecondAdditionalBalanceForWalletType(WalletType type) {
|
||||
if (wallet.type == WalletType.litecoin && settingsStore.mwebEnabled) {
|
||||
if (wallet.type == WalletType.litecoin && settingsStore.mwebAlwaysScan) {
|
||||
// if ((wallet.balance[CryptoCurrency.ltc]?.secondAdditional ?? 0) > 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool _hasSecondAvailableBalanceForWalletType(WalletType type) {
|
||||
if (wallet.type == WalletType.litecoin && settingsStore.mwebEnabled) {
|
||||
if (wallet.type == WalletType.litecoin && settingsStore.mwebAlwaysScan) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -262,6 +262,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
reaction((_) => settingsStore.mwebAlwaysScan, (bool alwaysScan) {
|
||||
if (alwaysScan) {
|
||||
mwebScanningActive = true;
|
||||
} else {
|
||||
mwebScanningActive = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -431,7 +433,7 @@ abstract class DashboardViewModelBase with Store {
|
|||
bool get hasMweb => wallet.type == WalletType.litecoin;
|
||||
|
||||
@computed
|
||||
bool get showMwebCard => hasMweb && settingsStore.mwebCardDisplay;
|
||||
bool get showMwebCard => hasMweb && settingsStore.mwebCardDisplay && !mwebScanningActive;
|
||||
|
||||
@observable
|
||||
bool mwebScanningActive = false;
|
||||
|
@ -440,18 +442,23 @@ abstract class DashboardViewModelBase with Store {
|
|||
bool get hasEnabledMwebBefore => settingsStore.hasEnabledMwebBefore;
|
||||
|
||||
@action
|
||||
void setMwebScanningActive(bool active) {
|
||||
void setMwebScanningActive() {
|
||||
if (!hasMweb) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (active) {
|
||||
settingsStore.hasEnabledMwebBefore = true;
|
||||
}
|
||||
settingsStore.hasEnabledMwebBefore = true;
|
||||
mwebScanningActive = true;
|
||||
bitcoin!.setMwebEnabled(wallet, true);
|
||||
settingsStore.mwebAlwaysScan = true;
|
||||
}
|
||||
|
||||
settingsStore.mwebEnabled = active;
|
||||
mwebScanningActive = active;
|
||||
bitcoin!.setMwebEnabled(wallet, active);
|
||||
@action
|
||||
void dismissMweb() {
|
||||
settingsStore.mwebCardDisplay = false;
|
||||
settingsStore.mwebAlwaysScan = false;
|
||||
mwebScanningActive = false;
|
||||
bitcoin!.setMwebEnabled(wallet, false);
|
||||
}
|
||||
|
||||
BalanceViewModel balanceViewModel;
|
||||
|
|
|
@ -326,13 +326,13 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
final isPrimary = subaddress == primaryAddress;
|
||||
|
||||
return WalletAddressListItem(
|
||||
id: subaddress.id,
|
||||
isPrimary: isPrimary,
|
||||
name: subaddress.label,
|
||||
address: subaddress.address,
|
||||
balance: subaddress.received,
|
||||
txCount: subaddress.txCount,
|
||||
);
|
||||
id: subaddress.id,
|
||||
isPrimary: isPrimary,
|
||||
name: subaddress.label,
|
||||
address: subaddress.address,
|
||||
balance: subaddress.received,
|
||||
txCount: subaddress.txCount,
|
||||
);
|
||||
});
|
||||
addressList.addAll(addressItems);
|
||||
}
|
||||
|
@ -418,8 +418,10 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
if (wallet.type == WalletType.litecoin && addressItems.length >= 1000) {
|
||||
// find the index of the last item with a txCount > 0
|
||||
final addressItemsList = addressItems.toList();
|
||||
final lastItemWithTxCount = addressItemsList.lastWhere((item) => (item.txCount ?? 0) > 0);
|
||||
final index = addressItemsList.indexOf(lastItemWithTxCount);
|
||||
int index = addressItemsList.lastIndexWhere((item) => (item.txCount ?? 0) > 0);
|
||||
if (index == -1) {
|
||||
index = 0;
|
||||
}
|
||||
// show only up to that index + 20:
|
||||
addressItems = addressItemsList.sublist(0, index + 20);
|
||||
}
|
||||
|
@ -461,14 +463,16 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
|
||||
for (var i = 0; i < addressList.length; i++) {
|
||||
if (!(addressList[i] is WalletAddressListItem)) continue;
|
||||
(addressList[i] as WalletAddressListItem).isHidden = wallet.walletAddresses.hiddenAddresses.contains((addressList[i] as WalletAddressListItem).address);
|
||||
(addressList[i] as WalletAddressListItem).isHidden = wallet.walletAddresses.hiddenAddresses
|
||||
.contains((addressList[i] as WalletAddressListItem).address);
|
||||
}
|
||||
|
||||
for (var i = 0; i < addressList.length; i++) {
|
||||
if (!(addressList[i] is WalletAddressListItem)) continue;
|
||||
(addressList[i] as WalletAddressListItem).isManual = wallet.walletAddresses.manualAddresses.contains((addressList[i] as WalletAddressListItem).address);
|
||||
(addressList[i] as WalletAddressListItem).isManual = wallet.walletAddresses.manualAddresses
|
||||
.contains((addressList[i] as WalletAddressListItem).address);
|
||||
}
|
||||
|
||||
|
||||
if (searchText.isNotEmpty) {
|
||||
return ObservableList.of(addressList.where((item) {
|
||||
if (item is WalletAddressListItem) {
|
||||
|
@ -480,6 +484,7 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
|
||||
return addressList;
|
||||
}
|
||||
|
||||
Future<void> toggleHideAddress(WalletAddressListItem item) async {
|
||||
if (item.isHidden) {
|
||||
wallet.walletAddresses.hiddenAddresses.removeWhere((element) => element == item.address);
|
||||
|
@ -488,13 +493,20 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
}
|
||||
await wallet.walletAddresses.saveAddressesInBox();
|
||||
if (wallet.type == WalletType.monero) {
|
||||
monero!.getSubaddressList(wallet).update(wallet, accountIndex: monero!.getCurrentAccount(wallet).id);
|
||||
monero!
|
||||
.getSubaddressList(wallet)
|
||||
.update(wallet, accountIndex: monero!.getCurrentAccount(wallet).id);
|
||||
} else if (wallet.type == WalletType.wownero) {
|
||||
wownero!.getSubaddressList(wallet).update(wallet, accountIndex: wownero!.getCurrentAccount(wallet).id);
|
||||
wownero!
|
||||
.getSubaddressList(wallet)
|
||||
.update(wallet, accountIndex: wownero!.getCurrentAccount(wallet).id);
|
||||
} else if (wallet.type == WalletType.haven) {
|
||||
haven!.getSubaddressList(wallet).update(wallet, accountIndex: haven!.getCurrentAccount(wallet).id);
|
||||
haven!
|
||||
.getSubaddressList(wallet)
|
||||
.update(wallet, accountIndex: haven!.getCurrentAccount(wallet).id);
|
||||
}
|
||||
}
|
||||
|
||||
@observable
|
||||
bool hasAccounts;
|
||||
|
||||
|
@ -535,8 +547,7 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
|
||||
@computed
|
||||
bool get isReceivedAvailable =>
|
||||
wallet.type == WalletType.monero ||
|
||||
wallet.type == WalletType.wownero;
|
||||
wallet.type == WalletType.monero || wallet.type == WalletType.wownero;
|
||||
|
||||
@computed
|
||||
bool get isSilentPayments =>
|
||||
|
@ -549,9 +560,9 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
|
|||
|
||||
@computed
|
||||
bool get showAddManualAddresses =>
|
||||
!isAutoGenerateSubaddressEnabled ||
|
||||
wallet.type == WalletType.monero ||
|
||||
wallet.type == WalletType.wownero;
|
||||
!isAutoGenerateSubaddressEnabled ||
|
||||
wallet.type == WalletType.monero ||
|
||||
wallet.type == WalletType.wownero;
|
||||
|
||||
List<ListItem> _baseItems;
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "موافق",
|
||||
"agree_and_continue": "الموافقة ومتابعة",
|
||||
"agree_to": "من خلال إنشاء حساب فإنك توافق على",
|
||||
"alert_notice": "يلاحظ",
|
||||
"all": "الكل",
|
||||
"all_trades": "جميع عمليات التداول",
|
||||
"all_transactions": "كل التحركات المالية",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "تمكين MWEB المسح الضوئي",
|
||||
"litecoin_mweb": "mweb",
|
||||
"litecoin_mweb_always_scan": "اضبط MWEB دائمًا على المسح الضوئي",
|
||||
"litecoin_mweb_description": "MWEB هو بروتوكول جديد يجلب معاملات أسرع وأرخص وأكثر خصوصية إلى Litecoin",
|
||||
"litecoin_mweb_dismiss": "رفض",
|
||||
"litecoin_mweb_display_card": "عرض بطاقة mweb",
|
||||
"litecoin_mweb_enable_later": "يمكنك اختيار تمكين MWEB مرة أخرى ضمن إعدادات العرض.",
|
||||
"litecoin_mweb_pegin": "ربط في",
|
||||
"litecoin_mweb_pegout": "ربط",
|
||||
"litecoin_mweb_scanning": "MWEB المسح الضوئي",
|
||||
"litecoin_mweb_settings": "إعدادات MWEB",
|
||||
"litecoin_mweb_warning": "سيقوم استخدام MWEB في البداية بتنزيل ~ 600 ميجابايت من البيانات ، وقد يستغرق ما يصل إلى 30 دقيقة حسب سرعة الشبكة. سيتم تنزيل هذه البيانات الأولية مرة واحدة فقط وستكون متاحة لجميع محافظ Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Съгласен/а съм",
|
||||
"agree_and_continue": "Съгласяване и продължаване",
|
||||
"agree_to": "Чрез създаването на акаунт вие се съгласявате с ",
|
||||
"alert_notice": "Забележете",
|
||||
"all": "ALL",
|
||||
"all_trades": "Всички сделкки",
|
||||
"all_transactions": "Всички транзакции",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Активирайте сканирането на MWeb",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Задайте MWeb винаги сканиране",
|
||||
"litecoin_mweb_description": "MWeb е нов протокол, който носи по -бърз, по -евтин и повече частни транзакции на Litecoin",
|
||||
"litecoin_mweb_dismiss": "Уволнение",
|
||||
"litecoin_mweb_display_card": "Показване на MWEB карта",
|
||||
"litecoin_mweb_enable_later": "Можете да изберете да активирате MWEB отново под настройките на дисплея.",
|
||||
"litecoin_mweb_pegin": "PEG в",
|
||||
"litecoin_mweb_pegout": "PEG OUT",
|
||||
"litecoin_mweb_scanning": "Сканиране на MWEB",
|
||||
"litecoin_mweb_settings": "Настройки на MWEB",
|
||||
"litecoin_mweb_warning": "Използването на MWEB първоначално ще изтегли ~ 600MB данни и може да отнеме до 30 минути в зависимост от скоростта на мрежата. Тези първоначални данни ще изтеглят само веднъж и ще бъдат достъпни за всички портфейли Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Souhlasím",
|
||||
"agree_and_continue": "Souhlasím & pokračovat",
|
||||
"agree_to": "Vytvořením účtu souhlasíte s ",
|
||||
"alert_notice": "Oznámení",
|
||||
"all": "VŠE",
|
||||
"all_trades": "Všechny obchody",
|
||||
"all_transactions": "Všechny transakce",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Povolit skenování MWeb",
|
||||
"litecoin_mweb": "MWeb",
|
||||
"litecoin_mweb_always_scan": "Nastavit MWeb vždy skenování",
|
||||
"litecoin_mweb_description": "MWEB je nový protokol, který do Litecoin přináší rychlejší, levnější a více soukromých transakcí",
|
||||
"litecoin_mweb_dismiss": "Propustit",
|
||||
"litecoin_mweb_display_card": "Zobrazit kartu MWeb",
|
||||
"litecoin_mweb_enable_later": "V nastavení zobrazení můžete vybrat znovu povolit MWeb.",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Zkrachovat",
|
||||
"litecoin_mweb_scanning": "Skenování mWeb",
|
||||
"litecoin_mweb_settings": "Nastavení mWeb",
|
||||
"litecoin_mweb_warning": "Pomocí MWeb zpočátku stahuje ~ 600 MB dat a může trvat až 30 minut v závislosti na rychlosti sítě. Tato počáteční data si stáhnou pouze jednou a budou k dispozici pro všechny litecoinové peněženky",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "stimme zu",
|
||||
"agree_and_continue": "Zustimmen & fortfahren",
|
||||
"agree_to": "Indem Sie ein Konto erstellen, stimmen Sie den ",
|
||||
"alert_notice": "Beachten",
|
||||
"all": "ALLES",
|
||||
"all_trades": "Alle Trades",
|
||||
"all_transactions": "Alle Transaktionen",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Aktivieren Sie das MWEB -Scannen",
|
||||
"litecoin_mweb": "MWeb",
|
||||
"litecoin_mweb_always_scan": "Setzen Sie MWeb immer scannen",
|
||||
"litecoin_mweb_description": "MWEB ist ein neues Protokoll, das schnellere, billigere und privatere Transaktionen zu Litecoin bringt",
|
||||
"litecoin_mweb_dismiss": "Zurückweisen",
|
||||
"litecoin_mweb_display_card": "MWEB -Karte anzeigen",
|
||||
"litecoin_mweb_enable_later": "Sie können MWEB unter Anzeigeeinstellungen erneut aktivieren.",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Abstecken",
|
||||
"litecoin_mweb_scanning": "MWEB Scanning",
|
||||
"litecoin_mweb_settings": "MWEB -Einstellungen",
|
||||
"litecoin_mweb_warning": "Durch die Verwendung von MWEB wird zunächst ~ 600 MB Daten heruntergeladen und kann je nach Netzwerkgeschwindigkeit bis zu 30 Minuten dauern. Diese ersten Daten werden nur einmal heruntergeladen und für alle Litecoin -Brieftaschen verfügbar",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Agree",
|
||||
"agree_and_continue": "Agree & Continue",
|
||||
"agree_to": "By creating account you agree to the ",
|
||||
"alert_notice": "Notice",
|
||||
"all": "ALL",
|
||||
"all_trades": "All trades",
|
||||
"all_transactions": "All transactions",
|
||||
|
@ -333,9 +334,9 @@
|
|||
"haven_app": "Haven by Cake Wallet",
|
||||
"haven_app_wallet_text": "Awesome wallet for Haven",
|
||||
"help": "help",
|
||||
"hide": "Hide",
|
||||
"hidden_addresses": "Hidden Addresses",
|
||||
"hidden_balance": "Hidden Balance",
|
||||
"hide": "Hide",
|
||||
"hide_details": "Hide Details",
|
||||
"high_contrast_theme": "High Contrast Theme",
|
||||
"home_screen_settings": "Home screen settings",
|
||||
|
@ -368,7 +369,12 @@
|
|||
"litecoin_enable_mweb_sync": "Enable MWEB scanning",
|
||||
"litecoin_mweb": "MWEB",
|
||||
"litecoin_mweb_always_scan": "Set MWEB always scanning",
|
||||
"litecoin_mweb_description": "MWEB is a new protocol that brings faster, cheaper, and more private transactions to Litecoin",
|
||||
"litecoin_mweb_dismiss": "Dismiss",
|
||||
"litecoin_mweb_display_card": "Show MWEB card",
|
||||
"litecoin_mweb_enable_later": "You can choose to enable MWEB again under Display Settings.",
|
||||
"litecoin_mweb_pegin": "Peg In",
|
||||
"litecoin_mweb_pegout": "Peg Out",
|
||||
"litecoin_mweb_scanning": "MWEB Scanning",
|
||||
"litecoin_mweb_settings": "MWEB settings",
|
||||
"litecoin_mweb_warning": "Using MWEB will initially download ~600MB of data, and may take up to 30 minutes depending on network speed. This initial data will only download once and be available for all Litecoin wallets",
|
||||
|
@ -685,8 +691,8 @@
|
|||
"setup_your_debit_card": "Set up your debit card",
|
||||
"share": "Share",
|
||||
"share_address": "Share address",
|
||||
"show": "Show",
|
||||
"shared_seed_wallet_groups": "Shared Seed Wallet Groups",
|
||||
"show": "Show",
|
||||
"show_details": "Show Details",
|
||||
"show_keys": "Show seed/keys",
|
||||
"show_market_place": "Show Marketplace",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "De acuerdo",
|
||||
"agree_and_continue": "Aceptar y continuar",
|
||||
"agree_to": "Al crear una cuenta, aceptas ",
|
||||
"alert_notice": "Aviso",
|
||||
"all": "TODOS",
|
||||
"all_trades": "Todos los oficios",
|
||||
"all_transactions": "Todas las transacciones",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Habilitar el escaneo mweb",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Establecer mweb siempre escaneo",
|
||||
"litecoin_mweb_description": "Mweb es un nuevo protocolo que trae transacciones más rápidas, más baratas y más privadas a Litecoin",
|
||||
"litecoin_mweb_dismiss": "Despedir",
|
||||
"litecoin_mweb_display_card": "Mostrar tarjeta MWEB",
|
||||
"litecoin_mweb_enable_later": "Puede elegir habilitar MWEB nuevamente en la configuración de visualización.",
|
||||
"litecoin_mweb_pegin": "Meter",
|
||||
"litecoin_mweb_pegout": "Estirar la pata",
|
||||
"litecoin_mweb_scanning": "Escaneo mweb",
|
||||
"litecoin_mweb_settings": "Configuración de MWEB",
|
||||
"litecoin_mweb_warning": "El uso de MWEB inicialmente descargará ~ 600 MB de datos, y puede tomar hasta 30 minutos según la velocidad de la red. Estos datos iniciales solo se descargarán una vez y estarán disponibles para todas las billeteras de Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "d'accord",
|
||||
"agree_and_continue": "Accepter et continuer",
|
||||
"agree_to": "En créant un compte, vous acceptez les ",
|
||||
"alert_notice": "Avis",
|
||||
"all": "TOUT",
|
||||
"all_trades": "Tous échanges",
|
||||
"all_transactions": "Toutes transactions",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Activer la numérisation MWEB",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Définir MWEB Score Scanning",
|
||||
"litecoin_mweb_description": "MWEB est un nouveau protocole qui apporte des transactions plus rapides, moins chères et plus privées à Litecoin",
|
||||
"litecoin_mweb_dismiss": "Rejeter",
|
||||
"litecoin_mweb_display_card": "Afficher la carte MWeb",
|
||||
"litecoin_mweb_enable_later": "Vous pouvez choisir d'activer à nouveau MWEB sous Paramètres d'affichage.",
|
||||
"litecoin_mweb_pegin": "Entraver",
|
||||
"litecoin_mweb_pegout": "Crever",
|
||||
"litecoin_mweb_scanning": "Scann mweb",
|
||||
"litecoin_mweb_settings": "Paramètres MWEB",
|
||||
"litecoin_mweb_warning": "L'utilisation de MWEB téléchargera initialement ~ 600 Mo de données et peut prendre jusqu'à 30 minutes en fonction de la vitesse du réseau. Ces données initiales ne téléchargeront qu'une seule fois et seront disponibles pour tous les portefeuilles litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Yarda",
|
||||
"agree_and_continue": "Amincewa & Ci gaba",
|
||||
"agree_to": "Ta hanyar ƙirƙirar asusu kun yarda da",
|
||||
"alert_notice": "Sanarwa",
|
||||
"all": "DUK",
|
||||
"all_trades": "Duk ciniki",
|
||||
"all_transactions": "Dukan Ma'amaloli",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Kunna binciken Mweb",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Saita Mweb koyaushe",
|
||||
"litecoin_mweb_description": "Mweb shine sabon tsarin yarjejeniya da ya kawo da sauri, mai rahusa, da kuma ma'amaloli masu zaman kansu zuwa Litecoin",
|
||||
"litecoin_mweb_dismiss": "Tuɓe \\ sallama",
|
||||
"litecoin_mweb_display_card": "Nuna katin Mweb",
|
||||
"litecoin_mweb_enable_later": "Kuna iya zaɓar kunna Mweb kuma a ƙarƙashin saitunan nuni.",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Peg fita",
|
||||
"litecoin_mweb_scanning": "Mweb scanning",
|
||||
"litecoin_mweb_settings": "Saitunan Mweb",
|
||||
"litecoin_mweb_warning": "Amfani da Mweb zai fara saukewa ~ 600MB na bayanai, kuma yana iya ɗaukar minti 30 dangane da saurin cibiyar sadarwa. Wannan bayanan farko zai saika saukarwa sau ɗaya kawai kuma a samu don duk wuraren shakatawa",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "सहमत",
|
||||
"agree_and_continue": "सहमत और जारी रखें",
|
||||
"agree_to": "खाता बनाकर आप इससे सहमत होते हैं ",
|
||||
"alert_notice": "सूचना",
|
||||
"all": "सब",
|
||||
"all_trades": "सभी व्यापार",
|
||||
"all_transactions": "सभी लेन - देन",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "MWEB स्कैनिंग सक्षम करें",
|
||||
"litecoin_mweb": "मावली",
|
||||
"litecoin_mweb_always_scan": "MWEB हमेशा स्कैनिंग सेट करें",
|
||||
"litecoin_mweb_description": "MWEB एक नया प्रोटोकॉल है जो लिटकोइन के लिए तेजी से, सस्ता और अधिक निजी लेनदेन लाता है",
|
||||
"litecoin_mweb_dismiss": "नकार देना",
|
||||
"litecoin_mweb_display_card": "MWEB कार्ड दिखाएं",
|
||||
"litecoin_mweb_enable_later": "आप प्रदर्शन सेटिंग्स के तहत फिर से MWEB को सक्षम करने के लिए चुन सकते हैं।",
|
||||
"litecoin_mweb_pegin": "खूंटी",
|
||||
"litecoin_mweb_pegout": "मरना",
|
||||
"litecoin_mweb_scanning": "MWEB स्कैनिंग",
|
||||
"litecoin_mweb_settings": "MWEB सेटिंग्स",
|
||||
"litecoin_mweb_warning": "MWEB का उपयोग शुरू में ~ 600MB डेटा डाउनलोड करेगा, और नेटवर्क की गति के आधार पर 30 मिनट तक का समय लग सकता है। यह प्रारंभिक डेटा केवल एक बार डाउनलोड करेगा और सभी लिटकोइन वॉलेट के लिए उपलब्ध होगा",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Slažem se",
|
||||
"agree_and_continue": "Slažem se i nastavi",
|
||||
"agree_to": "Stvaranjem računa pristajete na ",
|
||||
"alert_notice": "Obavijest",
|
||||
"all": "SVE",
|
||||
"all_trades": "Svi obrti",
|
||||
"all_transactions": "Sve transakcije",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Omogućite MWEB skeniranje",
|
||||
"litecoin_mweb": "MWeb",
|
||||
"litecoin_mweb_always_scan": "Postavite MWeb uvijek skeniranje",
|
||||
"litecoin_mweb_description": "MWEB je novi protokol koji u Litecoin donosi brže, jeftinije i privatnije transakcije",
|
||||
"litecoin_mweb_dismiss": "Odbaciti",
|
||||
"litecoin_mweb_display_card": "Prikaži MWeb karticu",
|
||||
"litecoin_mweb_enable_later": "Možete odabrati da MWEB ponovo omogućite pod postavkama zaslona.",
|
||||
"litecoin_mweb_pegin": "Uvući se",
|
||||
"litecoin_mweb_pegout": "Odapeti",
|
||||
"litecoin_mweb_scanning": "MWEB skeniranje",
|
||||
"litecoin_mweb_settings": "Postavke MWEB -a",
|
||||
"litecoin_mweb_warning": "Korištenje MWEB -a u početku će preuzeti ~ 600MB podataka, a može potrajati do 30 minuta, ovisno o brzini mreže. Ovi početni podaci preuzet će samo jednom i biti dostupni za sve Litecoin novčanike",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Համաձայն եմ",
|
||||
"agree_and_continue": "Համաձայն եմ և շարունակեմ",
|
||||
"agree_to": "Ստեղծելով հաշիվ դուք համաձայնում եք ",
|
||||
"alert_notice": "Ծանուցում",
|
||||
"all": "Բոլորը",
|
||||
"all_trades": "Բոլոր գործարքները",
|
||||
"all_transactions": "Բոլոր գործառնությունները",
|
||||
|
@ -363,6 +364,11 @@
|
|||
"ledger_error_wrong_app": "Խնդրում ենք համոզվել, որ դուք բացել եք ճիշտ ծրագիրը ձեր Ledger-ում",
|
||||
"ledger_please_enable_bluetooth": "Խնդրում ենք միացնել Bluetooth-ը ձեր Ledger-ը հայտնաբերելու համար",
|
||||
"light_theme": "Լուսավոր",
|
||||
"litecoin_mweb_description": "Mweb- ը նոր արձանագրություն է, որը բերում է ավելի արագ, ավելի էժան եւ ավելի մասնավոր գործարքներ դեպի LITECOIN",
|
||||
"litecoin_mweb_dismiss": "Հեռացնել",
|
||||
"litecoin_mweb_enable_later": "Կարող եք ընտրել Mweb- ը կրկին միացնել ցուցադրման պարամետրերը:",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Հափշտակել",
|
||||
"live_fee_rates": "Ապակի վարձավճարներ API- ի միջոցով",
|
||||
"load_more": "Բեռնել ավելին",
|
||||
"loading_your_wallet": "Ձեր հաշվեհամարը բեռնում է",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Setuju",
|
||||
"agree_and_continue": "Setuju & Lanjutkan",
|
||||
"agree_to": "Dengan membuat akun Anda setuju dengan ",
|
||||
"alert_notice": "Melihat",
|
||||
"all": "SEMUA",
|
||||
"all_trades": "Semua perdagangan",
|
||||
"all_transactions": "Semua transaksi",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Aktifkan pemindaian MWEB",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Atur mWeb selalu memindai",
|
||||
"litecoin_mweb_description": "MWEB adalah protokol baru yang membawa transaksi yang lebih cepat, lebih murah, dan lebih pribadi ke Litecoin",
|
||||
"litecoin_mweb_dismiss": "Membubarkan",
|
||||
"litecoin_mweb_display_card": "Tunjukkan kartu mWeb",
|
||||
"litecoin_mweb_enable_later": "Anda dapat memilih untuk mengaktifkan MWEB lagi di bawah pengaturan tampilan.",
|
||||
"litecoin_mweb_pegin": "Pasak masuk",
|
||||
"litecoin_mweb_pegout": "Mati",
|
||||
"litecoin_mweb_scanning": "Pemindaian MWEB",
|
||||
"litecoin_mweb_settings": "Pengaturan MWEB",
|
||||
"litecoin_mweb_warning": "Menggunakan MWEB pada awalnya akan mengunduh ~ 600MB data, dan dapat memakan waktu hingga 30 menit tergantung pada kecepatan jaringan. Data awal ini hanya akan mengunduh sekali dan tersedia untuk semua dompet litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "d'accordo",
|
||||
"agree_and_continue": "Accetta e continua",
|
||||
"agree_to": "Creando un account accetti il ",
|
||||
"alert_notice": "Avviso",
|
||||
"all": "TUTTO",
|
||||
"all_trades": "Svi obrti",
|
||||
"all_transactions": "Sve transakcije",
|
||||
|
@ -367,7 +368,12 @@
|
|||
"litecoin_enable_mweb_sync": "Abilita la scansione MWeb",
|
||||
"litecoin_mweb": "MWeb",
|
||||
"litecoin_mweb_always_scan": "Imposta MWeb per scansionare sempre",
|
||||
"litecoin_mweb_description": "MWeb è un nuovo protocollo che porta transazioni più veloci, più economiche e più private a Litecoin",
|
||||
"litecoin_mweb_dismiss": "Congedare",
|
||||
"litecoin_mweb_display_card": "Mostra la scheda MWeb",
|
||||
"litecoin_mweb_enable_later": "È possibile scegliere di abilitare nuovamente MWeb nelle impostazioni di visualizzazione.",
|
||||
"litecoin_mweb_pegin": "Piolo in",
|
||||
"litecoin_mweb_pegout": "PEG OUT",
|
||||
"litecoin_mweb_scanning": "Scansione MWeb",
|
||||
"litecoin_mweb_settings": "Impostazioni MWeb",
|
||||
"litecoin_mweb_warning": "L'uso di MWeb inizialmente scaricherà ~ 600 MB di dati e potrebbe richiedere fino a 30 minuti a seconda della velocità di rete. Questi dati iniziali scaricheranno solo una volta e saranno disponibili per tutti i portafogli Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "同意する",
|
||||
"agree_and_continue": "同意して続行",
|
||||
"agree_to": "アカウントを作成することにより、",
|
||||
"alert_notice": "知らせ",
|
||||
"all": "すべて",
|
||||
"all_trades": "すべての取引",
|
||||
"all_transactions": "全取引",
|
||||
|
@ -367,7 +368,12 @@
|
|||
"litecoin_enable_mweb_sync": "MWEBスキャンを有効にします",
|
||||
"litecoin_mweb": "mweb",
|
||||
"litecoin_mweb_always_scan": "MWEBを常にスキャンします",
|
||||
"litecoin_mweb_description": "MWEBは、Litecoinにより速く、より安価で、よりプライベートなトランザクションをもたらす新しいプロトコルです",
|
||||
"litecoin_mweb_dismiss": "却下する",
|
||||
"litecoin_mweb_display_card": "MWEBカードを表示します",
|
||||
"litecoin_mweb_enable_later": "表示設定の下で、MWEBを再度有効にすることを選択できます。",
|
||||
"litecoin_mweb_pegin": "ペグイン",
|
||||
"litecoin_mweb_pegout": "ペグアウト",
|
||||
"litecoin_mweb_scanning": "MWEBスキャン",
|
||||
"litecoin_mweb_settings": "MWEB設定",
|
||||
"litecoin_mweb_warning": "MWEBを使用すると、最初は〜600MBのデータをダウンロードし、ネットワーク速度に応じて最大30分かかる場合があります。この最初のデータは一度だけダウンロードされ、すべてのLitecoinウォレットで利用可能になります",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "동의하다",
|
||||
"agree_and_continue": "동의 및 계속",
|
||||
"agree_to": "계정을 생성하면 ",
|
||||
"alert_notice": "알아채다",
|
||||
"all": "모든",
|
||||
"all_trades": "A모든 거래",
|
||||
"all_transactions": "모든 거래 창구",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "mweb 스캔을 활성화합니다",
|
||||
"litecoin_mweb": "mweb",
|
||||
"litecoin_mweb_always_scan": "mweb는 항상 스캔을 설정합니다",
|
||||
"litecoin_mweb_description": "MWEB는 Litecoin에 더 빠르고 저렴하며 개인 거래를 제공하는 새로운 프로토콜입니다.",
|
||||
"litecoin_mweb_dismiss": "해고하다",
|
||||
"litecoin_mweb_display_card": "mweb 카드를 보여주십시오",
|
||||
"litecoin_mweb_enable_later": "디스플레이 설정에서 MWEB를 다시 활성화하도록 선택할 수 있습니다.",
|
||||
"litecoin_mweb_pegin": "페그를 입력하십시오",
|
||||
"litecoin_mweb_pegout": "죽다",
|
||||
"litecoin_mweb_scanning": "mweb 스캔",
|
||||
"litecoin_mweb_settings": "mweb 설정",
|
||||
"litecoin_mweb_warning": "MWEB를 사용하면 처음에는 ~ 600MB의 데이터를 다운로드하며 네트워크 속도에 따라 최대 30 분이 소요될 수 있습니다. 이 초기 데이터는 한 번만 다운로드하여 모든 조명 지갑에 사용할 수 있습니다.",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "သဘောတူသည်။",
|
||||
"agree_and_continue": "သဘောတူပြီး ရှေ့ဆက်ပါ။",
|
||||
"agree_to": "အကောင့်ဖန်တီးခြင်းဖြင့် သင်သည် ဤအရာကို သဘောတူပါသည်။",
|
||||
"alert_notice": "မှတ်သား",
|
||||
"all": "အားလုံး",
|
||||
"all_trades": "ကုန်သွယ်မှုအားလုံး",
|
||||
"all_transactions": "အရောင်းအဝယ်အားလုံး",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "mweb scanning ဖွင့်ပါ",
|
||||
"litecoin_mweb": "မင်္ဂလာပါ",
|
||||
"litecoin_mweb_always_scan": "Mweb အမြဲစကင်ဖတ်စစ်ဆေးပါ",
|
||||
"litecoin_mweb_description": "Mweb သည် Protocol အသစ်ဖြစ်ပြီး LitCoin သို့ပိုမိုဈေးချိုသာသော, စျေးသက်သက်သာသာသုံးခြင်းနှင့်ပိုမိုများပြားသောပုဂ္ဂလိကငွေပို့ဆောင်မှုများကိုဖြစ်ပေါ်စေသည်",
|
||||
"litecoin_mweb_dismiss": "ထုတ်ပစ်",
|
||||
"litecoin_mweb_display_card": "MweB ကဒ်ကိုပြပါ",
|
||||
"litecoin_mweb_enable_later": "သင် MweB ကို display settings အောက်ရှိ ထပ်မံ. ခွင့်ပြုရန်ရွေးချယ်နိုင်သည်။",
|
||||
"litecoin_mweb_pegin": "တံစို့",
|
||||
"litecoin_mweb_pegout": "တံစို့",
|
||||
"litecoin_mweb_scanning": "mweb scanning",
|
||||
"litecoin_mweb_settings": "Mweb ဆက်တင်များ",
|
||||
"litecoin_mweb_warning": "MweB ကိုအသုံးပြုခြင်းသည်အစပိုင်းတွင် ~ 600MB ဒေတာများကို download လုပ်ပြီးကွန်ယက်အမြန်နှုန်းပေါ် မူတည်. မိနစ် 30 အထိကြာနိုင်သည်။ ဤကန ဦး ဒေတာကိုတစ်ကြိမ်သာ download လုပ်ပြီး litecoin Walkets အားလုံးအတွက်ရနိုင်သည်",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "mee eens",
|
||||
"agree_and_continue": "Akkoord & doorgaan",
|
||||
"agree_to": "Door een account aan te maken gaat u akkoord met de ",
|
||||
"alert_notice": "Kennisgeving",
|
||||
"all": "ALLE",
|
||||
"all_trades": "Alle transacties",
|
||||
"all_transactions": "Alle transacties",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "MWEB -scanning inschakelen",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Stel mweb altijd op scannen",
|
||||
"litecoin_mweb_description": "MWEB is een nieuw protocol dat snellere, goedkopere en meer privé -transacties naar Litecoin brengt",
|
||||
"litecoin_mweb_dismiss": "Afwijzen",
|
||||
"litecoin_mweb_display_card": "Toon MWEB -kaart",
|
||||
"litecoin_mweb_enable_later": "U kunt ervoor kiezen om MWeb opnieuw in te schakelen onder weergave -instellingen.",
|
||||
"litecoin_mweb_pegin": "Vastmaken",
|
||||
"litecoin_mweb_pegout": "Uithakken",
|
||||
"litecoin_mweb_scanning": "MWEB -scanning",
|
||||
"litecoin_mweb_settings": "MWEB -instellingen",
|
||||
"litecoin_mweb_warning": "Het gebruik van MWeb downloadt in eerste instantie ~ 600 MB aan gegevens en kan tot 30 minuten duren, afhankelijk van de netwerksnelheid. Deze eerste gegevens worden slechts eenmaal gedownload en zijn beschikbaar voor alle Litecoin -portefeuilles",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Zgadzam się",
|
||||
"agree_and_continue": "Zgadzam się i kontynuuj",
|
||||
"agree_to": "Tworząc konto wyrażasz zgodę na ",
|
||||
"alert_notice": "Ogłoszenie",
|
||||
"all": "WSZYSTKO",
|
||||
"all_trades": "Wszystkie operacje",
|
||||
"all_transactions": "Wszystkie transakcje",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Włącz skanowanie MWEB",
|
||||
"litecoin_mweb": "MWEB",
|
||||
"litecoin_mweb_always_scan": "Ustaw MWEB zawsze skanowanie",
|
||||
"litecoin_mweb_description": "MWEB to nowy protokół, który przynosi szybciej, tańsze i bardziej prywatne transakcje do Litecoin",
|
||||
"litecoin_mweb_dismiss": "Odrzucać",
|
||||
"litecoin_mweb_display_card": "Pokaż kartę MWEB",
|
||||
"litecoin_mweb_enable_later": "Możesz ponownie włączyć MWEB w ustawieniach wyświetlania.",
|
||||
"litecoin_mweb_pegin": "Kołek",
|
||||
"litecoin_mweb_pegout": "Palikować",
|
||||
"litecoin_mweb_scanning": "Skanowanie MWEB",
|
||||
"litecoin_mweb_settings": "Ustawienia MWEB",
|
||||
"litecoin_mweb_warning": "Korzystanie z MWEB początkowo pobiera ~ 600 MB danych i może potrwać do 30 minut w zależności od prędkości sieci. Te początkowe dane pobierają tylko raz i będą dostępne dla wszystkich portfeli Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Concordo",
|
||||
"agree_and_continue": "Concordar e continuar",
|
||||
"agree_to": "Ao criar conta você concorda com ",
|
||||
"alert_notice": "Perceber",
|
||||
"all": "TUDO",
|
||||
"all_trades": "Todas as negociações",
|
||||
"all_transactions": "Todas as transacções",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Ativar digitalização do MWEB",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Definir mweb sempre digitalizando",
|
||||
"litecoin_mweb_description": "MWEB é um novo protocolo que traz transações mais rápidas, baratas e mais privadas para o Litecoin",
|
||||
"litecoin_mweb_dismiss": "Liberar",
|
||||
"litecoin_mweb_display_card": "Mostre o cartão MWEB",
|
||||
"litecoin_mweb_enable_later": "Você pode optar por ativar o MWEB novamente em Configurações de exibição.",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Peg fora",
|
||||
"litecoin_mweb_scanning": "MWEB Scanning",
|
||||
"litecoin_mweb_settings": "Configurações do MWEB",
|
||||
"litecoin_mweb_warning": "O uso do MWEB baixará inicialmente ~ 600 MB de dados e pode levar até 30 minutos, dependendo da velocidade da rede. Esses dados iniciais serão baixados apenas uma vez e estarão disponíveis para todas as carteiras Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "согласен",
|
||||
"agree_and_continue": "Согласиться и продолжить",
|
||||
"agree_to": "Создавая аккаунт, вы соглашаетесь с ",
|
||||
"alert_notice": "Уведомление",
|
||||
"all": "ВСЕ",
|
||||
"all_trades": "Все сделки",
|
||||
"all_transactions": "Все транзакции",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Включить MWEB сканирование",
|
||||
"litecoin_mweb": "Мвеб",
|
||||
"litecoin_mweb_always_scan": "Установить MWEB всегда сканирование",
|
||||
"litecoin_mweb_description": "MWEB - это новый протокол, который приносит быстрее, дешевле и более частные транзакции в Litecoin",
|
||||
"litecoin_mweb_dismiss": "Увольнять",
|
||||
"litecoin_mweb_display_card": "Показать карту MWEB",
|
||||
"litecoin_mweb_enable_later": "Вы можете снова включить MWEB в настройках отображения.",
|
||||
"litecoin_mweb_pegin": "Внедрять",
|
||||
"litecoin_mweb_pegout": "Выкрикивать",
|
||||
"litecoin_mweb_scanning": "MWEB сканирование",
|
||||
"litecoin_mweb_settings": "Настройки MWEB",
|
||||
"litecoin_mweb_warning": "Использование MWEB изначально загрузит ~ 600 МБ данных и может занять до 30 минут в зависимости от скорости сети. Эти начальные данные будут загружаться только один раз и будут доступны для всех кошельков Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "ยอมรับ",
|
||||
"agree_and_continue": "ยอมรับและดำเนินการต่อ",
|
||||
"agree_to": "การสร้างบัญชีของคุณยอมรับเงื่อนไขของ",
|
||||
"alert_notice": "สังเกต",
|
||||
"all": "ทั้งหมด",
|
||||
"all_trades": "การซื้อขายทั้งหมด",
|
||||
"all_transactions": "การทำธุรกรรมทั้งหมด",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "เปิดใช้งานการสแกน MWEB",
|
||||
"litecoin_mweb": "mweb",
|
||||
"litecoin_mweb_always_scan": "ตั้งค่าการสแกน MWEB เสมอ",
|
||||
"litecoin_mweb_description": "MWEB เป็นโปรโตคอลใหม่ที่นำการทำธุรกรรมที่เร็วกว่าราคาถูกกว่าและเป็นส่วนตัวมากขึ้นไปยัง Litecoin",
|
||||
"litecoin_mweb_dismiss": "อนุญาตให้ออกไป",
|
||||
"litecoin_mweb_display_card": "แสดงการ์ด mweb",
|
||||
"litecoin_mweb_enable_later": "คุณสามารถเลือกเปิดใช้งาน MWEB อีกครั้งภายใต้การตั้งค่าการแสดงผล",
|
||||
"litecoin_mweb_pegin": "หมุด",
|
||||
"litecoin_mweb_pegout": "ตรึง",
|
||||
"litecoin_mweb_scanning": "การสแกน MWEB",
|
||||
"litecoin_mweb_settings": "การตั้งค่า MWEB",
|
||||
"litecoin_mweb_warning": "การใช้ MWEB จะดาวน์โหลดข้อมูล ~ 600MB ในขั้นต้นและอาจใช้เวลาสูงสุด 30 นาทีขึ้นอยู่กับความเร็วเครือข่าย ข้อมูลเริ่มต้นนี้จะดาวน์โหลดได้เพียงครั้งเดียวและพร้อมใช้งานสำหรับกระเป๋าเงินทั้งหมดของ Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Sumang-ayon",
|
||||
"agree_and_continue": "Sumang-ayon & Magpatuloy",
|
||||
"agree_to": "Sa pamamagitan ng paggawa ng account sumasang-ayon ka sa ",
|
||||
"alert_notice": "PAUNAWA",
|
||||
"all": "LAHAT",
|
||||
"all_trades": "Lahat ng mga trade",
|
||||
"all_transactions": "Lahat ng mga transaksyon",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Paganahin ang pag -scan ng MWeb",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Itakda ang MWeb na laging nag -scan",
|
||||
"litecoin_mweb_description": "Ang MWeb ay isang bagong protocol na nagdadala ng mas mabilis, mas mura, at mas maraming pribadong mga transaksyon sa Litecoin",
|
||||
"litecoin_mweb_dismiss": "Tanggalin",
|
||||
"litecoin_mweb_display_card": "Ipakita ang MWEB Card",
|
||||
"litecoin_mweb_enable_later": "Maaari kang pumili upang paganahin muli ang MWeb sa ilalim ng mga setting ng pagpapakita.",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Peg out",
|
||||
"litecoin_mweb_scanning": "Pag -scan ng Mweb",
|
||||
"litecoin_mweb_settings": "Mga Setting ng Mweb",
|
||||
"litecoin_mweb_warning": "Ang paggamit ng MWEB ay unang i -download ang ~ 600MB ng data, at maaaring tumagal ng hanggang sa 30 minuto depende sa bilis ng network. Ang paunang data na ito ay mag -download lamang ng isang beses at magagamit para sa lahat ng mga wallets ng Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Kabul Et",
|
||||
"agree_and_continue": "Kabul Et & Devam Et",
|
||||
"agree_to": "Hesap oluşturarak bunları kabul etmiş olursunuz ",
|
||||
"alert_notice": "Fark etme",
|
||||
"all": "HEPSİ",
|
||||
"all_trades": "Tüm takaslar",
|
||||
"all_transactions": "Tüm transferler",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "MWEB taramasını etkinleştir",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "MWEB'i her zaman taramayı ayarlayın",
|
||||
"litecoin_mweb_description": "MWEB, Litecoin'e daha hızlı, daha ucuz ve daha fazla özel işlem getiren yeni bir protokoldür",
|
||||
"litecoin_mweb_dismiss": "Azletmek",
|
||||
"litecoin_mweb_display_card": "MWEB kartını göster",
|
||||
"litecoin_mweb_enable_later": "Ekran ayarlarının altında MWEB'yi tekrar etkinleştirmeyi seçebilirsiniz.",
|
||||
"litecoin_mweb_pegin": "Takılmak",
|
||||
"litecoin_mweb_pegout": "Çiğnemek",
|
||||
"litecoin_mweb_scanning": "MWEB taraması",
|
||||
"litecoin_mweb_settings": "MWEB ayarları",
|
||||
"litecoin_mweb_warning": "MWEB kullanmak başlangıçta ~ 600MB veri indirir ve ağ hızına bağlı olarak 30 dakikaya kadar sürebilir. Bu ilk veriler yalnızca bir kez indirilecek ve tüm Litecoin cüzdanları için kullanılabilir olacak",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Згоден",
|
||||
"agree_and_continue": "Погодитися та продовжити",
|
||||
"agree_to": "Створюючи обліковий запис, ви погоджуєтеся з ",
|
||||
"alert_notice": "Ув'язнення",
|
||||
"all": "ВСЕ",
|
||||
"all_trades": "Всі операції",
|
||||
"all_transactions": "Всі транзакції",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "Увімкнути сканування MWEB",
|
||||
"litecoin_mweb": "Мвеб",
|
||||
"litecoin_mweb_always_scan": "Встановити mweb завжди сканувати",
|
||||
"litecoin_mweb_description": "MWEB - це новий протокол, який приносить швидкі, дешевші та більш приватні транзакції Litecoin",
|
||||
"litecoin_mweb_dismiss": "Звільнити",
|
||||
"litecoin_mweb_display_card": "Показати карту MWeb",
|
||||
"litecoin_mweb_enable_later": "Ви можете знову ввімкнути MWEB в налаштуваннях дисплея.",
|
||||
"litecoin_mweb_pegin": "Подякувати",
|
||||
"litecoin_mweb_pegout": "Подякувати",
|
||||
"litecoin_mweb_scanning": "Сканування Mweb",
|
||||
"litecoin_mweb_settings": "Налаштування MWEB",
|
||||
"litecoin_mweb_warning": "Використання MWEB спочатку завантажить ~ 600 Мб даних і може зайняти до 30 хвилин залежно від швидкості мережі. Ці початкові дані завантажуються лише один раз і будуть доступні для всіх гаманців Litecoin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "متفق",
|
||||
"agree_and_continue": "اتفاق کریں اور جاری رکھیں",
|
||||
"agree_to": "اکاؤنٹ بنا کر آپ اس سے اتفاق کرتے ہیں۔",
|
||||
"alert_notice": "نوٹس",
|
||||
"all": "تمام",
|
||||
"all_trades": "تمام تجارت",
|
||||
"all_transactions": "تمام لین دین",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "MWEB اسکیننگ کو فعال کریں",
|
||||
"litecoin_mweb": "MWEB",
|
||||
"litecoin_mweb_always_scan": "MWEB ہمیشہ اسکیننگ سیٹ کریں",
|
||||
"litecoin_mweb_description": "MWEB ایک نیا پروٹوکول ہے جو لیٹیکوئن میں تیز ، سستا اور زیادہ نجی لین دین لاتا ہے",
|
||||
"litecoin_mweb_dismiss": "خارج",
|
||||
"litecoin_mweb_display_card": "MWEB کارڈ دکھائیں",
|
||||
"litecoin_mweb_enable_later": "آپ ڈسپلے کی ترتیبات کے تحت MWEB کو دوبارہ فعال کرنے کا انتخاب کرسکتے ہیں۔",
|
||||
"litecoin_mweb_pegin": "پیگ میں",
|
||||
"litecoin_mweb_pegout": "پیگ آؤٹ",
|
||||
"litecoin_mweb_scanning": "MWEB اسکیننگ",
|
||||
"litecoin_mweb_settings": "MWEB کی ترتیبات",
|
||||
"litecoin_mweb_warning": "MWEB کا استعمال ابتدائی طور پر m 600mb ڈیٹا ڈاؤن لوڈ کرے گا ، اور نیٹ ورک کی رفتار کے لحاظ سے 30 منٹ تک کا وقت لگ سکتا ہے۔ یہ ابتدائی اعداد و شمار صرف ایک بار ڈاؤن لوڈ کریں گے اور تمام لیٹیکوئن بٹوے کے لئے دستیاب ہوں گے",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Đồng ý",
|
||||
"agree_and_continue": "Đồng ý & Tiếp tục",
|
||||
"agree_to": "Bằng cách tạo tài khoản, bạn đồng ý với ",
|
||||
"alert_notice": "Để ý",
|
||||
"all": "TẤT CẢ",
|
||||
"all_trades": "Tất cả giao dịch",
|
||||
"all_transactions": "Tất cả giao dịch",
|
||||
|
@ -364,6 +365,11 @@
|
|||
"ledger_error_wrong_app": "Vui lòng đảm bảo bạn đã mở đúng ứng dụng trên Ledger của mình",
|
||||
"ledger_please_enable_bluetooth": "Vui lòng bật Bluetooth để phát hiện Ledger của bạn",
|
||||
"light_theme": "Chủ đề sáng",
|
||||
"litecoin_mweb_description": "MWEB là một giao thức mới mang lại các giao dịch nhanh hơn, rẻ hơn và riêng tư hơn cho Litecoin",
|
||||
"litecoin_mweb_dismiss": "Miễn nhiệm",
|
||||
"litecoin_mweb_enable_later": "Bạn có thể chọn bật lại MWEB trong cài đặt hiển thị.",
|
||||
"litecoin_mweb_pegin": "Chốt vào",
|
||||
"litecoin_mweb_pegout": "Chốt ra",
|
||||
"live_fee_rates": "Tỷ lệ phí hiện tại qua API",
|
||||
"load_more": "Tải thêm",
|
||||
"loading_your_wallet": "Đang tải ví của bạn",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "Jọ rò",
|
||||
"agree_and_continue": "Jọ Rò àti Tẹ̀síwájú",
|
||||
"agree_to": "Tẹ́ ẹ bá dá àkáǹtì ẹ jọ rò ",
|
||||
"alert_notice": "Akiyesi",
|
||||
"all": "Gbogbo",
|
||||
"all_trades": "Gbogbo àwọn pàṣípààrọ̀",
|
||||
"all_transactions": "Gbogbo àwọn àránṣẹ́",
|
||||
|
@ -367,7 +368,12 @@
|
|||
"litecoin_enable_mweb_sync": "Mu mweb ọlọjẹ",
|
||||
"litecoin_mweb": "Mweb",
|
||||
"litecoin_mweb_always_scan": "Ṣeto mweb nigbagbogbo n ṣayẹwo",
|
||||
"litecoin_mweb_description": "Mweb jẹ ilana ilana tuntun ti o mu iyara wa yiyara, din owo, ati awọn iṣowo ikọkọ diẹ sii si Livcoin",
|
||||
"litecoin_mweb_dismiss": "Tuka",
|
||||
"litecoin_mweb_display_card": "Fihan kaadi Mweb",
|
||||
"litecoin_mweb_enable_later": "O le yan lati ṣiṣẹ Mweb lẹẹkansi labẹ awọn eto ifihan.",
|
||||
"litecoin_mweb_pegin": "Peg in",
|
||||
"litecoin_mweb_pegout": "Peg jade",
|
||||
"litecoin_mweb_scanning": "Mweb scanning",
|
||||
"litecoin_mweb_settings": "Awọn eto Mweb",
|
||||
"litecoin_mweb_warning": "Lilo Mweb yoo wa lakoko igbasilẹ ~ 600MB ti data, o le gba to iṣẹju 30 da lori iyara nẹtiwọọki. Awọn data akọkọ yii yoo ṣe igbasilẹ lẹẹkan si ki o wa fun gbogbo awọn Wolinkun LiveCooin",
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
"agree": "同意",
|
||||
"agree_and_continue": "同意并继续",
|
||||
"agree_to": "创建账户即表示您同意 ",
|
||||
"alert_notice": "注意",
|
||||
"all": "全部",
|
||||
"all_trades": "所有的变化",
|
||||
"all_transactions": "所有交易",
|
||||
|
@ -366,7 +367,12 @@
|
|||
"litecoin_enable_mweb_sync": "启用MWEB扫描",
|
||||
"litecoin_mweb": "MWEB",
|
||||
"litecoin_mweb_always_scan": "设置MWEB总是扫描",
|
||||
"litecoin_mweb_description": "MWEB是一项新协议,它将更快,更便宜和更多的私人交易带给Litecoin",
|
||||
"litecoin_mweb_dismiss": "解雇",
|
||||
"litecoin_mweb_display_card": "显示MWEB卡",
|
||||
"litecoin_mweb_enable_later": "您可以选择在显示设置下再次启用MWEB。",
|
||||
"litecoin_mweb_pegin": "钉进",
|
||||
"litecoin_mweb_pegout": "昏倒",
|
||||
"litecoin_mweb_scanning": "MWEB扫描",
|
||||
"litecoin_mweb_settings": "MWEB设置",
|
||||
"litecoin_mweb_warning": "使用MWEB最初将下载约600MB的数据,并且最多可能需要30分钟的时间,具体取决于网络速度。此初始数据只能下载一次,并适用于所有莱特币钱包",
|
||||
|
|
|
@ -107,6 +107,7 @@ import 'package:cw_bitcoin/pending_bitcoin_transaction.dart';
|
|||
import 'package:cw_bitcoin/bitcoin_receive_page_option.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_wallet.dart';
|
||||
import 'package:cw_bitcoin/electrum_wallet.dart';
|
||||
import 'package:cw_bitcoin/electrum_wallet_addresses.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_unspent.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_mnemonic.dart';
|
||||
import 'package:cw_bitcoin/bitcoin_transaction_priority.dart';
|
||||
|
@ -230,6 +231,7 @@ abstract class Bitcoin {
|
|||
bool txIsMweb(TransactionInfo txInfo);
|
||||
Future<void> setMwebEnabled(Object wallet, bool enabled);
|
||||
bool getMwebEnabled(Object wallet);
|
||||
String? getUnusedMwebAddress(Object wallet);
|
||||
}
|
||||
""";
|
||||
|
||||
|
|
Loading…
Reference in a new issue