CAKE-15 | created header row, transaction page, balance view model, formatted item list, wallet balance; applied new design to trade and transaction rows; applied transaction page to dashboard page; applied balance view model, trade store, trade filter store and transaction filter store to dashboard view model; changed trade list item and transaction list item

This commit is contained in:
Oleksandr Sobol
2020-07-23 15:20:52 +03:00
parent 25436d9b94
commit bdfe208d20
27 changed files with 938 additions and 1312 deletions
@@ -0,0 +1,62 @@
import 'package:cake_wallet/core/wallet_base.dart';
import 'package:mobx/mobx.dart';
import 'package:cake_wallet/src/domain/exchange/exchange_provider_description.dart';
import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
part 'trade_filter_store.g.dart';
class TradeFilterStore = TradeFilterStoreBase with _$TradeFilterStore;
abstract class TradeFilterStoreBase with Store {
TradeFilterStoreBase(
{this.displayXMRTO = true,
this.displayChangeNow = true,
this.displayMorphToken = true,
this.wallet});
@observable
bool displayXMRTO;
@observable
bool displayChangeNow;
@observable
bool displayMorphToken;
WalletBase wallet;
@action
void toggleDisplayExchange(ExchangeProviderDescription provider) {
switch (provider) {
case ExchangeProviderDescription.changeNow:
displayChangeNow = !displayChangeNow;
break;
case ExchangeProviderDescription.xmrto:
displayXMRTO = !displayXMRTO;
break;
case ExchangeProviderDescription.morphToken:
displayMorphToken = !displayMorphToken;
break;
}
}
List<TradeListItem> filtered({List<TradeListItem> trades}) {
final _trades =
trades.where((item) => item.trade.walletId == wallet.id).toList();
final needToFilter = !displayChangeNow || !displayXMRTO || !displayMorphToken;
return needToFilter
? trades
.where((item) =>
(displayXMRTO &&
item.trade.provider == ExchangeProviderDescription.xmrto) ||
(displayChangeNow &&
item.trade.provider ==
ExchangeProviderDescription.changeNow) ||
(displayMorphToken &&
item.trade.provider ==
ExchangeProviderDescription.morphToken))
.toList()
: _trades;
}
}
+35
View File
@@ -0,0 +1,35 @@
import 'dart:async';
import 'package:cake_wallet/src/domain/exchange/trade.dart';
import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
import 'package:flutter/cupertino.dart';
import 'package:hive/hive.dart';
import 'package:mobx/mobx.dart';
import 'package:cake_wallet/store/settings_store.dart';
part 'trades_store.g.dart';
class TradesStore = TradesStoreBase with _$TradesStore;
abstract class TradesStoreBase with Store {
TradesStoreBase({this.tradesSource, this.settingsStore}) {
trades = <TradeListItem>[];
_onTradesChanged =
tradesSource.watch().listen((_) async => await updateTradeList());
updateTradeList();
}
Box<Trade> tradesSource;
StreamSubscription<BoxEvent> _onTradesChanged;
SettingsStore settingsStore;
@observable
List<TradeListItem> trades;
@action
Future updateTradeList() async => trades =
tradesSource.values.map((trade) => TradeListItem(
trade: trade,
displayMode: settingsStore.balanceDisplayMode)).toList();
}
@@ -0,0 +1,69 @@
import 'package:mobx/mobx.dart';
import 'package:cake_wallet/src/domain/common/transaction_direction.dart';
import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart';
part 'transaction_filter_store.g.dart';
class TransactionFilterStore = TransactionFilterStoreBase
with _$TransactionFilterStore;
abstract class TransactionFilterStoreBase with Store {
TransactionFilterStoreBase(
{this.displayIncoming = true, this.displayOutgoing = true});
@observable
bool displayIncoming;
@observable
bool displayOutgoing;
@observable
DateTime startDate;
@observable
DateTime endDate;
@action
void toggleIncoming() => displayIncoming = !displayIncoming;
@action
void toggleOutgoing() => displayOutgoing = !displayOutgoing;
@action
void changeStartDate(DateTime date) => startDate = date;
@action
void changeEndDate(DateTime date) => endDate = date;
List<TransactionListItem> filtered({List<TransactionListItem> transactions}) {
var _transactions = <TransactionListItem>[];
final needToFilter = !displayOutgoing ||
!displayIncoming ||
(startDate != null && endDate != null);
if (needToFilter) {
_transactions = transactions.where((item) {
var allowed = true;
if (allowed && startDate != null && endDate != null) {
allowed = startDate.isBefore(item.transaction.date) &&
endDate.isAfter(item.transaction.date);
}
if (allowed && (!displayOutgoing || !displayIncoming)) {
allowed = (displayOutgoing &&
item.transaction.direction ==
TransactionDirection.outgoing) ||
(displayIncoming &&
item.transaction.direction == TransactionDirection.incoming);
}
return allowed;
}).toList();
} else {
_transactions = transactions;
}
return _transactions;
}
}