CAKE-330 | added unspent coins details page to the app

This commit is contained in:
OleksandrSobol 2021-05-27 20:57:51 +03:00
parent b71e85b112
commit e36c07b0da
8 changed files with 189 additions and 1 deletions

View file

@ -40,6 +40,7 @@ import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart';
import 'package:cake_wallet/src/screens/support/support_page.dart'; import 'package:cake_wallet/src/screens/support/support_page.dart';
import 'package:cake_wallet/src/screens/trade_details/trade_details_page.dart'; import 'package:cake_wallet/src/screens/trade_details/trade_details_page.dart';
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart'; import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart';
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart'; import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart';
import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart'; import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
import 'package:cake_wallet/src/screens/exchange/exchange_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_page.dart';
@ -77,6 +78,8 @@ import 'package:cake_wallet/view_model/setup_pin_code_view_model.dart';
import 'package:cake_wallet/view_model/support_view_model.dart'; import 'package:cake_wallet/view_model/support_view_model.dart';
import 'package:cake_wallet/view_model/transaction_details_view_model.dart'; import 'package:cake_wallet/view_model/transaction_details_view_model.dart';
import 'package:cake_wallet/view_model/trade_details_view_model.dart'; import 'package:cake_wallet/view_model/trade_details_view_model.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart'; import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart';
import 'package:cake_wallet/view_model/auth_view_model.dart'; import 'package:cake_wallet/view_model/auth_view_model.dart';
@ -569,5 +572,14 @@ Future setup(
unspentCoinsListViewModel: getIt.get<UnspentCoinsListViewModel>() unspentCoinsListViewModel: getIt.get<UnspentCoinsListViewModel>()
)); ));
getIt.registerFactoryParam<UnspentCoinsDetailsViewModel,
UnspentCoinsItem, void>((item, _) =>
UnspentCoinsDetailsViewModel(unspentCoinsItem: item));
getIt.registerFactoryParam<UnspentCoinsDetailsPage,
UnspentCoinsItem, void>((UnspentCoinsItem item, _) =>
UnspentCoinsDetailsPage(unspentCoinsDetailsViewModel:
getIt.get<UnspentCoinsDetailsViewModel>(param1: item)));
_isSetupFinished = true; _isSetupFinished = true;
} }

View file

