Merge pull request #119 from cake-tech/CAKE-92-templates-saving-bug

CAKE-92 | fixed templates saving bug on send and exchange pages; adde…
This commit is contained in:
M 2020-10-09 21:36:08 +03:00
commit 9cb7e77a5e
7 changed files with 136 additions and 76 deletions

View file

@ -222,10 +222,10 @@ Future setup(
addressEditOrCreateViewModel:
getIt.get<WalletAddressEditOrCreateViewModel>(param1: item)));
// getIt.get<SendTemplateStore>()
getIt.registerFactory<SendViewModel>(() => SendViewModel(
getIt.get<AppStore>().wallet,
getIt.get<AppStore>().settingsStore,
getIt.get<SendTemplateStore>(),
getIt.get<FiatConversionStore>()));
getIt.registerFactory(
@ -318,10 +318,10 @@ Future setup(
() => NodeCreateOrEditPage(getIt.get<NodeCreateOrEditViewModel>()));
getIt.registerFactory(() => ExchangeViewModel(
wallet: getIt.get<AppStore>().wallet,
exchangeTemplateStore: getIt.get<ExchangeTemplateStore>(),
trades: tradesSource,
tradesStore: getIt.get<TradesStore>()));
getIt.get<AppStore>().wallet,
tradesSource,
getIt.get<ExchangeTemplateStore>(),
getIt.get<TradesStore>()));
getIt.registerFactory(() => ExchangeTradeViewModel(
wallet: getIt.get<AppStore>().wallet,

View file

@ -307,8 +307,7 @@ class ExchangePage extends BasePage {
),
Observer(builder: (_) {
final templates = exchangeViewModel.templates;
final itemCount =
exchangeViewModel.templates.length;
final itemCount = templates.length;
return ListView.builder(
scrollDirection: Axis.horizontal,
@ -338,24 +337,22 @@ class ExchangePage extends BasePage {
alertContent: S
.of(context)
.confirm_delete_template,
leftButtonText:
S.of(context).delete,
rightButtonText:
S.of(context).delete,
leftButtonText:
S.of(context).cancel,
actionLeftButton: () {
actionRightButton: () {
Navigator.of(
dialogContext)
.pop();
exchangeViewModel
.exchangeTemplateStore
.remove(
.removeTemplate(
template:
template);
exchangeViewModel
.exchangeTemplateStore
.update();
.updateTemplate();
},
actionRightButton: () =>
actionLeftButton: () =>
Navigator.of(
dialogContext)
.pop());

View file

@ -134,6 +134,7 @@ class ExchangeTemplatePage extends BasePage {
initialIsAddressEditable: exchangeViewModel
.isDepositAddressEnabled,
isAmountEstimated: false,
hasRefundAddress: true,
currencies: CryptoCurrency.all,
onCurrencySelected: (currency) =>
exchangeViewModel.changeDepositCurrency(
@ -220,7 +221,7 @@ class ExchangeTemplatePage extends BasePage {
PrimaryButton(
onPressed: () {
if (_formKey.currentState.validate()) {
exchangeViewModel.exchangeTemplateStore.addTemplate(
exchangeViewModel.addTemplate(
amount: exchangeViewModel.depositAmount,
depositCurrency:
exchangeViewModel.depositCurrency.toString(),
@ -229,7 +230,7 @@ class ExchangeTemplatePage extends BasePage {
provider: exchangeViewModel.provider.toString(),
depositAddress: exchangeViewModel.depositAddress,
receiveAddress: exchangeViewModel.receiveAddress);
exchangeViewModel.exchangeTemplateStore.update();
exchangeViewModel.updateTemplate();
Navigator.of(context).pop();
}
},

View file

@ -1,7 +1,9 @@
import 'dart:ui';
import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
import 'package:cake_wallet/src/widgets/picker.dart';
import 'package:cake_wallet/src/widgets/template_tile.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@ -416,53 +418,53 @@ class SendPage extends BasePage {
)),
),
),
// Observer(
// builder: (_) {
// final templates = sendViewModel.templates;
// final itemCount = templates.length;
Observer(
builder: (_) {
final templates = sendViewModel.templates;
final itemCount = templates.length;
// return ListView.builder(
// scrollDirection: Axis.horizontal,
// shrinkWrap: true,
// physics: NeverScrollableScrollPhysics(),
// itemCount: itemCount,
// itemBuilder: (context, index) {
// final template = templates[index];
return ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: itemCount,
itemBuilder: (context, index) {
final template = templates[index];
// return TemplateTile(
// key: UniqueKey(),
// to: template.name,
// amount: template.amount,
// from: template.cryptoCurrency,
// onTap: () {
// _addressController.text = template.address;
// _cryptoAmountController.text = template.amount;
// getOpenaliasRecord(context);
// },
// onRemove: () {
// showPopUp<void>(
// context: context,
// builder: (dialogContext) {
// return AlertWithTwoActions(
// alertTitle: S.of(context).template,
// alertContent: S.of(context).confirm_delete_template,
// leftButtonText: S.of(context).delete,
// rightButtonText: S.of(context).cancel,
// actionLeftButton: () {
// Navigator.of(dialogContext).pop();
// sendViewModel.sendTemplateStore.remove(template: template);
// sendViewModel.sendTemplateStore.update();
// },
// actionRightButton: () => Navigator.of(dialogContext).pop()
// );
// }
// );
// },
// );
// }
// );
// }
// )
return TemplateTile(
key: UniqueKey(),
to: template.name,
amount: template.amount,
from: template.cryptoCurrency,
onTap: () {
_addressController.text = template.address;
_cryptoAmountController.text = template.amount;
getOpenaliasRecord(context);
},
onRemove: () {
showPopUp<void>(
context: context,
builder: (dialogContext) {
return AlertWithTwoActions(
alertTitle: S.of(context).template,
alertContent: S.of(context).confirm_delete_template,
rightButtonText: S.of(context).delete,
leftButtonText: S.of(context).cancel,
actionRightButton: () {
Navigator.of(dialogContext).pop();
sendViewModel.removeTemplate(template: template);
sendViewModel.updateTemplate();
},
actionLeftButton: () => Navigator.of(dialogContext).pop()
);
}
);
},
);
}
);
}
)
],
),
),
@ -507,6 +509,14 @@ class SendPage extends BasePage {
}
});
_fiatAmountController.addListener(() {
final amount = _fiatAmountController.text;
if (amount != sendViewModel.fiatAmount) {
sendViewModel.setFiatAmount(amount);
}
});
reaction((_) => sendViewModel.sendAll, (bool all) {
if (all) {
_cryptoAmountController.text = S.current.all;

View file

@ -134,7 +134,7 @@ class SendTemplatePage extends BasePage {
signed: false, decimal: true),
inputFormatters: [
BlacklistingTextInputFormatter(
RegExp('[\\-|\\ |\\,]'))
RegExp('[\\-|\\ ]'))
],
prefixIcon: Padding(
padding: EdgeInsets.only(top: 9),
@ -172,7 +172,7 @@ class SendTemplatePage extends BasePage {
signed: false, decimal: true),
inputFormatters: [
BlacklistingTextInputFormatter(
RegExp('[\\-|\\ |\\,]'))
RegExp('[\\-|\\ ]'))
],
prefixIcon: Padding(
padding: EdgeInsets.only(top: 9),
@ -210,12 +210,12 @@ class SendTemplatePage extends BasePage {
bottomSection: PrimaryButton(
onPressed: () {
if (_formKey.currentState.validate()) {
// sendViewModel.sendTemplateStore.addTemplate(
// name: _nameController.text,
// address: _addressController.text,
// cryptoCurrency: sendViewModel.currency.title,
// amount: _cryptoAmountController.text);
// sendViewModel.sendTemplateStore.update();
sendViewModel.addTemplate(
name: _nameController.text,
address: _addressController.text,
cryptoCurrency: sendViewModel.currency.title,
amount: _cryptoAmountController.text);
sendViewModel.updateTemplate();
Navigator.of(context).pop();
}
},
@ -249,6 +249,22 @@ class SendTemplatePage extends BasePage {
}
});
_cryptoAmountController.addListener(() {
final amount = _cryptoAmountController.text;
if (amount != sendViewModel.cryptoAmount) {
sendViewModel.setCryptoAmount(amount);
}
});
_fiatAmountController.addListener(() {
final amount = _fiatAmountController.text;
if (amount != sendViewModel.fiatAmount) {
sendViewModel.setFiatAmount(amount);
}
});
_addressController.addListener(() {
final address = _addressController.text;

View file

@ -27,10 +27,10 @@ class ExchangeViewModel = ExchangeViewModelBase with _$ExchangeViewModel;
abstract class ExchangeViewModelBase with Store {
ExchangeViewModelBase(
{this.wallet,
this.wallet,
this.trades,
this.exchangeTemplateStore,
this.tradesStore}) {
this._exchangeTemplateStore,
this.tradesStore) {
providerList = [
XMRTOExchangeProvider(),
ChangeNowExchangeProvider(),
@ -54,7 +54,7 @@ abstract class ExchangeViewModelBase with Store {
final WalletBase wallet;
final Box<Trade> trades;
final ExchangeTemplateStore exchangeTemplateStore;
final ExchangeTemplateStore _exchangeTemplateStore;
final TradesStore tradesStore;
@observable
@ -101,7 +101,7 @@ abstract class ExchangeViewModelBase with Store {
@computed
ObservableList<ExchangeTemplate> get templates =>
exchangeTemplateStore.templates;
_exchangeTemplateStore.templates;
@action
void changeProvider({ExchangeProvider provider}) {
@ -267,6 +267,22 @@ abstract class ExchangeViewModelBase with Store {
_onPairChange();
}
void updateTemplate() => _exchangeTemplateStore.update();
void addTemplate({String amount, String depositCurrency, String receiveCurrency,
String provider, String depositAddress, String receiveAddress}) =>
_exchangeTemplateStore.addTemplate(
amount: amount,
depositCurrency: depositCurrency,
receiveCurrency: receiveCurrency,
provider: provider,
depositAddress: depositAddress,
receiveAddress: receiveAddress
);
void removeTemplate({ExchangeTemplate template}) =>
_exchangeTemplateStore.remove(template: template);
List<ExchangeProvider> providersForCurrentPair() {
return _providersForPair(from: depositCurrency, to: receiveCurrency);
}

View file

@ -1,4 +1,6 @@
import 'package:cake_wallet/entities/openalias_record.dart';
import 'package:cake_wallet/entities/template.dart';
import 'package:cake_wallet/store/templates/send_template_store.dart';
import 'package:intl/intl.dart';
import 'package:mobx/mobx.dart';
import 'package:cake_wallet/core/template_validator.dart';
@ -29,7 +31,8 @@ class SendViewModel = SendViewModelBase with _$SendViewModel;
abstract class SendViewModelBase with Store {
SendViewModelBase(
this._wallet, this._settingsStore, this._fiatConversationStore)
this._wallet, this._settingsStore, this._sendTemplateStore,
this._fiatConversationStore)
: state = InitialExecutionState(),
_cryptoNumberFormat = NumberFormat(),
sendAll = false {
@ -88,8 +91,12 @@ abstract class SendViewModelBase with Store {
@computed
bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus;
@computed
ObservableList<Template> get templates => _sendTemplateStore.templates;
final WalletBase _wallet;
final SettingsStore _settingsStore;
final SendTemplateStore _sendTemplateStore;
final FiatConversionStore _fiatConversationStore;
final NumberFormat _cryptoNumberFormat;
@ -219,4 +226,17 @@ abstract class SendViewModelBase with Store {
_cryptoNumberFormat.maximumFractionDigits = maximumFractionDigits;
}
void updateTemplate() => _sendTemplateStore.update();
void addTemplate({String name, String address, String cryptoCurrency,
String amount}) => _sendTemplateStore
.addTemplate(
name: name,
address: address,
cryptoCurrency: cryptoCurrency,
amount: amount);
void removeTemplate({Template template}) =>
_sendTemplateStore.remove(template: template);
}