dev
dart 97 lines 4.43 KB
Raw
1 import 'package:cake_wallet/entities/new_ui_entities/list_item/list_Item_checkbox.dart';
2 import 'package:cake_wallet/entities/new_ui_entities/list_item/list_item_regular_row.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart';
5 import 'package:cake_wallet/src/widgets/new_list_row/new_list_section.dart';
6 import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart';
7 import 'package:flutter/material.dart';
8 import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
9
10 class ProviderSelectorPage extends StatelessWidget {
11 const ProviderSelectorPage({super.key, required this.exchangeViewModel});
12
13 final ExchangeViewModel exchangeViewModel;
14
15 @override
16 Widget build(BuildContext context) {
17 final decentralizedProviders =
18 exchangeViewModel.selectedProviders.where((item) => !item.description.isCentralized);
19 final centralizedProviders =
20 exchangeViewModel.selectedProviders.where((item) => item.description.isCentralized);
21
22 return Column(
23 children: [
24 ModalTopBar(
25 title: S.of(context).change_provider,
26 leadingIcon: Icon(Icons.arrow_back_ios_new),
27 leadingSemanticLabel: S.of(context).seed_alert_back,
28 onLeadingPressed: Navigator.of(context).maybePop,
29 ),
30 Expanded(
31 child: SingleChildScrollView(
32 controller: ModalScrollController.of(context),
33 child: Column(
34 spacing: 24,
35 children: [
36 Text(
37 "${S.of(context).change_provider_desc_1}\n${S.of(context).change_provider_desc_2}",
38 textAlign: TextAlign.center,
39 style: TextStyle(
40 fontSize: 12,
41 fontWeight: FontWeight.w400,
42 color: Theme.of(context).colorScheme.onSurfaceVariant)),
43 Padding(
44 padding: const EdgeInsets.symmetric(horizontal: 16.0),
45 child: NewListSections(
46 showHeader: true,
47 getCheckboxValue: (_) => exchangeViewModel.forcedProvider == null,
48 updateCheckboxValue: (key, value) {},
49 sections: {
50 if (exchangeViewModel.bestRateProvider != null)
51 S.of(context).best_rate: [
52 ListItemCheckbox(
53 iconPath: exchangeViewModel.bestRateProvider!.description.image,
54 keyValue: "bestrate",
55 label: exchangeViewModel.bestRateProvider!.title,
56 subtitle:
57 exchangeViewModel.bestRateProvider!.description.isCentralized
58 ? S.of(context).centralized
59 : S.of(context).decentralized,
60 value: exchangeViewModel.forcedProvider == null,
61 onChanged: (val) {
62 exchangeViewModel.setForcedProvider(null);
63 Navigator.of(context).pop();
64 }),
65 ],
66 S.of(context).decentralized: decentralizedProviders
67 .map((item) => ListItemRegularRow(
68 iconPath: item.description.image,
69 keyValue: item.title,
70 label: item.title,
71 onTap: () {
72 exchangeViewModel.setForcedProvider(item);
73 Navigator.of(context).pop();
74 }))
75 .toList(),
76 S.of(context).centralized: centralizedProviders
77 .map((item) => ListItemRegularRow(
78 iconPath: item.description.image,
79 keyValue: item.title,
80 label: item.title,
81 onTap: () {
82 exchangeViewModel.setForcedProvider(item);
83 Navigator.of(context).pop();
84 }))
85 .toList(),
86 },
87 ),
88 ),
89 SizedBox(height: 18),
90 ],
91 ),
92 ),
93 )
94 ],
95 );
96 }
97 }