@ -9,10 +9,12 @@ import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart'; import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart'; import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
import 'package:cake_wallet/src/screens/support/support_page.dart'; import 'package:cake_wallet/src/screens/support/support_page.dart';
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart'; import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart';
import 'package:cake_wallet/src/screens/wyre/wyre_page.dart'; import 'package:cake_wallet/src/screens/wyre/wyre_page.dart';
import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart'; import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/routes.dart';
@ -360,6 +362,12 @@ Route<dynamic> createRoute(RouteSettings settings) {
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => getIt.get<UnspentCoinsListPage>()); builder: (_) => getIt.get<UnspentCoinsListPage>());
case Routes.unspentCoinsDetails:
return MaterialPageRoute<void>(
builder: (_) =>
getIt.get<UnspentCoinsDetailsPage>(
param1: settings.arguments as UnspentCoinsItem));
default: default:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => Scaffold( builder: (_) => Scaffold(

View file

@ -55,4 +55,5 @@ class Routes {
static const orderDetails = '/order_details'; static const orderDetails = '/order_details';
static const wyre = '/wyre'; static const wyre = '/wyre';
static const unspentCoinsList = '/unspent_coins_list'; static const unspentCoinsList = '/unspent_coins_list';
static const unspentCoinsDetails = '/unspent_coins_details';
} }

View file

@ -0,0 +1,52 @@
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
import 'package:cake_wallet/src/screens/transaction_details/widgets/textfield_list_row.dart';
import 'package:cake_wallet/src/screens/unspent_coins/widgets/unspent_coins_switch_row.dart';
import 'package:cake_wallet/src/widgets/standard_list.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart';
import 'package:flutter/material.dart';
import 'package:cake_wallet/src/widgets/standart_list_row.dart';
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
class UnspentCoinsDetailsPage extends BasePage {
UnspentCoinsDetailsPage({this.unspentCoinsDetailsViewModel});
@override
String get title => 'Unspent coins details';
final UnspentCoinsDetailsViewModel unspentCoinsDetailsViewModel;
@override
Widget body(BuildContext context) {
return SectionStandardList(
sectionCount: 1,
itemCounter: (int _) => unspentCoinsDetailsViewModel.items.length,
itemBuilder: (_, __, index) {
final item = unspentCoinsDetailsViewModel.items[index];
if (item is StandartListItem) {
return StandartListRow(title: '${item.title}:', value: item.value);
}
if (item is TextFieldListItem) {
return TextFieldListRow(
title: item.title,
value: item.value,
onSubmitted: item.onSubmitted,
);
}
if (item is UnspentCoinsSwitchItem) {
return Observer(builder: (_) => UnspentCoinsSwitchRow(
title: item.title,
switchValue: item.switchValue(),
onSwitchValueChange: item.onSwitchValueChange
));
}
return null;
});
}
}

View file

@ -1,3 +1,4 @@
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/unspent_coins/widgets/unspent_coins_list_item.dart'; import 'package:cake_wallet/src/screens/unspent_coins/widgets/unspent_coins_list_item.dart';
import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:cake_wallet/src/widgets/standard_list.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
@ -23,7 +24,9 @@ class UnspentCoinsListPage extends BasePage {
final item = unspentCoinsListViewModel.items[index]; final item = unspentCoinsListViewModel.items[index];
return GestureDetector( return GestureDetector(
onTap: () {print('Item taped');}, onTap: () =>
Navigator.of(context).pushNamed(Routes.unspentCoinsDetails,
arguments: item),
child: UnspentCoinsListItem( child: UnspentCoinsListItem(
address: item.address, address: item.address,
amount: item.amount, amount: item.amount,

View file

@ -0,0 +1,45 @@
import 'package:cake_wallet/src/widgets/standart_switch.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class UnspentCoinsSwitchRow extends StatelessWidget {
UnspentCoinsSwitchRow(
{this.title,
this.titleFontSize = 14,
this.switchValue,
this.onSwitchValueChange});
final String title;
final double titleFontSize;
final bool switchValue;
final void Function(bool value) onSwitchValueChange;
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
color: Theme.of(context).backgroundColor,
child: Padding(
padding:
const EdgeInsets.only(left: 24, top: 16, bottom: 16, right: 24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(title,
style: TextStyle(
fontSize: titleFontSize,
fontWeight: FontWeight.w500,
color: Theme.of(context)
.primaryTextTheme.overline.color),
textAlign: TextAlign.left),
Padding(
padding: EdgeInsets.only(top: 12),
child: StandartSwitch(
value: switchValue,
onTaped: () => onSwitchValueChange(!switchValue))
)
]),
),
);
}
}

View file

@ -0,0 +1,55 @@
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_list_item.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_switch_item.dart';
import 'package:mobx/mobx.dart';
part 'unspent_coins_details_view_model.g.dart';
class UnspentCoinsDetailsViewModel = UnspentCoinsDetailsViewModelBase
with _$UnspentCoinsDetailsViewModel;
abstract class UnspentCoinsDetailsViewModelBase with Store {
UnspentCoinsDetailsViewModelBase({this.unspentCoinsItem}) {
final amount = unspentCoinsItem.amount ?? '';
final address = unspentCoinsItem.address ?? '';
isFrozen = unspentCoinsItem.isFrozen ?? false;
note = unspentCoinsItem.note ?? '';
items = [
StandartListItem(
title: 'Amount',
value: amount
),
StandartListItem(
title: 'Address',
value: address
),
TextFieldListItem(
title: S.current.note_tap_to_change,
value: note,
onSubmitted: (value) {
note = value;
}),
UnspentCoinsSwitchItem(
title: 'Freeze',
value: '',
switchValue: () => isFrozen,
onSwitchValueChange: (value) {
isFrozen = value;
}
)
];
}
@observable
bool isFrozen;
@observable
String note;
final UnspentCoinsItem unspentCoinsItem;
List<TransactionDetailsListItem> items;
}

View file

@ -0,0 +1,12 @@
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_list_item.dart';
class UnspentCoinsSwitchItem extends TransactionDetailsListItem {
UnspentCoinsSwitchItem({
String title,
String value,
this.switchValue,
this.onSwitchValueChange}) : super(title: title, value: value);
final bool Function() switchValue;
final void Function(bool value) onSwitchValueChange;
}