mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-11-17 01:37:40 +00:00
CAKE-330 | added unspent coins details page to the app
This commit is contained in:
parent
b71e85b112
commit
e36c07b0da
8 changed files with 189 additions and 1 deletions
12
lib/di.dart
12
lib/di.dart
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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';
|
||||||
}
|
}
|
|
@ -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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
|
|
@ -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))
|
||||||
|
)
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
12
lib/view_model/unspent_coins/unspent_coins_switch_item.dart
Normal file
12
lib/view_model/unspent_coins/unspent_coins_switch_item.dart
Normal 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;
|
||||||
|
}
|
Loading…
Reference in a new issue