You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.3 KiB
94 lines
2.3 KiB
import 'package:flutter/foundation.dart';
|
|
import 'package:mobx/mobx.dart';
|
|
import 'package:cake_wallet/core/wallet_base.dart';
|
|
import 'package:cake_wallet/bitcoin/bitcoin_wallet.dart';
|
|
import 'package:cake_wallet/monero/monero_wallet.dart';
|
|
|
|
part 'address_edit_or_create_view_model.g.dart';
|
|
|
|
class AddressEditOrCreateViewModel = AddressEditOrCreateViewModelBase
|
|
with _$AddressEditOrCreateViewModel;
|
|
|
|
abstract class AddressEditOrCreateState {}
|
|
|
|
class AddressEditOrCreateStateInitial extends AddressEditOrCreateState {}
|
|
|
|
class AddressIsSaving extends AddressEditOrCreateState {}
|
|
|
|
class AddressSavedSuccessfully extends AddressEditOrCreateState {}
|
|
|
|
class AddressEditOrCreateStateFailure extends AddressEditOrCreateState {
|
|
AddressEditOrCreateStateFailure({this.error});
|
|
|
|
String error;
|
|
}
|
|
|
|
abstract class AddressEditOrCreateViewModelBase with Store {
|
|
AddressEditOrCreateViewModelBase({@required WalletBase wallet, dynamic item})
|
|
: isEdit = item != null,
|
|
state = AddressEditOrCreateStateInitial(),
|
|
label = item?.name as String,
|
|
_item = item,
|
|
_wallet = wallet;
|
|
|
|
dynamic _item;
|
|
|
|
@observable
|
|
AddressEditOrCreateState state;
|
|
|
|
@observable
|
|
String label;
|
|
|
|
bool isEdit;
|
|
|
|
final WalletBase _wallet;
|
|
|
|
Future<void> save() async {
|
|
final wallet = _wallet;
|
|
|
|
try {
|
|
state = AddressIsSaving();
|
|
|
|
if (isEdit) {
|
|
await _update();
|
|
} else {
|
|
await _createNew();
|
|
}
|
|
|
|
state = AddressSavedSuccessfully();
|
|
} catch (e) {
|
|
state = AddressEditOrCreateStateFailure(error: e.toString());
|
|
}
|
|
}
|
|
|
|
Future<void> _createNew() async {
|
|
final wallet = _wallet;
|
|
|
|
if (wallet is BitcoinWallet) {
|
|
await wallet.generateNewAddress(label: label);
|
|
}
|
|
|
|
if (wallet is MoneroWallet) {
|
|
await wallet.subaddressList
|
|
.addSubaddress(accountIndex: wallet.account.id, label: label);
|
|
await wallet.save();
|
|
}
|
|
}
|
|
|
|
Future<void> _update() async {
|
|
final wallet = _wallet;
|
|
|
|
if (wallet is BitcoinWallet) {
|
|
await wallet.updateAddress(_item.address as String, label: label);
|
|
}
|
|
|
|
if (wallet is MoneroWallet) {
|
|
await wallet.subaddressList.setLabelSubaddress(
|
|
accountIndex: wallet.account.id,
|
|
addressIndex: _item.id as int,
|
|
label: label);
|
|
await wallet.save();
|
|
}
|
|
}
|
|
}
|