filter contacts and wallets by type
Serhii committed
Nov 5, 2022 at 20:05 UTC
2cd748c151488a8378d1e28c25a98588ad163c6e
7 files changed
+51
-19
lib/di.dart
+6
-3
@@ -153,6 +153,7 @@ import 'package:cake_wallet/anypay/any_pay_payment_committed_info.dart';
153
import 'package:cake_wallet/ionia/ionia_any_pay_payment_info.dart';
154
import 'package:cake_wallet/src/screens/receive/fullscreen_qr_page.dart';
155
import 'package:cake_wallet/core/wallet_loading_service.dart';
156
+import 'package:cw_core/crypto_currency.dart';
157
158
final getIt = GetIt.instance;
159
@@ -461,9 +462,11 @@ Future setup(
462
getIt.registerFactory(
463
() => ContactListViewModel(_contactSource, _walletInfoSource));
464
464
- getIt.registerFactoryParam<ContactListPage, bool, void>(
465
- (bool isEditable, _) => ContactListPage(getIt.get<ContactListViewModel>(),
466
- isEditable: isEditable));
465
+ getIt.registerFactoryParam<ContactListPage, bool, CryptoCurrency?>((bool isEditable, CryptoCurrency? cur)
466
+ => ContactListPage(
467
+ getIt.get<ContactListViewModel>(),
468
+ isEditable: isEditable,
469
+ selectedCurrency: cur));
470
471
getIt.registerFactoryParam<ContactPage, ContactRecord?, void>(
472
(ContactRecord? contact, _) =>
lib/router.dart
+6
-2
@@ -74,6 +74,7 @@ import 'package:cake_wallet/src/screens/ionia/ionia.dart';
74
import 'package:cake_wallet/src/screens/ionia/cards/ionia_payment_status_page.dart';
75
import 'package:cake_wallet/anypay/any_pay_payment_committed_info.dart';
76
import 'package:cake_wallet/ionia/ionia_any_pay_payment_info.dart';
77
+import 'package:cw_core/crypto_currency.dart';
78
79
late RouteSettings currentRouteSettings;
80
@@ -298,11 +299,14 @@ Route<dynamic> createRoute(RouteSettings settings) {
299
300
case Routes.addressBook:
301
return MaterialPageRoute<void>(
301
- builder: (_) => getIt.get<ContactListPage>(param1: true));
302
+ builder: (_) =>
303
+ getIt.get<ContactListPage>(param1: true, param2: null));
304
305
case Routes.pickerAddressBook:
306
+ final selectedCurrency = settings.arguments as CryptoCurrency;
307
return MaterialPageRoute<void>(
305
- builder: (_) => getIt.get<ContactListPage>(param1: false));
308
+ builder: (_) => getIt.get<ContactListPage>(param1: false,
309
+ param2: selectedCurrency));
310
311
case Routes.addressBookAddContact:
312
return CupertinoPageRoute<void>(
lib/src/screens/contact/contact_list_page.dart
+14
-11
@@ -16,10 +16,12 @@ import 'package:cake_wallet/view_model/contact_list/contact_list_view_model.dart
16
import 'package:cake_wallet/src/widgets/collapsible_standart_list.dart';
17
18
class ContactListPage extends BasePage {
19
- ContactListPage(this.contactListViewModel, {this.isEditable = true});
19
+ ContactListPage(this.contactListViewModel,
20
+ {this.isEditable = true, required this.selectedCurrency});
21
22
final ContactListViewModel contactListViewModel;
23
final bool isEditable;
24
+ final CryptoCurrency? selectedCurrency;
25
26
@override
27
String get title => S.current.address_book;
@@ -60,11 +62,13 @@ class ContactListPage extends BasePage {
62
63
@override
64
Widget body(BuildContext context) {
65
+ final contacts =
66
+ contactListViewModel.getContacts(isEditable, selectedCurrency);
67
+ final walletContacts =
68
+ contactListViewModel.getWallets(isEditable, selectedCurrency);
69
return Container(
70
padding: EdgeInsets.only(top: 20.0, bottom: 20.0),
65
- child: Observer(
66
- builder: (_) {
67
- return CollapsibleSectionList(
71
+ child: CollapsibleSectionList(
72
context: context,
73
sectionCount: 2,
74
themeColor: Theme.of(context).primaryTextTheme.headline6!.color!,
@@ -82,15 +86,15 @@ class ContactListPage extends BasePage {
86
child: Text(title, style: TextStyle(fontSize: 36)));
87
},
88
itemCounter: (int sectionIndex) => sectionIndex == 0
85
- ? contactListViewModel.walletContacts.length
86
- : contactListViewModel.contacts.length,
89
+ ? walletContacts.length
90
+ : contacts.length,
91
itemBuilder: (_, sectionIndex, index) {
92
if (sectionIndex == 0) {
89
- final walletInfo = contactListViewModel.walletContacts[index];
93
+ final walletInfo = walletContacts[index];
94
return generateRaw(context, walletInfo);
95
}
96
93
- final contact = contactListViewModel.contacts[index];
97
+ final contact = contacts[index];
98
final content = generateRaw(context, contact);
99
return !isEditable
100
? content
@@ -100,9 +104,8 @@ class ContactListPage extends BasePage {
104
child: content,
105
);
106
},
103
- );
104
- },
105
- ));
107
+ )
108
+ );
109
}
110
111
Widget generateRaw(BuildContext context, ContactBase contact) {
lib/src/screens/exchange/widgets/exchange_card.dart
+2
-1
@@ -395,7 +395,8 @@ class ExchangeCardState extends State<ExchangeCard> {
395
buttonColor: widget.addressButtonsColor,
396
validator: widget.addressTextFieldValidator,
397
onPushPasteButton: widget.onPushPasteButton,
398
- onPushAddressBookButton: widget.onPushAddressBookButton
398
+ onPushAddressBookButton: widget.onPushAddressBookButton,
399
+ selectedCurrency: _selectedCurrency
400
),
401
402
)
lib/src/screens/send/widgets/send_card.dart
+1
@@ -155,6 +155,7 @@ class SendCardState extends State<SendCard>
155
await output.fetchParsedAddress(context);
156
},
157
validator: validator,
158
+ selectedCurrency: sendViewModel.currency,
159
);
160
}),
161
if (output.isParsedAddress) Padding(
lib/src/widgets/address_text_field.dart
+5
-2
@@ -4,6 +4,7 @@ import 'package:cake_wallet/routes.dart';
4
import 'package:cake_wallet/generated/i18n.dart';
5
import 'package:cake_wallet/entities/qr_scanner.dart';
6
import 'package:cake_wallet/entities/contact_base.dart';
7
+import 'package:cw_core/crypto_currency.dart';
8
9
enum AddressTextFieldOption { paste, qrCode, addressBook }
10
@@ -26,7 +27,8 @@ class AddressTextField extends StatelessWidget {
27
this.hintStyle,
28
this.validator,
29
this.onPushPasteButton,
29
- this.onPushAddressBookButton});
30
+ this.onPushAddressBookButton,
31
+ this.selectedCurrency});
32
33
static const prefixIconWidth = 34.0;
34
static const prefixIconHeight = 34.0;
@@ -47,6 +49,7 @@ class AddressTextField extends StatelessWidget {
49
final FocusNode? focusNode;
50
final Function(BuildContext context)? onPushPasteButton;
51
final Function(BuildContext context)? onPushAddressBookButton;
52
+ final CryptoCurrency? selectedCurrency;
53
54
@override
55
Widget build(BuildContext context) {
@@ -207,7 +210,7 @@ class AddressTextField extends StatelessWidget {
210
211
Future<void> _presetAddressBookPicker(BuildContext context) async {
212
final contact = await Navigator.of(context, rootNavigator: true)
210
- .pushNamed(Routes.pickerAddressBook);
213
+ .pushNamed(Routes.pickerAddressBook,arguments: selectedCurrency);
214
215
if (contact is ContactBase && contact.address != null) {
216
controller?.text = contact.address;
lib/view_model/contact_list/contact_list_view_model.dart
+17
@@ -7,6 +7,7 @@ import 'package:mobx/mobx.dart';
7
import 'package:cake_wallet/entities/contact_record.dart';
8
import 'package:cake_wallet/entities/contact.dart';
9
import 'package:cake_wallet/utils/mobx.dart';
10
+import 'package:cw_core/crypto_currency.dart';
11
12
part 'contact_list_view_model.g.dart';
13
@@ -44,4 +45,20 @@ abstract class ContactListViewModelBase with Store {
45
StreamSubscription<BoxEvent>? _subscription;
46
47
Future<void> delete(ContactRecord contact) async => contact.original.delete();
48
+
49
+ List<ContactRecord> getContacts(bool isEditable, CryptoCurrency? cur) {
50
+ if (!isEditable) {
51
+ return contacts.where((element) => element.type == cur).toList();
52
+ }
53
+
54
+ return contacts;
55
+ }
56
+
57
+ List<WalletContact> getWallets(bool isEditable, CryptoCurrency? cur) {
58
+ if (!isEditable) {
59
+ return walletContacts.where((element) => element.type == cur).toList();
60
+ }
61
+
62
+ return walletContacts;
63
+ }
64
}