dev
dart 1,790 lines 80.4 KB
Raw
1 import 'dart:async' show Timer;
2
3 import 'package:cake_wallet/.secrets.g.dart' as secrets;
4 import 'package:cake_wallet/anonpay/anonpay_api.dart';
5 import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
6 import 'package:cake_wallet/anypay/anypay_api.dart';
7 import 'package:cake_wallet/bitcoin/bitcoin.dart';
8 import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
9 import 'package:cake_wallet/core/address_resolver/address_resolver_service.dart';
10 import 'package:cake_wallet/core/anypay/anypay_service.dart';
11 import 'package:cake_wallet/core/address_resolver/yat/yat_service.dart';
12 import 'package:cake_wallet/core/address_resolver/yat/yat_store.dart';
13 import 'package:cake_wallet/entities/bitcoin_amount_display_mode.dart';
14 import 'package:cake_wallet/evm/evm.dart';
15 import 'package:cake_wallet/buy/dfx/dfx_buy_provider.dart';
16 import 'package:cake_wallet/buy/moonpay/moonpay_provider.dart';
17 import 'package:cake_wallet/buy/onramper/onramper_buy_provider.dart';
18 import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart';
19 import 'package:cake_wallet/cake_pay/cake_pay.dart';
20 import 'package:cake_wallet/cake_pay/src/models/cake_pay_vendor.dart';
21 import 'package:cake_wallet/cake_pay/src/services/cake_pay_api.dart';
22 import 'package:cake_wallet/cake_pay/src/services/cake_pay_service.dart';
23 import 'package:cake_wallet/core/auth_service.dart';
24 import 'package:cake_wallet/core/backup_service_v3.dart';
25 import 'package:cake_wallet/core/key_service.dart';
26 import 'package:cake_wallet/core/new_wallet_arguments.dart';
27 import 'package:cake_wallet/core/new_wallet_type_arguments.dart';
28 import 'package:cake_wallet/core/node_switching_service.dart';
29 import 'package:cake_wallet/core/reset_service.dart';
30 import 'package:cake_wallet/core/secure_storage.dart';
31 import 'package:cake_wallet/core/selectable_option.dart';
32 import 'package:cake_wallet/core/totp_request_details.dart';
33 import 'package:cake_wallet/core/trade_monitor.dart';
34 import 'package:cake_wallet/core/wallet_creation_service.dart';
35 import 'package:cake_wallet/core/wallet_loading_service.dart';
36 import 'package:cake_wallet/decred/decred.dart';
37 import 'package:cake_wallet/entities/biometric_auth.dart';
38 import 'package:cake_wallet/entities/bridge_transfer.dart';
39 import 'package:cake_wallet/entities/contact.dart';
40 import 'package:cake_wallet/entities/contact_record.dart';
41 import 'package:cake_wallet/entities/exchange_api_mode.dart';
42 import 'package:cake_wallet/entities/hardware_wallet/require_hardware_wallet_connection.dart';
43 import 'package:cake_wallet/entities/preferences_key.dart';
44 import 'package:cake_wallet/entities/qr_view_data.dart';
45 import 'package:cake_wallet/entities/template.dart';
46 import 'package:cake_wallet/entities/transaction_description.dart';
47 import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
48 import 'package:cake_wallet/entities/wallet_manager.dart';
49 import 'package:cake_wallet/exchange/exchange_template.dart';
50 import 'package:cake_wallet/exchange/provider/trocador_exchange_provider.dart';
51 import 'package:cake_wallet/exchange/trade.dart';
52 import 'package:cake_wallet/haven/cw_haven.dart';
53 import 'package:cake_wallet/monero/monero.dart';
54 import 'package:cake_wallet/nano/nano.dart';
55 import 'package:cake_wallet/new-ui/new_dashboard.dart';
56 import 'package:cake_wallet/new-ui/pages/about_page.dart';
57 import 'package:cake_wallet/new-ui/pages/account_customizer.dart';
58 import 'package:cake_wallet/new-ui/pages/bridge/bridge_amount_page.dart';
59 import 'package:cake_wallet/new-ui/pages/coin_control_page.dart';
60 import 'package:cake_wallet/new-ui/pages/addresses_page.dart';
61 import 'package:cake_wallet/new-ui/pages/home_page.dart';
62 import 'package:cake_wallet/new-ui/pages/send_page.dart';
63 import "package:cake_wallet/new-ui/services/wallet_switch_service.dart";
64 import 'package:cake_wallet/new-ui/pages/lightning_username_page.dart';
65 import 'package:cake_wallet/new-ui/pages/receive_page.dart';
66 import 'package:cake_wallet/new-ui/viewmodels/lightning_username/lightning_username_bloc.dart';
67 import 'package:cake_wallet/new-ui/widgets/addresses_page/address_label_input.dart';
68 import 'package:cake_wallet/new-ui/widgets/coins_page/assets_history/transaction_details_modal.dart';
69 import 'package:cake_wallet/new-ui/widgets/receive_page/receive_label_modal.dart';
70 import 'package:cake_wallet/new-ui/pages/swap_page.dart';
71 import 'package:cake_wallet/order/order.dart';
72 import 'package:cake_wallet/reactions/on_authentication_state_change.dart';
73 import 'package:cake_wallet/routes.dart';
74 import 'package:cake_wallet/solana/solana.dart';
75 import 'package:cake_wallet/src/screens/anonpay_details/anonpay_details_page.dart';
76 import 'package:cake_wallet/src/screens/auth/auth_page.dart';
77 import 'package:cake_wallet/src/screens/backup/backup_page.dart';
78 import 'package:cake_wallet/src/screens/backup/edit_backup_password_page.dart';
79 import 'package:cake_wallet/src/screens/buy/buy_sell_options_page.dart';
80 import 'package:cake_wallet/src/screens/buy/buy_webview_page.dart';
81 import 'package:cake_wallet/src/screens/buy/payment_method_options_page.dart';
82 import 'package:cake_wallet/src/screens/buy/webview_page.dart';
83 import 'package:cake_wallet/src/screens/contact/contact_list_page.dart';
84 import 'package:cake_wallet/src/screens/contact/contact_page.dart';
85 import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart';
86 import 'package:cake_wallet/src/screens/dashboard/desktop_dashboard_page.dart';
87 import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/desktop_sidebar_wrapper.dart';
88 import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart';
89 import 'package:cake_wallet/src/screens/dashboard/edit_token_page.dart';
90 import 'package:cake_wallet/src/screens/dashboard/home_settings_page.dart';
91 import 'package:cake_wallet/src/screens/dashboard/pages/address_page.dart';
92 import 'package:cake_wallet/src/screens/dashboard/pages/balance/balance_page.dart';
93 import 'package:cake_wallet/src/screens/dashboard/pages/cake_features_page.dart';
94 import 'package:cake_wallet/src/screens/dashboard/pages/transactions_page.dart';
95 import 'package:cake_wallet/src/screens/dev/background_sync_logs_page.dart';
96 import 'package:cake_wallet/src/screens/dev/exchange_provider_logs_page.dart';
97 import 'package:cake_wallet/src/screens/dev/monero_background_sync.dart';
98 import 'package:cake_wallet/src/screens/dev/moneroc_cache_debug.dart';
99 import 'package:cake_wallet/src/screens/dev/moneroc_call_profiler.dart';
100 import 'package:cake_wallet/src/screens/dev/network_requests.dart';
101 import 'package:cake_wallet/src/screens/dev/qr_tools_page.dart';
102 import 'package:cake_wallet/src/screens/dev/secure_preferences_page.dart';
103 import 'package:cake_wallet/src/screens/dev/shared_preferences_page.dart';
104 import 'package:cake_wallet/src/screens/dev/socket_health_logs_page.dart';
105 import 'package:cake_wallet/src/screens/exchange/exchange_page.dart';
106 import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart';
107 import 'package:cake_wallet/src/screens/exchange_trade/exchange_confirm_page.dart';
108 import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_external_send_page.dart';
109 import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_page.dart';
110 import 'package:cake_wallet/src/screens/faq/faq_page.dart';
111 import 'package:cake_wallet/src/screens/integrations/deuro/savings_page.dart';
112 import 'package:cake_wallet/src/screens/monero_accounts/monero_account_edit_or_create_page.dart';
113 import 'package:cake_wallet/src/screens/monero_accounts/monero_account_list_page.dart';
114 import 'package:cake_wallet/src/screens/nano/nano_change_rep_page.dart';
115 import 'package:cake_wallet/src/screens/nano_accounts/nano_account_edit_or_create_page.dart';
116 import 'package:cake_wallet/src/screens/nano_accounts/nano_account_list_page.dart';
117 import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart';
118 import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart';
119 import 'package:cake_wallet/src/screens/nodes/pow_node_create_or_edit_page.dart';
120 import 'package:cake_wallet/src/screens/order_details/order_details_page.dart';
121 import 'package:cake_wallet/src/screens/payjoin_details/payjoin_details_page.dart';
122 import 'package:cake_wallet/src/screens/pin_code/pin_code_widget.dart';
123 import 'package:cake_wallet/src/screens/receive/address_list_page.dart';
124 import 'package:cake_wallet/src/screens/receive/anonpay_invoice_page.dart';
125 import 'package:cake_wallet/src/screens/receive/anonpay_receive_page.dart';
126 import 'package:cake_wallet/src/screens/receive/fullscreen_qr_page.dart';
127 import 'package:cake_wallet/src/screens/receive/receive_page.dart';
128 import 'package:cake_wallet/src/screens/rescan/rescan_page.dart';
129 import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
130 import 'package:cake_wallet/src/screens/restore/restore_options_page.dart';
131 import 'package:cake_wallet/src/screens/restore/wallet_restore_choose_derivation.dart';
132 import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
133 import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
134 import 'package:cake_wallet/src/screens/seed/seed_verification/seed_verification_page.dart';
135 import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart';
136 import 'package:cake_wallet/src/screens/send/send_page.dart';
137 import 'package:cake_wallet/src/screens/send/send_template_page.dart';
138 import 'package:cake_wallet/src/screens/send/transaction_success_info_page.dart';
139 import 'package:cake_wallet/src/screens/settings/background_sync_page.dart';
140 import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart';
141 import 'package:cake_wallet/src/screens/settings/desktop_settings/desktop_settings_page.dart';
142 import 'package:cake_wallet/src/screens/settings/display_settings_page.dart';
143 import 'package:cake_wallet/src/screens/settings/domain_lookups_page.dart';
144 import 'package:cake_wallet/src/screens/settings/manage_nodes_page.dart';
145 import 'package:cake_wallet/src/screens/settings/mweb_logs_page.dart';
146 import 'package:cake_wallet/src/screens/settings/mweb_node_page.dart';
147 import 'package:cake_wallet/src/screens/settings/mweb_settings.dart';
148 import 'package:cake_wallet/src/screens/settings/other_settings_page.dart';
149 import 'package:cake_wallet/src/screens/settings/privacy_page.dart';
150 import 'package:cake_wallet/src/screens/settings/security_backup_page.dart';
151 import 'package:cake_wallet/src/screens/settings/silent_payments_logs_page.dart';
152 import 'package:cake_wallet/src/screens/settings/silent_payments_settings.dart';
153 import 'package:cake_wallet/src/screens/settings/trocador_providers_page.dart';
154 import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart';
155 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa.dart';
156 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart';
157 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_info_page.dart';
158 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_qr_page.dart';
159 import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart';
160 import 'package:cake_wallet/src/screens/start_tor/start_tor_page.dart';
161 import 'package:cake_wallet/src/screens/subaddress/address_edit_or_create_page.dart';
162 import 'package:cake_wallet/src/screens/support/support_page.dart';
163 import 'package:cake_wallet/src/screens/support_chat/support_chat_page.dart';
164 import 'package:cake_wallet/src/screens/support_other_links/support_other_links_page.dart';
165 import 'package:cake_wallet/src/screens/trade_details/trade_details_page.dart';
166 import 'package:cake_wallet/src/screens/transaction_details/rbf_details_page.dart';
167 import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart';
168 import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
169 import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart';
170 import 'package:cake_wallet/src/screens/ur/animated_ur_page.dart';
171 import 'package:cake_wallet/new-ui/pages/bridge/bridge_detail_page.dart';
172 import 'package:cake_wallet/src/screens/wallet/wallet_edit_page.dart';
173 import 'package:cake_wallet/src/screens/wallet_connect/services/bottom_sheet_service.dart';
174 import 'package:cake_wallet/src/screens/wallet_connect/services/key_service/wallet_connect_key_service.dart';
175 import 'package:cake_wallet/src/screens/wallet_connect/services/walletkit_service.dart';
176 import 'package:cake_wallet/src/screens/wallet_connect/wc_connections_listing_view.dart';
177 import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
178 import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart';
179 import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart';
180 import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_page.dart';
181 import 'package:cake_wallet/src/screens/welcome/welcome_page.dart';
182 import 'package:cake_wallet/src/widgets/bottom_sheet/swap_confirmation_bottom_sheet.dart';
183 import 'package:cake_wallet/src/widgets/bottom_sheet/swap_details_bottom_sheet.dart';
184 import 'package:cake_wallet/store/anonpay/anonpay_transactions_store.dart';
185 import 'package:cake_wallet/store/app_store.dart';
186 import 'package:cake_wallet/store/authentication_store.dart';
187 import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
188 import 'package:cake_wallet/store/dashboard/order_filter_store.dart';
189 import 'package:cake_wallet/store/dashboard/orders_store.dart';
190 import 'package:cake_wallet/store/dashboard/payjoin_transactions_store.dart';
191 import 'package:cake_wallet/store/dashboard/trade_filter_store.dart';
192 import 'package:cake_wallet/store/bridge_transfers_store.dart';
193 import 'package:cake_wallet/store/dashboard/trades_store.dart';
194 import 'package:cake_wallet/store/dashboard/transaction_filter_store.dart';
195 import 'package:cake_wallet/store/seed_settings_store.dart';
196 import 'package:cake_wallet/store/settings_store.dart';
197 import 'package:cake_wallet/store/templates/exchange_template_store.dart';
198 import 'package:cake_wallet/store/templates/send_template_store.dart';
199 import 'package:cake_wallet/store/wallet_list_store.dart';
200 import 'package:cake_wallet/themes/core/theme_store.dart';
201 import 'package:cake_wallet/tron/tron.dart';
202 import 'package:cake_wallet/utils/device_info.dart';
203 import 'package:cake_wallet/utils/payment_request.dart';
204 import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
205 import 'package:cake_wallet/view_model/animated_ur_model.dart';
206 import 'package:cake_wallet/view_model/anon_invoice_page_view_model.dart';
207 import 'package:cake_wallet/view_model/anonpay_details_view_model.dart';
208 import 'package:cake_wallet/view_model/auth_view_model.dart';
209 import 'package:cake_wallet/view_model/backup_view_model.dart';
210 import 'package:cake_wallet/view_model/bridge/bridge_details_view_model.dart';
211 import 'package:cake_wallet/view_model/bridge/bridge_history_view_model.dart';
212 import 'package:cake_wallet/view_model/buy/buy_amount_view_model.dart';
213 import 'package:cake_wallet/view_model/buy/buy_sell_view_model.dart';
214 import 'package:cake_wallet/view_model/buy/buy_view_model.dart';
215 import 'package:cake_wallet/view_model/cake_pay/cake_pay_account_view_model.dart';
216 import 'package:cake_wallet/view_model/cake_pay/cake_pay_auth_view_model.dart';
217 import 'package:cake_wallet/view_model/cake_pay/cake_pay_buy_card_view_model.dart';
218 import 'package:cake_wallet/view_model/cake_pay/cake_pay_cards_list_view_model.dart';
219 import 'package:cake_wallet/view_model/contact_list/contact_list_view_model.dart';
220 import 'package:cake_wallet/view_model/contact_list/contact_view_model.dart';
221 import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart';
222 import 'package:cake_wallet/view_model/dashboard/cake_features_view_model.dart';
223 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
224 import 'package:cake_wallet/view_model/dashboard/desktop_sidebar_view_model.dart';
225 import 'package:cake_wallet/view_model/dashboard/home_settings_view_model.dart';
226 import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart';
227 import 'package:cake_wallet/view_model/dashboard/receive_option_view_model.dart';
228 import 'package:cake_wallet/view_model/dashboard/sign_view_model.dart';
229 import 'package:cake_wallet/view_model/dev/background_sync_logs_view_model.dart';
230 import 'package:cake_wallet/view_model/dev/exchange_provider_logs_view_model.dart';
231 import 'package:cake_wallet/view_model/dev/monero_background_sync.dart';
232 import 'package:cake_wallet/view_model/dev/secure_preferences.dart';
233 import 'package:cake_wallet/view_model/dev/shared_preferences.dart';
234 import 'package:cake_wallet/view_model/dev/socket_health_logs_view_model.dart';
235 import 'package:cake_wallet/view_model/edit_backup_password_view_model.dart';
236 import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart';
237 import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart';
238 import 'package:cake_wallet/view_model/hardware_wallet/bitbox_view_model.dart';
239 import 'package:cake_wallet/view_model/hardware_wallet/hardware_wallet_view_model.dart';
240 import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart';
241 import 'package:cake_wallet/view_model/hardware_wallet/trezor_connect_view_model.dart';
242 import 'package:cake_wallet/view_model/integrations/deuro_view_model.dart';
243 import 'package:cake_wallet/view_model/link_view_model.dart';
244 import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
245 import 'package:cake_wallet/view_model/monero_account_list/monero_account_edit_or_create_view_model.dart';
246 import 'package:cake_wallet/view_model/monero_account_list/monero_account_list_view_model.dart';
247 import 'package:cake_wallet/view_model/nano_account_list/nano_account_edit_or_create_view_model.dart';
248 import 'package:cake_wallet/view_model/nano_account_list/nano_account_list_view_model.dart';
249 import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
250 import 'package:cake_wallet/view_model/node_list/node_list_view_model.dart';
251 import 'package:cake_wallet/view_model/order_details_view_model.dart';
252 import 'package:cake_wallet/view_model/payjoin_details_view_model.dart';
253 import 'package:cake_wallet/view_model/payment/payment_view_model.dart';
254 import 'package:cake_wallet/view_model/rescan_view_model.dart';
255 import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
256 import 'package:cake_wallet/view_model/restore_from_backup_view_model.dart';
257 import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
258 import 'package:cake_wallet/view_model/send/fees_view_model.dart';
259 import 'package:cake_wallet/view_model/send/send_template_view_model.dart';
260 import 'package:cake_wallet/view_model/send/send_view_model.dart';
261 import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart';
262 import 'package:cake_wallet/view_model/settings/connection_sync_view_model.dart';
263 import 'package:cake_wallet/view_model/settings/display_settings_view_model.dart';
264 import 'package:cake_wallet/view_model/settings/mweb_settings_view_model.dart';
265 import 'package:cake_wallet/view_model/settings/other_settings_view_model.dart';
266 import 'package:cake_wallet/view_model/settings/privacy_settings_view_model.dart';
267 import 'package:cake_wallet/view_model/settings/security_settings_view_model.dart';
268 import 'package:cake_wallet/view_model/settings/silent_payments_settings_view_model.dart';
269 import 'package:cake_wallet/view_model/settings/trocador_providers_view_model.dart';
270 import 'package:cake_wallet/view_model/setup_pin_code_view_model.dart';
271 import 'package:cake_wallet/view_model/start_tor_view_model.dart';
272 import 'package:cake_wallet/view_model/support_view_model.dart';
273 import 'package:cake_wallet/view_model/trade_details_view_model.dart';
274 import 'package:cake_wallet/view_model/transaction_details_view_model.dart';
275 import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_details_view_model.dart';
276 import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_item.dart';
277 import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
278 import 'package:cake_wallet/view_model/bridge/bridge_view_model.dart';
279 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart';
280 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart';
281 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
282 import 'package:cake_wallet/view_model/wallet_groups_display_view_model.dart';
283 import 'package:cake_wallet/view_model/wallet_hardware_restore_view_model.dart';
284 import 'package:cake_wallet/view_model/wallet_keys_view_model.dart';
285 import 'package:cake_wallet/view_model/wallet_list/wallet_edit_view_model.dart';
286 import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
287 import 'package:cake_wallet/view_model/wallet_new_vm.dart';
288 import 'package:cake_wallet/view_model/wallet_restore_choose_derivation_view_model.dart';
289 import 'package:cake_wallet/view_model/wallet_restore_view_model.dart';
290 import 'package:cake_wallet/view_model/wallet_seed_view_model.dart';
291 import 'package:cake_wallet/view_model/wallet_switcher_view_model.dart';
292 import 'package:cake_wallet/view_model/wallet_unlock_loadable_view_model.dart';
293 import 'package:cake_wallet/view_model/wallet_unlock_verifiable_view_model.dart';
294 import 'package:cake_wallet/wownero/wownero.dart';
295 import 'package:cake_wallet/zano/zano.dart';
296 import 'package:cake_wallet/zcash/zcash.dart';
297 import 'package:cw_core/crypto_currency.dart';
298 import 'package:cw_core/nano_account.dart';
299 import 'package:cw_core/node.dart';
300 import 'package:cw_core/payjoin_session.dart';
301 import 'package:cw_core/receive_page_option.dart';
302 import 'package:cw_core/transaction_info.dart';
303 import 'package:cw_core/unspent_coin_type.dart';
304 import 'package:cw_core/unspent_coins_info.dart';
305 import 'package:cw_core/wallet_info.dart';
306 import 'package:cw_core/wallet_service.dart';
307 import 'package:cw_core/wallet_type.dart';
308 import 'package:flutter/foundation.dart';
309 import 'package:flutter/widgets.dart';
310 import 'package:get_it/get_it.dart';
311 import 'package:hive/hive.dart';
312 import 'package:mobx/mobx.dart';
313 import 'package:shared_preferences/shared_preferences.dart';
314 import 'package:trezor_connect/trezor_connect.dart';
315
316 import 'buy/kryptonim/kryptonim.dart';
317 import 'buy/meld/meld_buy_provider.dart';
318 import 'dogecoin/dogecoin.dart';
319 import 'new-ui/viewmodels/card_customizer/card_customizer_bloc.dart';
320 import 'new-ui/widgets/addresses_page/address_info.dart';
321 import 'src/screens/buy/buy_sell_page.dart';
322
323 final getIt = GetIt.instance;
324
325 var _isSetupFinished = false;
326 // late Box<Node> _nodeSource;
327 // late Box<Node> _powNodeSource;
328 late Box<Contact> _contactSource;
329 late Box<Template> _templates;
330 late Box<ExchangeTemplate> _exchangeTemplates;
331 late Box<TransactionDescription> _transactionDescriptionBox;
332 late Box<Order> _ordersSource;
333 late Box<UnspentCoinsInfo> _unspentCoinsInfoSource;
334 late Box<PayjoinSession> _payjoinSessionSource;
335 late Box<AnonpayInvoiceInfo> _anonpayInvoiceInfoSource;
336 Future<void> setup({
337 required Box<Contact> contactSource,
338 required Box<Template> templates,
339 required Box<ExchangeTemplate> exchangeTemplates,
340 required Box<TransactionDescription> transactionDescriptionBox,
341 required Box<Order> ordersSource,
342 required Box<UnspentCoinsInfo> unspentCoinsInfoSource,
343 required Box<PayjoinSession> payjoinSessionSource,
344 required Box<AnonpayInvoiceInfo> anonpayInvoiceInfoSource,
345 required SecureStorage secureStorage,
346 required GlobalKey<NavigatorState> navigatorKey,
347 }) async {
348 _contactSource = contactSource;
349 _templates = templates;
350 _exchangeTemplates = exchangeTemplates;
351 _transactionDescriptionBox = transactionDescriptionBox;
352 _ordersSource = ordersSource;
353 _unspentCoinsInfoSource = unspentCoinsInfoSource;
354 _payjoinSessionSource = payjoinSessionSource;
355 _anonpayInvoiceInfoSource = anonpayInvoiceInfoSource;
356
357 if (!_isSetupFinished) {
358 getIt.registerSingletonAsync<SharedPreferences>(() => SharedPreferences.getInstance());
359 getIt.registerSingleton<SecureStorage>(secureStorage);
360 getIt.registerSingletonAsync<ThemeStore>(() async {
361 final store = ThemeStore();
362 await store.loadThemePreferences();
363 return store;
364 });
365 }
366
367 final isBitcoinBuyEnabled = (secrets.wyreSecretKey.isNotEmpty) &&
368 (secrets.wyreApiKey.isNotEmpty) &&
369 (secrets.wyreAccountId.isNotEmpty);
370
371 final settingsStore = await SettingsStoreBase.load(
372 isBitcoinBuyEnabled: isBitcoinBuyEnabled,
373 );
374
375 if (_isSetupFinished) {
376 return;
377 }
378
379 getIt.registerSingleton(AuthenticationStore());
380 getIt.registerSingleton<WalletListStore>(WalletListStore());
381 // getIt.registerSingleton(NodeListStoreBase.instance);
382 getIt.registerSingleton<SettingsStore>(settingsStore);
383 getIt.registerSingleton<AppStore>(AppStore(
384 authenticationStore: getIt.get<AuthenticationStore>(),
385 walletList: getIt.get<WalletListStore>(),
386 settingsStore: getIt.get<SettingsStore>(),
387 // nodeListStore: getIt.get<NodeListStore>(),
388 themeStore: getIt.get<ThemeStore>()));
389 getIt.registerSingleton<TradesStore>(TradesStore(appStore: getIt.get<AppStore>()));
390 getIt.registerSingleton<OrdersStore>(
391 OrdersStore(ordersSource: _ordersSource, settingsStore: getIt.get<SettingsStore>()));
392 getIt.registerSingleton<BridgeTransfersStore>(BridgeTransfersStore());
393 getIt
394 .registerFactory(() => PayjoinTransactionsStore(payjoinSessionSource: _payjoinSessionSource));
395 getIt.registerSingleton<TradeFilterStore>(TradeFilterStore());
396 getIt.registerSingleton<OrderFilterStore>(OrderFilterStore());
397 getIt.registerSingleton<TransactionFilterStore>(TransactionFilterStore(getIt.get<AppStore>()));
398 getIt.registerSingleton<FiatConversionStore>(FiatConversionStore());
399 getIt.registerSingleton<SendTemplateStore>(SendTemplateStore(templateSource: _templates));
400 getIt.registerSingleton<ExchangeTemplateStore>(
401 ExchangeTemplateStore(templateSource: _exchangeTemplates));
402 getIt.registerSingleton<YatStore>(
403 YatStore(appStore: getIt.get<AppStore>(), secureStorage: getIt.get<SecureStorage>())..init());
404 getIt.registerSingleton<AnonpayTransactionsStore>(
405 AnonpayTransactionsStore(anonpayInvoiceInfoSource: _anonpayInvoiceInfoSource));
406 getIt.registerSingleton<SeedSettingsStore>(SeedSettingsStore());
407
408 getIt.registerFactoryParam<HardwareWalletViewModel, HardwareWalletType, void>((type, _) {
409 switch (type) {
410 case HardwareWalletType.bitbox:
411 return getIt<BitboxViewModel>();
412 case HardwareWalletType.ledger:
413 return getIt<LedgerViewModel>();
414 case HardwareWalletType.trezor:
415 return getIt<TrezorConnectViewModel>();
416 case HardwareWalletType.cupcake:
417 case HardwareWalletType.coldcard:
418 case HardwareWalletType.seedsigner:
419 case HardwareWalletType.keystone:
420 throw Exception(
421 "This should not have happened, because airgapped Wallets don't need View Models",
422 );
423 }
424 });
425
426 getIt.registerLazySingleton(() => LedgerViewModel(getIt<AppStore>()));
427
428 getIt.registerLazySingleton(BitboxViewModel.new);
429
430 getIt.registerLazySingleton(
431 () => TrezorConnect("cakewallet://trezor_connect", appName: "Cake Wallet"),
432 );
433
434 getIt.registerLazySingleton(
435 () => TrezorConnectViewModel(getIt<TrezorConnect>(), getIt<SecureStorage>()),
436 );
437
438 getIt.registerFactory<KeyService>(() => KeyService(getIt.get<SecureStorage>()));
439
440 getIt.registerFactoryParam<WalletCreationService, WalletType, void>(
441 (type, _) => WalletCreationService(
442 initialType: type,
443 keyService: getIt.get<KeyService>(),
444 sharedPreferences: getIt.get<SharedPreferences>(),
445 settingsStore: getIt.get<SettingsStore>(),
446 ));
447
448 getIt.registerFactoryParam<AdvancedPrivacySettingsViewModel, WalletType, void>(
449 (type, _) => AdvancedPrivacySettingsViewModel(type, getIt.get<SettingsStore>()));
450
451 getIt.registerFactory<WalletLoadingService>(() => WalletLoadingService(
452 getIt.get<SharedPreferences>(),
453 getIt.get<KeyService>(),
454 (WalletType type) => getIt.get<WalletService>(param1: type)));
455
456 getIt.registerFactoryParam<WalletNewVM, NewWalletArguments, void>(
457 (newWalletArgs, _) => WalletNewVM(
458 getIt.get<AppStore>(),
459 getIt.get<WalletCreationService>(param1: newWalletArgs.type),
460 getIt.get<AdvancedPrivacySettingsViewModel>(param1: newWalletArgs.type),
461 getIt.get<SeedSettingsViewModel>(),
462 newWalletArguments: newWalletArgs,
463 ));
464
465 final walletList = await WalletInfo.getAll();
466
467 getIt.registerFactory<WalletManager>(
468 () => WalletManager(
469 getIt.get<SharedPreferences>(),
470 ),
471 );
472
473 getIt.registerFactoryParam<WalletGroupsDisplayViewModel, WalletType, void>(
474 (type, _) => WalletGroupsDisplayViewModel(
475 getIt.get<AppStore>(),
476 getIt.get<WalletLoadingService>(),
477 getIt.get<WalletManager>(),
478 getIt.get<WalletListViewModel>(),
479 type: type,
480 ),
481 );
482
483 getIt.registerFactoryParam<WalletUnlockPage, WalletUnlockArguments, bool>((args, closable) {
484 return WalletUnlockPage(getIt.get<WalletUnlockLoadableViewModel>(param1: args), args.callback,
485 args.authPasswordHandler,
486 closable: closable);
487 }, instanceName: 'wallet_unlock_loadable');
488
489 getIt.registerFactory<WalletUnlockPage>(
490 () => getIt.get<WalletUnlockPage>(
491 param1: WalletUnlockArguments(callback: (bool successful, _) {
492 if (successful) {
493 final authStore = getIt.get<AuthenticationStore>();
494 authStore.allowed();
495 }
496 }),
497 param2: false,
498 instanceName: 'wallet_unlock_loadable'),
499 instanceName: 'wallet_password_login');
500
501 getIt.registerFactoryParam<WalletUnlockPage, WalletUnlockArguments, bool>((args, closable) {
502 return WalletUnlockPage(getIt.get<WalletUnlockVerifiableViewModel>(param1: args), args.callback,
503 args.authPasswordHandler,
504 closable: closable);
505 }, instanceName: 'wallet_unlock_verifiable');
506
507 getIt.registerFactoryParam<WalletUnlockLoadableViewModel, WalletUnlockArguments, void>((args, _) {
508 final currentWalletName =
509 getIt.get<SharedPreferences>().getString(PreferencesKey.currentWalletName) ?? '';
510 final currentWalletTypeRaw =
511 getIt.get<SharedPreferences>().getInt(PreferencesKey.currentWalletType) ?? 0;
512 final currentWalletType = deserializeFromInt(currentWalletTypeRaw);
513
514 return WalletUnlockLoadableViewModel(getIt.get<AppStore>(), getIt.get<WalletLoadingService>(),
515 walletName: args.walletName ?? currentWalletName,
516 walletType: args.walletType ?? currentWalletType);
517 });
518
519 getIt.registerFactoryParam<WalletUnlockVerifiableViewModel, WalletUnlockArguments, void>(
520 (args, _) {
521 final currentWalletName =
522 getIt.get<SharedPreferences>().getString(PreferencesKey.currentWalletName) ?? '';
523 final currentWalletTypeRaw =
524 getIt.get<SharedPreferences>().getInt(PreferencesKey.currentWalletType) ?? 0;
525 final currentWalletType = deserializeFromInt(currentWalletTypeRaw);
526
527 return WalletUnlockVerifiableViewModel(getIt.get<AppStore>(),
528 walletName: args.walletName ?? currentWalletName,
529 walletType: args.walletType ?? currentWalletType);
530 });
531
532 getIt.registerFactoryParam<WalletHardwareRestoreViewModel, WalletType, HardwareWalletViewModel>(
533 (type, hardwareWalletVM) => WalletHardwareRestoreViewModel(
534 hardwareWalletVM,
535 getIt.get<AppStore>(),
536 getIt.get<WalletCreationService>(param1: type),
537 getIt.get<SeedSettingsViewModel>(),
538 type: type));
539
540 getIt.registerFactory<WalletAddressListViewModel>(() => WalletAddressListViewModel(
541 appStore: getIt.get<AppStore>(),
542 yatStore: getIt.get<YatStore>(),
543 fiatConversionStore: getIt.get<FiatConversionStore>()));
544
545 getIt.registerFactory(() => BalanceViewModel(
546 appStore: getIt.get<AppStore>(),
547 settingsStore: getIt.get<SettingsStore>(),
548 fiatConversionStore: getIt.get<FiatConversionStore>()));
549
550 getIt.registerFactory(
551 () => ExchangeViewModel(
552 getIt.get<AppStore>(),
553 getIt.get<ExchangeTemplateStore>(),
554 getIt.get<TradesStore>(),
555 getIt.get<SharedPreferences>(),
556 getIt.get<ContactListViewModel>(),
557 getIt.get<UnspentCoinsListViewModel>(),
558 getIt.get<FeesViewModel>(),
559 getIt.get<FiatConversionStore>(),
560 ),
561 );
562
563 getIt.registerSingleton(
564 TradeMonitor(
565 tradesStore: getIt.get<TradesStore>(),
566 appStore: getIt.get<AppStore>(),
567 preferences: getIt.get<SharedPreferences>(),
568 ),
569 );
570
571 getIt.registerFactory(() => DashboardViewModel(
572 tradeMonitor: getIt.get<TradeMonitor>(),
573 balanceViewModel: getIt.get<BalanceViewModel>(),
574 appStore: getIt.get<AppStore>(),
575 tradesStore: getIt.get<TradesStore>(),
576 ordersStore: getIt.get<OrdersStore>(),
577 tradeFilterStore: getIt.get<TradeFilterStore>(),
578 orderFilterStore: getIt.get<OrderFilterStore>(),
579 transactionFilterStore: getIt.get<TransactionFilterStore>(),
580 settingsStore: settingsStore,
581 yatStore: getIt.get<YatStore>(),
582 anonpayTransactionsStore: getIt.get<AnonpayTransactionsStore>(),
583 payjoinTransactionsStore: getIt.get<PayjoinTransactionsStore>(),
584 sharedPreferences: getIt.get<SharedPreferences>(),
585 keyService: getIt.get<KeyService>()));
586
587 getIt.registerFactoryParam<CardCustomizerBloc, bool, BitcoinAmountDisplayMode?>(
588 (lightningMode, displayMode) {
589 final wallet = getIt.get<AppStore>().wallet!;
590 return CardCustomizerBloc(wallet,
591 lightningMode: lightningMode,
592 displaySats: wallet.type == WalletType.bitcoin &&
593 (displayMode == BitcoinAmountDisplayMode.satoshi ||
594 (displayMode == BitcoinAmountDisplayMode.satoshiForLightning && lightningMode)));
595 });
596
597 getIt.registerFactory<AccountCreationModal>(() => AccountCreationModal(
598 accountEditOrCreateViewModel: getIt.get<MoneroAccountEditOrCreateViewModel>()));
599
600 getIt.registerFactory<LightningUsernameBloc>(
601 () => LightningUsernameBloc(getIt.get<AppStore>().wallet!));
602
603 getIt.registerFactory<AuthService>(
604 () => AuthService(
605 secureStorage: getIt.get<SecureStorage>(),
606 sharedPreferences: getIt.get<SharedPreferences>(),
607 settingsStore: getIt.get<SettingsStore>(),
608 authenticationStore: getIt.get<AuthenticationStore>(),
609 appStore: getIt.get<AppStore>(),
610 resetService: getIt.get<ResetService>(),
611 walletList: walletList),
612 );
613
614 getIt.registerFactory<ResetService>(
615 () => ResetService(
616 secureStorage: getIt.get<SecureStorage>(),
617 authenticationStore: getIt.get<AuthenticationStore>(),
618 settingsStore: getIt.get<SettingsStore>(),
619 ),
620 );
621
622 getIt.registerFactory<AuthViewModel>(() => AuthViewModel(getIt.get<AuthService>(),
623 getIt.get<SharedPreferences>(), getIt.get<SettingsStore>(), BiometricAuth()));
624
625 getIt.registerFactoryParam<AuthPage, void Function(bool, AuthPageState), bool>(
626 (onAuthFinished, closable) => AuthPage(getIt.get<AuthViewModel>(),
627 onAuthenticationFinished: onAuthFinished, closable: closable));
628
629 getIt.registerLazySingleton<Setup2FAViewModel>(
630 () => Setup2FAViewModel(
631 getIt.get<SettingsStore>(),
632 getIt.get<SharedPreferences>(),
633 getIt.get<AuthService>(),
634 ),
635 );
636
637 getIt.registerFactoryParam<TotpAuthCodePage, TotpAuthArgumentsModel, void>(
638 (totpAuthPageArguments, _) => TotpAuthCodePage(
639 getIt.get<Setup2FAViewModel>(),
640 totpArguments: totpAuthPageArguments,
641 ),
642 );
643
644 getIt.registerLazySingleton<LinkViewModel>(() {
645 return LinkViewModel(
646 appStore: getIt.get<AppStore>(),
647 settingsStore: getIt.get<SettingsStore>(),
648 authenticationStore: getIt.get<AuthenticationStore>(),
649 navigatorKey: navigatorKey,
650 );
651 });
652
653 getIt.registerFactoryParam<LightningUsernamePage, bool?, void>(
654 (isSetup, _) => LightningUsernamePage(
655 isSetup: isSetup ?? false,
656 themeStore: getIt.get<ThemeStore>(),
657 lightningUsernameBloc: getIt.get<LightningUsernameBloc>(),
658 ));
659
660 getIt.registerFactory<AuthPage>(instanceName: 'login', () {
661 return AuthPage(getIt.get<AuthViewModel>(), closable: false,
662 onAuthenticationFinished: (isAuthenticated, AuthPageState authPageState) async {
663 if (!isAuthenticated) {
664 return;
665 }
666 final authStore = getIt.get<AuthenticationStore>();
667 final appStore = getIt.get<AppStore>();
668 final useTotp = appStore.settingsStore.useTOTP2FA;
669 final shouldUseTotp2FAToAccessWallets =
670 appStore.settingsStore.shouldRequireTOTP2FAForAccessingWallet;
671 if (useTotp && shouldUseTotp2FAToAccessWallets) {
672 authPageState.close(
673 route: Routes.totpAuthCodePage,
674 arguments: TotpAuthArgumentsModel(
675 isForSetup: false,
676 isClosable: false,
677 onTotpAuthenticationFinished:
678 (bool isAuthenticatedSuccessfully, TotpAuthCodePageState totpAuthPageState) async {
679 if (!isAuthenticatedSuccessfully) {
680 return;
681 }
682 if (appStore.wallet != null) {
683 authStore.allowed();
684 return;
685 }
686
687 totpAuthPageState.changeProcessText('Loading the wallet');
688
689 if (loginError != null) {
690 totpAuthPageState.changeProcessText('ERROR: ${loginError.toString()}'.trim());
691 }
692
693 ReactionDisposer? _reaction;
694 _reaction = reaction((_) => appStore.wallet, (Object? _) {
695 _reaction?.reaction.dispose();
696 authStore.allowed();
697 });
698 },
699 ),
700 );
701 } else {
702 // wallet is already loaded:
703 if (appStore.wallet != null || await requireHardwareWalletConnection()) {
704 // goes to the dashboard:
705 authStore.allowed();
706 // trigger any deep links:
707 final linkViewModel = getIt.get<LinkViewModel>();
708 if (linkViewModel.currentLink != null) {
709 linkViewModel.handleLink();
710 }
711 return;
712 }
713
714 // load the wallet:
715
716 authPageState.changeProcessText('Loading the wallet');
717
718 if (loginError != null) {
719 authPageState.changeProcessText('ERROR: ${loginError.toString()}'.trim());
720 loginError = null;
721 }
722
723 ReactionDisposer? _reaction;
724 _reaction = reaction((_) => appStore.wallet, (Object? _) {
725 _reaction?.reaction.dispose();
726 authStore.allowed();
727 final linkViewModel = getIt.get<LinkViewModel>();
728 if (linkViewModel.currentLink != null) {
729 linkViewModel.handleLink();
730 }
731 });
732
733 Timer.periodic(Duration(seconds: 1), (timer) {
734 if (timer.tick > 30) {
735 timer.cancel();
736 }
737
738 if (loginError != null) {
739 authPageState.changeProcessText('ERROR: ${loginError.toString()}'.trim());
740 timer.cancel();
741 }
742 });
743 }
744 });
745 });
746
747 getIt.registerSingleton<BottomSheetService>(BottomSheetServiceImpl());
748
749 final appStore = getIt.get<AppStore>();
750
751 getIt.registerLazySingleton<WalletConnectKeyService>(() => KeyServiceImpl());
752
753 getIt.registerLazySingleton<WalletKitService>(() {
754 final WalletKitService walletKitService = WalletKitService(
755 getIt.get<BottomSheetService>(),
756 getIt.get<WalletConnectKeyService>(),
757 appStore,
758 getIt.get<SharedPreferences>(),
759 );
760 walletKitService.create();
761 return walletKitService;
762 });
763
764 getIt.registerFactory(() => BalancePage(
765 nftViewModel: getIt.get<NFTViewModel>(),
766 dashboardViewModel: getIt.get<DashboardViewModel>(),
767 settingsStore: getIt.get<SettingsStore>()));
768
769 getIt.registerFactory<DashboardPage>(() => DashboardPage(
770 bottomSheetService: getIt.get<BottomSheetService>(),
771 balancePage: getIt.get<BalancePage>(),
772 dashboardViewModel: getIt.get<DashboardViewModel>(),
773 addressListViewModel: getIt.get<WalletAddressListViewModel>(),
774 ));
775
776 getIt.registerFactory<NewDashboard>(() => NewDashboard(
777 dashboardViewModel: getIt.get<DashboardViewModel>(),
778 bottomSheetService: getIt.get<BottomSheetService>(),
779 ));
780
781 getIt.registerFactory<NewHomePage>(() => NewHomePage(
782 dashboardViewModel: getIt.get<DashboardViewModel>(),
783 nftViewModel: getIt.get<NFTViewModel>(),
784 ));
785
786 getIt.registerFactory<DesktopSidebarWrapper>(() {
787 final GlobalKey<NavigatorState> _navigatorKey = GlobalKey<NavigatorState>();
788 return DesktopSidebarWrapper(
789 bottomSheetService: getIt.get<BottomSheetService>(),
790 dashboardViewModel: getIt.get<DashboardViewModel>(),
791 desktopSidebarViewModel: getIt.get<DesktopSidebarViewModel>(),
792 child: getIt.get<DesktopDashboardPage>(param1: _navigatorKey),
793 desktopNavigatorKey: _navigatorKey,
794 );
795 });
796 getIt.registerFactoryParam<DesktopDashboardPage, GlobalKey<NavigatorState>, void>(
797 (desktopKey, _) => DesktopDashboardPage(
798 balancePage: getIt.get<BalancePage>(),
799 dashboardViewModel: getIt.get<DashboardViewModel>(),
800 addressListViewModel: getIt.get<WalletAddressListViewModel>(),
801 desktopKey: desktopKey,
802 ));
803
804 getIt.registerFactory<TransactionsPage>(
805 () => TransactionsPage(dashboardViewModel: getIt.get<DashboardViewModel>()));
806
807 getIt.registerFactory<Setup2FAInfoPage>(() => Setup2FAInfoPage());
808
809 getIt.registerFactory<Setup2FAPage>(
810 () => Setup2FAPage(setup2FAViewModel: getIt.get<Setup2FAViewModel>()));
811
812 getIt.registerFactory<Setup2FAQRPage>(
813 () => Setup2FAQRPage(setup2FAViewModel: getIt.get<Setup2FAViewModel>()));
814
815 getIt.registerFactory<Modify2FAPage>(
816 () => Modify2FAPage(setup2FAViewModel: getIt.get<Setup2FAViewModel>()));
817
818 getIt.registerFactory<DesktopSettingsPage>(
819 () => DesktopSettingsPage(getIt.get<DashboardViewModel>()));
820
821 getIt.registerFactoryParam<ReceiveOptionViewModel, ReceivePageOption?, void>(
822 (pageOption, _) => ReceiveOptionViewModel(getIt.get<AppStore>().wallet!, pageOption));
823
824 getIt.registerFactoryParam<AnonInvoicePageViewModel, List<dynamic>, void>((args, _) {
825 final address = args.first as String;
826 final pageOption = args.last as ReceivePageOption;
827 return AnonInvoicePageViewModel(
828 getIt.get<AnonPayApi>(),
829 address,
830 getIt.get<SettingsStore>(),
831 getIt.get<AppStore>().wallet!,
832 _anonpayInvoiceInfoSource,
833 getIt.get<SharedPreferences>(),
834 pageOption,
835 );
836 });
837
838 getIt.registerFactoryParam<AnonPayInvoicePage, List<dynamic>, void>((List<dynamic> args, _) {
839 final pageOption = args.last as ReceivePageOption;
840 return AnonPayInvoicePage(getIt.get<AnonInvoicePageViewModel>(param1: args),
841 getIt.get<ReceiveOptionViewModel>(param1: pageOption));
842 });
843
844 getIt.registerFactory<ReceivePage>(
845 () => ReceivePage(addressListViewModel: getIt.get<WalletAddressListViewModel>()));
846
847 getIt.registerFactory<AddressPage>(
848 () => AddressPage(
849 addressListViewModel: getIt<WalletAddressListViewModel>(),
850 dashboardViewModel: getIt<DashboardViewModel>(),
851 receiveOptionViewModel: getIt<ReceiveOptionViewModel>(),
852 ),
853 );
854
855 getIt.registerFactoryParam<NewReceivePage, bool?, CryptoCurrency?>((param1, param2) =>
856 NewReceivePage(
857 addressListViewModel: getIt.get<WalletAddressListViewModel>(),
858 receiveOptionViewModel: getIt.get<ReceiveOptionViewModel>(),
859 dashboardViewModel: getIt.get<DashboardViewModel>(),
860 lightningMode: param1 ?? false,
861 initialCurrency: param2));
862
863 getIt.registerFactoryParam<WalletAddressEditOrCreateViewModel, WalletAddressListItem?, void>(
864 (WalletAddressListItem? item, _) =>
865 WalletAddressEditOrCreateViewModel(wallet: getIt.get<AppStore>().wallet!, item: item));
866
867 getIt.registerFactoryParam<AddressEditOrCreatePage, dynamic, void>((dynamic item, _) =>
868 AddressEditOrCreatePage(
869 addressEditOrCreateViewModel:
870 getIt.get<WalletAddressEditOrCreateViewModel>(param1: item)));
871
872 getIt.registerFactoryParam<AddressLabelInputPopup, dynamic, void>((dynamic item, _) =>
873 AddressLabelInputPopup(
874 walletAddressEditOrCreateViewModel:
875 getIt.get<WalletAddressEditOrCreateViewModel>(param1: item)));
876
877 getIt.registerFactoryParam<AddressInfoPopup, dynamic, void>((dynamic item, _) => AddressInfoPopup(
878 walletAddressEditOrCreateViewModel:
879 getIt.get<WalletAddressEditOrCreateViewModel>(param1: item)));
880
881 getIt.registerFactoryParam<ReceiveLabelModal, dynamic, void>((dynamic item, _) =>
882 ReceiveLabelModal(
883 walletAddressEditOrCreateViewModel:
884 getIt.get<WalletAddressEditOrCreateViewModel>(param1: item)));
885
886 getIt.registerFactory<SendTemplateViewModel>(() => SendTemplateViewModel(
887 getIt.get<AppStore>().wallet!,
888 getIt.get<AppStore>(),
889 getIt.get<SendTemplateStore>(),
890 getIt.get<FiatConversionStore>()));
891
892 getIt.registerFactoryParam<SendViewModel, UnspentCoinType?, void>(
893 (coinTypeToSpendFrom, _) => SendViewModel(
894 getIt.get<AppStore>(),
895 getIt.get<SendTemplateViewModel>(),
896 getIt.get<FiatConversionStore>(),
897 getIt.get<AddressResolverService>(),
898 getIt.get<BalanceViewModel>(),
899 getIt.get<ContactListViewModel>(),
900 _transactionDescriptionBox,
901 getIt.get<AppStore>().wallet!.isHardwareWallet
902 ? getIt<HardwareWalletViewModel>(
903 param1: getIt.get<AppStore>().wallet!.hardwareWalletType!)
904 : null,
905 coinTypeToSpendFrom: coinTypeToSpendFrom ?? UnspentCoinType.nonMweb,
906 getIt.get<UnspentCoinsListViewModel>(param1: coinTypeToSpendFrom),
907 getIt.get<FeesViewModel>()),
908 );
909
910 getIt.registerFactoryParam<SendPage, PaymentRequest?, UnspentCoinType?>(
911 (PaymentRequest? initialPaymentRequest, coinTypeToSpendFrom) => SendPage(
912 sendViewModel: getIt.get<SendViewModel>(param1: coinTypeToSpendFrom),
913 authService: getIt.get<AuthService>(),
914 initialPaymentRequest: initialPaymentRequest,
915 paymentViewModel: getIt.get<PaymentViewModel>(),
916 walletSwitcherViewModel: getIt.get<WalletSwitcherViewModel>(),
917 ));
918
919 getIt.registerFactoryParam<NewSendPage, SendPageParams?, void>((params, _) {
920 params ??= SendPageParams();
921 return NewSendPage(
922 sendViewModel: getIt.get<SendViewModel>(param1: params.unspentCoinType),
923 authService: getIt.get<AuthService>(),
924 params: params,
925 contactListViewModel: getIt.get<ContactListViewModel>(),
926 anyPayService: getIt.get<AnyPayService>(),
927 linkViewModel: getIt.get<LinkViewModel>(),
928 walletSwitcherViewModel: getIt.get<WalletSwitcherViewModel>(),
929 );
930 });
931
932 getIt.registerFactory(
933 () => SendTemplatePage(sendTemplateViewModel: getIt.get<SendTemplateViewModel>()));
934
935 if (DeviceInfo.instance.isMobile) {
936 getIt.registerFactory(
937 () => WalletListViewModel(
938 getIt.get<AppStore>(),
939 getIt.get<WalletLoadingService>(),
940 getIt.get<WalletManager>(),
941 ),
942 );
943 } else {
944 // register wallet list view model as singleton on desktop since it can be accessed
945 // from multiple places at the same time (Wallets DropDown, Wallets List in settings)
946 getIt.registerLazySingleton(
947 () => WalletListViewModel(
948 getIt.get<AppStore>(),
949 getIt.get<WalletLoadingService>(),
950 getIt.get<WalletManager>(),
951 ),
952 );
953 }
954
955 getIt.registerFactoryParam<WalletListPage, Function(BuildContext)?, void>(
956 (Function(BuildContext)? onWalletLoaded, _) => WalletListPage(
957 walletListViewModel: getIt.get<WalletListViewModel>(),
958 authService: getIt.get<AuthService>(),
959 onWalletLoaded: onWalletLoaded as Future<void> Function(BuildContext)?,
960 ));
961
962 getIt.registerFactoryParam<WalletEditViewModel, WalletListViewModel, void>(
963 (WalletListViewModel walletListViewModel, _) => WalletEditViewModel(
964 walletListViewModel,
965 getIt.get<WalletLoadingService>(),
966 getIt.get<WalletManager>(),
967 ),
968 );
969
970 getIt.registerFactoryParam<WalletEditPage, WalletEditPageArguments, void>((arguments, _) {
971 return WalletEditPage(
972 pageArguments: WalletEditPageArguments(
973 walletEditViewModel: getIt.get<WalletEditViewModel>(param1: arguments.walletListViewModel),
974 authService: getIt.get<AuthService>(),
975 walletNewVM: getIt.get<WalletNewVM>(
976 param1: NewWalletArguments(type: arguments.editingWallet.type),
977 ),
978 editingWallet: arguments.editingWallet,
979 isWalletGroup: arguments.isWalletGroup,
980 groupName: arguments.groupName,
981 walletGroupKey: arguments.walletGroupKey,
982 ),
983 );
984 });
985
986 getIt.registerFactory<NanoAccountListViewModel>(() {
987 final wallet = getIt.get<AppStore>().wallet!;
988 if (wallet.type == WalletType.nano || wallet.type == WalletType.banano) {
989 return NanoAccountListViewModel(wallet);
990 }
991 throw Exception(
992 'Unexpected wallet type: ${wallet.type} for generate Nano/Banano AccountListViewModel');
993 });
994
995 getIt.registerFactory<MoneroAccountListViewModel>(() {
996 final wallet = getIt.get<AppStore>().wallet!;
997 if (wallet.type == WalletType.monero ||
998 wallet.type == WalletType.wownero ||
999 wallet.type == WalletType.haven) {
1000 return MoneroAccountListViewModel(wallet, getIt.get<SettingsStore>());
1001 }
1002 throw Exception(
1003 'Unexpected wallet type: ${wallet.type} for generate Monero AccountListViewModel');
1004 });
1005
1006 getIt.registerFactory(
1007 () => MoneroAccountListPage(accountListViewModel: getIt.get<MoneroAccountListViewModel>()));
1008
1009 getIt.registerFactory(
1010 () => NanoAccountListPage(accountListViewModel: getIt.get<NanoAccountListViewModel>()));
1011
1012 /*getIt.registerFactory(() {
1013 final wallet = getIt.get<AppStore>().wallet;
1014
1015 if (wallet is MoneroWallet) {
1016 return MoneroAccountEditOrCreateViewModel(wallet.accountList);
1017 }
1018
1019 // FIXME: throw exception.
1020 return null;
1021 });
1022
1023 getIt.registerFactory(() => MoneroAccountEditOrCreatePage(
1024 moneroAccountCreationViewModel:
1025 getIt.get<MoneroAccountEditOrCreateViewModel>()));*/
1026
1027 getIt.registerFactoryParam<MoneroAccountEditOrCreateViewModel, AccountListItem?, void>(
1028 (AccountListItem? account, _) => MoneroAccountEditOrCreateViewModel(
1029 monero!.getAccountList(getIt.get<AppStore>().wallet!),
1030 wownero?.getAccountList(getIt.get<AppStore>().wallet!),
1031 wallet: getIt.get<AppStore>().wallet!,
1032 accountListItem: account));
1033
1034 getIt.registerFactoryParam<MoneroAccountEditOrCreatePage, AccountListItem?, void>(
1035 (AccountListItem? account, _) => MoneroAccountEditOrCreatePage(
1036 moneroAccountCreationViewModel:
1037 getIt.get<MoneroAccountEditOrCreateViewModel>(param1: account)));
1038
1039 getIt.registerFactoryParam<NanoAccountEditOrCreateViewModel, NanoAccount?, void>(
1040 (NanoAccount? account, _) =>
1041 NanoAccountEditOrCreateViewModel(nano!.getAccountList(getIt.get<AppStore>().wallet!),
1042 // banano?.getAccountList(getIt.get<AppStore>().wallet!),
1043 wallet: getIt.get<AppStore>().wallet!,
1044 accountListItem: account));
1045
1046 getIt.registerFactoryParam<NanoAccountEditOrCreatePage, NanoAccount?, void>(
1047 (NanoAccount? account, _) => NanoAccountEditOrCreatePage(
1048 nanoAccountCreationViewModel:
1049 getIt.get<NanoAccountEditOrCreateViewModel>(param1: account)));
1050
1051 getIt.registerFactory(
1052 () => DisplaySettingsViewModel(getIt.get<AppStore>(), getIt.get<ThemeStore>()));
1053
1054 getIt.registerFactory(() =>
1055 SilentPaymentsSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
1056
1057 getIt.registerFactory(
1058 () => MwebSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
1059
1060 getIt.registerFactory(
1061 () => PrivacySettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
1062
1063 getIt.registerFactory(() => TrocadorExchangeProvider());
1064
1065 getIt.registerFactory(() => TrocadorProvidersViewModel(
1066 getIt.get<SettingsStore>(), getIt.get<TrocadorExchangeProvider>()));
1067
1068 getIt.registerFactory(() => OtherSettingsViewModel(
1069 getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!, getIt.get<SendViewModel>()));
1070
1071 getIt.registerFactory(
1072 () => SecuritySettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AuthService>()));
1073
1074 getIt.registerFactory(() => WalletSeedViewModel(getIt.get<AppStore>().wallet!));
1075
1076 getIt.registerFactory<SeedSettingsViewModel>(
1077 () => SeedSettingsViewModel(getIt.get<AppStore>(), getIt.get<SeedSettingsStore>()));
1078
1079 getIt.registerFactory(() => DevMoneroBackgroundSync(getIt.get<AppStore>().wallet!));
1080
1081 getIt.registerFactory(() => DevSharedPreferences());
1082
1083 getIt.registerFactory(() => DevSecurePreferences());
1084
1085 getIt.registerFactoryParam<WalletSeedPage, bool, void>((bool isWalletCreated, _) =>
1086 WalletSeedPage(getIt.get<WalletSeedViewModel>(), isNewWalletCreated: isWalletCreated));
1087
1088 getIt.registerFactory(() => WalletKeysViewModel(getIt.get<AppStore>()));
1089
1090 getIt.registerFactory(() => WalletKeysPage(getIt.get<WalletKeysViewModel>()));
1091
1092 getIt.registerFactory(() => AnimatedURModel(getIt.get<AppStore>()));
1093
1094 getIt.registerFactoryParam<AnimatedURPage, Map<String, String>, void>(
1095 (Map<String, String> urQr, _) => AnimatedURPage(getIt.get<AnimatedURModel>(), urQr: urQr));
1096
1097 getIt.registerFactoryParam<ContactViewModel, ContactRecord?, void>((ContactRecord? contact, _) =>
1098 ContactViewModel(_contactSource, getIt.get<AppStore>(), getIt.get<AddressResolverService>(),
1099 contact: contact));
1100
1101 getIt.registerFactoryParam<ContactListViewModel, CryptoCurrency?, void>(
1102 (CryptoCurrency? cur, _) =>
1103 ContactListViewModel(_contactSource, walletList, cur, getIt.get<SettingsStore>()));
1104
1105 getIt.registerFactoryParam<ContactListPage, CryptoCurrency?, bool?>(
1106 (CryptoCurrency? cur, bool? showAddContact) => ContactListPage(
1107 getIt.get<ContactListViewModel>(param1: cur),
1108 getIt.get<AuthService>(),
1109 showAddButton: showAddContact ?? true,
1110 ));
1111
1112 getIt.registerFactoryParam<ContactPage, ContactRecord?, void>(
1113 (ContactRecord? contact, _) => ContactPage(getIt.get<ContactViewModel>(param1: contact)));
1114
1115 getIt.registerFactory(() => AddressListPage(getIt.get<WalletAddressListViewModel>()));
1116
1117 getIt.registerFactoryParam<NodeListViewModel, bool, void>((isPow, _) {
1118 final appStore = getIt.get<AppStore>();
1119 return NodeListViewModel(appStore, isPow);
1120 });
1121
1122 getIt.registerFactoryParam<NewAddressesPage, bool, void>(
1123 (showHidden, _) => NewAddressesPage(
1124 showHidden: showHidden,
1125 addressListViewModel: getIt<WalletAddressListViewModel>(),
1126 dashboardViewModel: getIt<DashboardViewModel>(),
1127 ),
1128 );
1129
1130 getIt.registerFactory(
1131 () => ConnectionSyncViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
1132
1133 getIt.registerFactory(() => ConnectionSyncPage(getIt.get<ConnectionSyncViewModel>()));
1134
1135 getIt.registerFactory(() => SecurityBackupPage(getIt.get<SecuritySettingsViewModel>(),
1136 getIt.get<AuthService>(), getIt.get<AppStore>().wallet!.isHardwareWallet));
1137
1138 getIt.registerFactory(() => PrivacyPage(getIt.get<PrivacySettingsViewModel>()));
1139
1140 getIt.registerFactory(() => TrocadorProvidersPage(getIt.get<TrocadorProvidersViewModel>()));
1141
1142 getIt.registerFactory(() => DomainLookupsPage(getIt.get<ConnectionSyncViewModel>()));
1143
1144 getIt.registerFactory(() => DisplaySettingsPage(getIt.get<DisplaySettingsViewModel>()));
1145
1146 getIt.registerFactory(
1147 () => SilentPaymentsSettingsPage(getIt.get<SilentPaymentsSettingsViewModel>()));
1148
1149 getIt.registerFactory(() => SilentPaymentsLogPage(getIt.get<SilentPaymentsSettingsViewModel>()));
1150
1151 getIt.registerFactory(() => MwebSettingsPage(getIt.get<MwebSettingsViewModel>()));
1152
1153 getIt.registerFactory(() => MwebLogsPage(getIt.get<MwebSettingsViewModel>()));
1154
1155 getIt.registerFactory(() => MwebNodePage(getIt.get<MwebSettingsViewModel>()));
1156
1157 getIt.registerFactory(() => OtherSettingsPage(getIt.get<OtherSettingsViewModel>()));
1158
1159 getIt.registerFactory(() => AboutPage(appVersion: getIt.get<SettingsStore>().appVersion));
1160
1161 getIt.registerFactory(() => NanoChangeRepPage(
1162 settingsStore: getIt.get<AppStore>().settingsStore,
1163 wallet: getIt.get<AppStore>().wallet!,
1164 ));
1165
1166 getIt.registerFactoryParam<NodeCreateOrEditViewModel, Map<String, dynamic>, void>(
1167 (Map<String, dynamic> args, _) {
1168 final WalletType type = args['type'] as WalletType? ?? getIt.get<AppStore>().wallet!.type;
1169 final bool isPow = args['isPow'] as bool? ?? false;
1170 final Node? editingNode = args['editingNode'] as Node?;
1171 return NodeCreateOrEditViewModel(isPow, type, getIt.get<SettingsStore>(),
1172 editingNode: editingNode);
1173 });
1174
1175 getIt.registerFactoryParam<NodeCreateOrEditPage, Node?, bool?>(
1176 (Node? editingNode, bool? isSelected) {
1177 final vm =
1178 getIt.get<NodeCreateOrEditViewModel>(param1: {'isPow': false, 'editingNode': editingNode});
1179 return NodeCreateOrEditPage(
1180 nodeCreateOrEditViewModel: vm,
1181 editingNode: editingNode,
1182 isSelected: isSelected,
1183 type: getIt.get<AppStore>().wallet!.type);
1184 });
1185
1186 getIt.registerFactoryParam<PowNodeCreateOrEditPage, Node?, bool?>(
1187 (Node? editingNode, bool? isSelected) => PowNodeCreateOrEditPage(
1188 nodeCreateOrEditViewModel: getIt
1189 .get<NodeCreateOrEditViewModel>(param1: {'isPow': true, 'editingNode': editingNode}),
1190 editingNode: editingNode,
1191 isSelected: isSelected));
1192
1193 getIt.registerFactory<RobinhoodBuyProvider>(() => RobinhoodBuyProvider(
1194 wallet: getIt.get<AppStore>().wallet!,
1195 hardwareWalletVM: getIt<AppStore>().wallet!.isHardwareWallet
1196 ? getIt<HardwareWalletViewModel>(param1: getIt<AppStore>().wallet!.hardwareWalletType!)
1197 : null,
1198 ));
1199
1200 getIt.registerFactory<DFXBuyProvider>(() => DFXBuyProvider(
1201 wallet: getIt<AppStore>().wallet!,
1202 hardwareWalletVM: getIt<AppStore>().wallet!.isHardwareWallet
1203 ? getIt<HardwareWalletViewModel>(param1: getIt<AppStore>().wallet!.hardwareWalletType!)
1204 : null,
1205 ));
1206
1207 getIt.registerFactory<MoonPayProvider>(() => MoonPayProvider(
1208 appStore: getIt.get<AppStore>(),
1209 wallet: getIt.get<AppStore>().wallet!,
1210 isTestEnvironment: kDebugMode || kProfileMode,
1211 ));
1212
1213 getIt.registerFactory<OnRamperBuyProvider>(() => OnRamperBuyProvider(
1214 wallet: getIt.get<AppStore>().wallet!,
1215 ));
1216
1217 getIt.registerFactory<MeldBuyProvider>(() => MeldBuyProvider(
1218 wallet: getIt.get<AppStore>().wallet!,
1219 ));
1220
1221 getIt.registerFactory<KryptonimBuyProvider>(() => KryptonimBuyProvider(
1222 wallet: getIt.get<AppStore>().wallet!,
1223 ));
1224
1225 getIt.registerFactoryParam<WebViewPage, String, Uri>((title, uri) => WebViewPage(title, uri));
1226
1227 getIt.registerFactory<FeesViewModel>(
1228 () => FeesViewModel(
1229 getIt.get<AppStore>(),
1230 getIt.get<BalanceViewModel>(),
1231 ),
1232 );
1233
1234 getIt.registerFactory(
1235 () => ExchangeTradeViewModel(
1236 wallet: getIt.get<AppStore>().wallet!,
1237 tradesStore: getIt.get<TradesStore>(),
1238 sendViewModel: getIt.get<SendViewModel>(),
1239 feesViewModel: getIt.get<FeesViewModel>(),
1240 fiatConversionStore: getIt.get<FiatConversionStore>(),
1241 ),
1242 );
1243
1244 getIt.registerFactoryParam<ExchangePage, PaymentRequest?, void>(
1245 (PaymentRequest? paymentRequest, __) {
1246 return ExchangePage(getIt.get<ExchangeViewModel>(), getIt.get<AuthService>(),
1247 getIt.get<AddressResolverService>(), paymentRequest);
1248 });
1249
1250 getIt.registerFactoryParam<NewSwapPage, PaymentRequest?, CryptoCurrency?>(
1251 (PaymentRequest? paymentRequest, CryptoCurrency? initialCurrency) {
1252 return NewSwapPage(
1253 getIt.get<ExchangeViewModel>(),
1254 getIt.get<AuthService>(),
1255 getIt.get<AddressResolverService>(),
1256 paymentRequest,
1257 walletSwitcherViewModel: getIt.get<WalletSwitcherViewModel>(),
1258 initialCurrency: initialCurrency,
1259 );
1260 });
1261
1262 getIt.registerFactory(() => ExchangeConfirmPage(tradesStore: getIt.get<TradesStore>()));
1263
1264 getIt.registerFactory(
1265 () => ExchangeTradePage(exchangeTradeViewModel: getIt.get<ExchangeTradeViewModel>()));
1266
1267 getIt.registerFactory(() =>
1268 ExchangeTradeExternalSendPage(exchangeTradeViewModel: getIt.get<ExchangeTradeViewModel>()));
1269
1270 getIt.registerFactory(() => BackgroundSyncPage(getIt.get<DashboardViewModel>()));
1271
1272 getIt.registerFactory(() => ExchangeTemplatePage(getIt.get<ExchangeViewModel>()));
1273
1274 getIt.registerFactoryParam<SwapConfirmationBottomSheet, PaymentFlowResult, void>(
1275 (paymentFlowResult, _) => SwapConfirmationBottomSheet(
1276 paymentFlowResult: paymentFlowResult,
1277 exchangeViewModel: getIt.get<ExchangeViewModel>(),
1278 authService: getIt.get<AuthService>(),
1279 ),
1280 );
1281
1282 getIt.registerFactory<SwapDetailsBottomSheet>(
1283 () => SwapDetailsBottomSheet(
1284 exchangeTradeViewModel: getIt.get<ExchangeTradeViewModel>(),
1285 ),
1286 );
1287
1288 getIt.registerFactory(() => PaymentViewModel(
1289 appStore: getIt.get<AppStore>(),
1290 ));
1291
1292 getIt.registerFactory(() => WalletSwitchService(
1293 walletLoadingService: getIt.get<WalletLoadingService>(),
1294 appStore: getIt.get<AppStore>(),
1295 ));
1296
1297 getIt.registerFactory(() => AnyPayService(
1298 appStore: getIt.get<AppStore>(),
1299 walletSwitchService: getIt.get<WalletSwitchService>(),
1300 ));
1301
1302 getIt.registerFactory(() => WalletSwitcherViewModel(
1303 appStore: getIt.get<AppStore>(),
1304 walletLoadingService: getIt.get<WalletLoadingService>(),
1305 ));
1306
1307 getIt.registerFactoryParam<WalletService, WalletType, void>((WalletType param1, __) {
1308 switch (param1) {
1309 case WalletType.monero:
1310 return monero!.createMoneroWalletService(_unspentCoinsInfoSource);
1311 case WalletType.bitcoin:
1312 return bitcoin!.createBitcoinWalletService(
1313 _unspentCoinsInfoSource,
1314 _payjoinSessionSource,
1315 SettingsStoreBase.walletPasswordDirectInput,
1316 );
1317 case WalletType.litecoin:
1318 return bitcoin!.createLitecoinWalletService(
1319 _unspentCoinsInfoSource,
1320 SettingsStoreBase.walletPasswordDirectInput,
1321 );
1322 case WalletType.ethereum:
1323 case WalletType.polygon:
1324 case WalletType.base:
1325 case WalletType.arbitrum:
1326 case WalletType.bsc:
1327 return evm!.createEVMWalletService(param1, SettingsStoreBase.walletPasswordDirectInput);
1328 case WalletType.bitcoinCash:
1329 return bitcoinCash!.createBitcoinCashWalletService(
1330 _unspentCoinsInfoSource, SettingsStoreBase.walletPasswordDirectInput);
1331 case WalletType.dogecoin:
1332 return dogecoin!.createDogeCoinWalletService(
1333 _unspentCoinsInfoSource, SettingsStoreBase.walletPasswordDirectInput);
1334 case WalletType.nano:
1335 case WalletType.banano:
1336 return nano!.createNanoWalletService(SettingsStoreBase.walletPasswordDirectInput);
1337 case WalletType.solana:
1338 return solana!.createSolanaWalletService(SettingsStoreBase.walletPasswordDirectInput);
1339 case WalletType.tron:
1340 return tron!.createTronWalletService(SettingsStoreBase.walletPasswordDirectInput);
1341 case WalletType.wownero:
1342 return wownero!.createWowneroWalletService(_unspentCoinsInfoSource);
1343 case WalletType.zano:
1344 return zano!.createZanoWalletService();
1345 case WalletType.decred:
1346 return decred!.createDecredWalletService(
1347 _unspentCoinsInfoSource, SettingsStoreBase.walletPasswordDirectInput);
1348 case WalletType.haven:
1349 return HavenWalletService();
1350 case WalletType.zcash:
1351 return zcash!.createZcashWalletService(SettingsStoreBase.walletPasswordDirectInput);
1352 case WalletType.none:
1353 throw Exception('Unexpected token: ${param1.toString()} for generating of WalletService');
1354 }
1355 });
1356
1357 getIt.registerFactoryParam<SetupPinCodeViewModel, bool?, void>(
1358 (isDuressPin, _) => SetupPinCodeViewModel(
1359 getIt.get<AuthService>(),
1360 getIt.get<SettingsStore>(),
1361 isDuressPin: isDuressPin ?? false,
1362 ),
1363 );
1364
1365 getIt.registerFactoryParam<SetupPinCodePage, void Function(PinCodeState<PinCodeWidget>, String),
1366 bool?>(
1367 (onSuccessfulPinSetup, isDuressPin) => SetupPinCodePage(
1368 getIt.get<SetupPinCodeViewModel>(param1: isDuressPin),
1369 onSuccessfulPinSetup: onSuccessfulPinSetup,
1370 isDuressPin: isDuressPin ?? false,
1371 ),
1372 );
1373
1374 getIt.registerFactory(() => WelcomePage());
1375
1376 getIt.registerFactory(() => RescanViewModel(getIt.get<AppStore>().wallet!));
1377
1378 getIt.registerFactory(() => RescanPage(getIt.get<RescanViewModel>()));
1379
1380 getIt.registerFactory(() => FaqPage(getIt.get<SettingsStore>()));
1381
1382 getIt.registerFactoryParam<WalletRestoreViewModel, WalletType, Map<String, dynamic>?>(
1383 (type, additionalParams) {
1384 final restoredWallet = additionalParams?['restoredWallet'] as RestoredWallet?;
1385 final hardwareWalletType = additionalParams?['hardwareWalletType'] as HardwareWalletType?;
1386
1387 return WalletRestoreViewModel(getIt.get<AppStore>(),
1388 getIt.get<WalletCreationService>(param1: type), getIt.get<SeedSettingsViewModel>(),
1389 type: type, restoredWallet: restoredWallet, hardwareWalletType: hardwareWalletType);
1390 });
1391
1392 getIt.registerFactoryParam<WalletRestorePage, WalletType, Map<String, dynamic>?>(
1393 (type, additionalParams) => WalletRestorePage(
1394 getIt.get<WalletRestoreViewModel>(param1: type, param2: additionalParams),
1395 getIt.get<SeedSettingsViewModel>()));
1396
1397 getIt.registerFactoryParam<WalletRestoreChooseDerivationViewModel, List<DerivationInfo>, void>(
1398 (derivations, _) => WalletRestoreChooseDerivationViewModel(derivationInfos: derivations));
1399
1400 getIt.registerFactoryParam<WalletRestoreChooseDerivationPage, List<DerivationInfo>, void>(
1401 (derivations, _) =>
1402 WalletRestoreChooseDerivationPage(getIt.get<WalletRestoreChooseDerivationViewModel>(
1403 param1: derivations,
1404 )));
1405
1406 getIt.registerFactoryParam<TransactionDetailsViewModel, List<dynamic>, void>((params, _) {
1407 final transactionInfo = params[0] as TransactionInfo;
1408 final canReplaceByFee = params[1] as bool? ?? false;
1409 final wallet = getIt.get<AppStore>().wallet!;
1410
1411 return TransactionDetailsViewModel(
1412 transactionInfo: transactionInfo,
1413 transactionDescriptionBox: _transactionDescriptionBox,
1414 wallet: wallet,
1415 appStore: getIt.get<AppStore>(),
1416 sendViewModel: getIt.get<SendViewModel>(),
1417 canReplaceByFee: canReplaceByFee,
1418 );
1419 });
1420
1421 getIt.registerFactoryParam<TransactionDetailsModal, TransactionInfo, bool?>(
1422 (transactionInfo, highlightNoteField) => TransactionDetailsModal(
1423 transactionDetailsViewModel:
1424 getIt.get<TransactionDetailsViewModel>(param1: [transactionInfo, false]),
1425 highlightNoteField: highlightNoteField ?? false,
1426 ));
1427
1428 getIt.registerFactoryParam<TransactionDetailsPage, TransactionInfo, void>(
1429 (TransactionInfo transactionInfo, _) => TransactionDetailsPage(
1430 transactionDetailsViewModel:
1431 getIt.get<TransactionDetailsViewModel>(param1: [transactionInfo, false])));
1432
1433 getIt.registerFactoryParam<RBFDetailsPage, List<dynamic>, void>((params, _) {
1434 final transactionInfo = params[0] as TransactionInfo;
1435 final txHex = params[1] as String;
1436 return RBFDetailsPage(
1437 transactionDetailsViewModel: getIt.get<TransactionDetailsViewModel>(
1438 param1: [transactionInfo, true],
1439 ),
1440 rawTransaction: txHex,
1441 );
1442 });
1443
1444 getIt.registerFactoryParam<NewWalletTypePage, NewWalletTypeArguments, void>(
1445 (newWalletTypeArguments, _) {
1446 return NewWalletTypePage(
1447 newWalletTypeArguments: newWalletTypeArguments,
1448 );
1449 });
1450
1451 getIt.registerFactory<PreSeedPage>(() => PreSeedPage());
1452
1453 getIt.registerFactoryParam<TransactionSuccessPage, String, void>(
1454 (content, _) => TransactionSuccessPage(content: content));
1455
1456 getIt.registerFactoryParam<TradeDetailsViewModel, Trade, void>(
1457 (trade, _) => TradeDetailsViewModel(tradeForDetails: trade, appStore: getIt.get<AppStore>()));
1458
1459 getIt.registerFactory(() => CakeFeaturesViewModel(getIt.get<CakePayService>()));
1460
1461 getIt.registerFactory(() => CakeFeaturesPage(
1462 dashboardViewModel: getIt.get<DashboardViewModel>(),
1463 cakeFeaturesViewModel: getIt.get<CakeFeaturesViewModel>()));
1464
1465 getIt.registerFactory(() => BackupServiceV3(getIt.get<SecureStorage>(),
1466 _transactionDescriptionBox, getIt.get<KeyService>(), getIt.get<SharedPreferences>()));
1467
1468 getIt.registerFactory(() => BackupPage(getIt.get<BackupViewModel>()));
1469
1470 getIt.registerLazySingleton<EditBackupPasswordViewModel>(
1471 () => EditBackupPasswordViewModel(getIt.get<SecureStorage>()),
1472 );
1473
1474 getIt.registerFactory(() => BackupViewModel(getIt.get<SecureStorage>(),
1475 getIt.get<BackupServiceV3>(), getIt.get<EditBackupPasswordViewModel>()));
1476
1477 getIt.registerFactory(() => EditBackupPasswordPage(getIt.get<EditBackupPasswordViewModel>()));
1478
1479 getIt.registerFactoryParam<RestoreOptionsPage, bool, void>(
1480 (bool isNewInstall, _) => RestoreOptionsPage(isNewInstall: isNewInstall));
1481
1482 getIt.registerFactory(() => RestoreFromBackupViewModel(getIt.get<BackupServiceV3>()));
1483
1484 getIt.registerFactory(() => RestoreFromBackupPage(getIt.get<RestoreFromBackupViewModel>()));
1485
1486 getIt.registerFactoryParam<TradeDetailsPage, Trade, void>(
1487 (Trade trade, _) => TradeDetailsPage(getIt.get<TradeDetailsViewModel>(param1: trade)));
1488
1489 getIt.registerFactory(() => BuyAmountViewModel());
1490
1491 getIt.registerFactory(() => BuySellViewModel(getIt.get<AppStore>()));
1492
1493 getIt.registerFactory(
1494 () => BuySellPage(getIt.get<BuySellViewModel>(), getIt.get<AddressResolverService>()));
1495
1496 getIt.registerFactoryParam<BuyOptionsPage, List<dynamic>, void>((List<dynamic> args, _) {
1497 final items = args.first as List<SelectableItem>;
1498 final pickAnOption = args[1] as void Function(SelectableOption option)?;
1499 final confirmOption = args[2] as void Function(BuildContext contex)?;
1500 return BuyOptionsPage(items: items, pickAnOption: pickAnOption, confirmOption: confirmOption);
1501 });
1502
1503 getIt
1504 .registerFactoryParam<PaymentMethodOptionsPage, List<dynamic>, void>((List<dynamic> args, _) {
1505 final items = args.first as List<SelectableOption>;
1506 final pickAnOption = args[1] as void Function(SelectableOption option)?;
1507
1508 return PaymentMethodOptionsPage(items: items, pickAnOption: pickAnOption);
1509 });
1510
1511 getIt.registerFactory(() {
1512 final wallet = getIt.get<AppStore>().wallet;
1513
1514 return BuyViewModel(_ordersSource, getIt.get<OrdersStore>(), getIt.get<SettingsStore>(),
1515 getIt.get<BuyAmountViewModel>(),
1516 wallet: wallet!);
1517 });
1518
1519 getIt.registerFactoryParam<BuyWebViewPage, List<dynamic>, void>((List<dynamic> args, _) {
1520 final url = args.first as String;
1521 final buyViewModel = args[1] as BuyViewModel;
1522
1523 return BuyWebViewPage(
1524 buyViewModel: buyViewModel, ordersStore: getIt.get<OrdersStore>(), url: url);
1525 });
1526
1527 getIt.registerFactoryParam<OrderDetailsViewModel, Order, void>((order, _) {
1528 final wallet = getIt.get<AppStore>().wallet;
1529 final cakePayService = getIt.get<CakePayService>();
1530
1531 return OrderDetailsViewModel(
1532 wallet: wallet!,
1533 orderForDetails: order,
1534 cakePayService: cakePayService,
1535 orders: _ordersSource);
1536 });
1537
1538 getIt.registerFactoryParam<OrderDetailsPage, Order, void>(
1539 (Order order, _) => OrderDetailsPage(getIt.get<OrderDetailsViewModel>(param1: order)));
1540
1541 getIt.registerFactory(() => SupportViewModel(getIt.get<AppStore>()));
1542
1543 getIt.registerFactory(() => SupportPage(getIt.get<SupportViewModel>()));
1544
1545 getIt.registerFactory(() =>
1546 SupportChatPage(getIt.get<SupportViewModel>(), secureStorage: getIt.get<SecureStorage>()));
1547
1548 getIt.registerFactory(() => SupportOtherLinksPage(getIt.get<SupportViewModel>()));
1549
1550 getIt.registerFactoryParam<UnspentCoinsListViewModel, UnspentCoinType?, void>(
1551 (coinTypeToSpendFrom, _) {
1552 final wallet = getIt.get<AppStore>().wallet;
1553
1554 return UnspentCoinsListViewModel(
1555 wallet: wallet!,
1556 unspentCoinsInfo: _unspentCoinsInfoSource,
1557 fiatConversationStore: getIt.get<FiatConversionStore>(),
1558 appStore: getIt.get<AppStore>(),
1559 coinTypeToSpendFrom: coinTypeToSpendFrom ?? UnspentCoinType.any,
1560 );
1561 });
1562
1563 getIt.registerFactoryParam<UnspentCoinsListPage, UnspentCoinType?, void>(
1564 (coinTypeToSpendFrom, _) => UnspentCoinsListPage(
1565 unspentCoinsListViewModel:
1566 getIt.get<UnspentCoinsListViewModel>(param1: coinTypeToSpendFrom)));
1567
1568 getIt.registerFactoryParam<NewCoinControlPage, UnspentCoinType?, bool?>(
1569 (coinTypeToSpendFrom, canEdit) => NewCoinControlPage(
1570 unspentCoinsListViewModel:
1571 getIt.get<UnspentCoinsListViewModel>(param1: coinTypeToSpendFrom),
1572 canEdit: canEdit ?? true,
1573 ));
1574
1575 getIt.registerFactoryParam<UnspentCoinsDetailsViewModel, UnspentCoinsItem,
1576 UnspentCoinsListViewModel>(
1577 (item, model) =>
1578 UnspentCoinsDetailsViewModel(unspentCoinsItem: item, unspentCoinsListViewModel: model));
1579
1580 getIt.registerFactoryParam<UnspentCoinsDetailsPage, List<dynamic>, void>((List<dynamic> args, _) {
1581 final item = args.first as UnspentCoinsItem;
1582 final unspentCoinsListViewModel = args[1] as UnspentCoinsListViewModel;
1583
1584 return UnspentCoinsDetailsPage(
1585 unspentCoinsDetailsViewModel: getIt.get<UnspentCoinsDetailsViewModel>(
1586 param1: item, param2: unspentCoinsListViewModel));
1587 });
1588
1589 getIt.registerFactory(() => YatService());
1590
1591 getIt.registerFactory<AddressResolverService>(
1592 () => AddressResolverService(settingsStore: getIt.get<SettingsStore>()),
1593 );
1594
1595 getIt.registerFactoryParam<FullscreenQRPage, QrViewData, void>(
1596 (QrViewData viewData, _) => FullscreenQRPage(qrViewData: viewData));
1597
1598 getIt.registerFactory(() => CakePayApi());
1599
1600 getIt.registerFactory(() => AnyPayApi());
1601
1602 getIt.registerFactory<CakePayService>(
1603 () => CakePayService(getIt.get<SecureStorage>(), getIt.get<CakePayApi>()));
1604
1605 getIt.registerFactory(() => CakePayCardsListViewModel(
1606 cakePayService: getIt.get<CakePayService>(), settingsStore: getIt.get<SettingsStore>()));
1607
1608 getIt.registerFactory(() => CakePayAuthViewModel(cakePayService: getIt.get<CakePayService>()));
1609
1610 getIt.registerFactoryParam<CakePayBuyCardViewModel, CakePayVendor, void>(
1611 (CakePayVendor vendor, _) {
1612 return CakePayBuyCardViewModel(
1613 vendor: vendor,
1614 cakePayService: getIt.get<CakePayService>(),
1615 sendViewModel: getIt.get<SendViewModel>(),
1616 orders: _ordersSource);
1617 });
1618
1619 getIt.registerFactory(() => CakePayAccountViewModel(cakePayService: getIt.get<CakePayService>()));
1620
1621 getIt.registerFactory(() => CakePayWelcomePage(getIt.get<CakePayAuthViewModel>()));
1622
1623 getIt.registerFactoryParam<CakePayVerifyOtpPage, List<dynamic>, void>((List<dynamic> args, _) {
1624 final email = args.first as String;
1625 final isSignIn = args[1] as bool;
1626
1627 return CakePayVerifyOtpPage(getIt.get<CakePayAuthViewModel>(), email, isSignIn);
1628 });
1629
1630 getIt.registerFactoryParam<CakePayBuyCardPage, List<dynamic>, void>((List<dynamic> args, _) {
1631 final vendor = args.first as CakePayVendor;
1632
1633 return CakePayBuyCardPage(getIt.get<CakePayBuyCardViewModel>(param1: vendor));
1634 });
1635
1636 getIt.registerFactory(() => CakePayCardsPage(getIt.get<CakePayCardsListViewModel>()));
1637
1638 getIt.registerFactory(() => CakePayAccountPage(getIt.get<CakePayAccountViewModel>()));
1639
1640 getIt.registerFactory(() => AnonPayApi(
1641 useTorOnly: getIt.get<SettingsStore>().exchangeStatus == ExchangeApiMode.torOnly,
1642 wallet: getIt.get<AppStore>().wallet!));
1643
1644 getIt.registerFactory(() =>
1645 DesktopWalletSelectionDropDown(getIt.get<WalletListViewModel>(), getIt.get<AuthService>()));
1646
1647 getIt.registerFactory(() => DesktopSidebarViewModel());
1648
1649 getIt.registerFactoryParam<AnonpayDetailsViewModel, AnonpayInvoiceInfo, void>(
1650 (AnonpayInvoiceInfo anonpayInvoiceInfo, _) => AnonpayDetailsViewModel(
1651 anonPayApi: getIt.get<AnonPayApi>(),
1652 anonpayInvoiceInfo: anonpayInvoiceInfo,
1653 themeStore: getIt.get<ThemeStore>(),
1654 ));
1655
1656 getIt.registerFactoryParam<PayjoinDetailsViewModel, String, TransactionInfo?>(
1657 (String sessionId, TransactionInfo? transactionInfo) => PayjoinDetailsViewModel(
1658 sessionId,
1659 transactionInfo,
1660 payjoinSessionSource: _payjoinSessionSource,
1661 themeStore: getIt.get<ThemeStore>(),
1662 ));
1663
1664 getIt.registerFactoryParam<AnonPayReceivePage, AnonPayReceivePageArgs, void>(
1665 (AnonPayReceivePageArgs anonpayReceivePageArgs, _) =>
1666 AnonPayReceivePage(args: anonpayReceivePageArgs));
1667
1668 getIt.registerFactoryParam<AnonpayDetailsPage, AnonpayInvoiceInfo, void>(
1669 (AnonpayInvoiceInfo anonpayInvoiceInfo, _) => AnonpayDetailsPage(
1670 anonpayDetailsViewModel: getIt.get<AnonpayDetailsViewModel>(param1: anonpayInvoiceInfo)));
1671
1672 getIt.registerFactoryParam<PayjoinDetailsPage, String, TransactionInfo?>(
1673 (String sessionId, TransactionInfo? transactionInfo) => PayjoinDetailsPage(
1674 payjoinDetailsViewModel:
1675 getIt.get<PayjoinDetailsViewModel>(param1: sessionId, param2: transactionInfo)));
1676
1677 getIt.registerFactoryParam<HomeSettingsPage, BalanceViewModel, void>((balanceViewModel, _) =>
1678 HomeSettingsPage(getIt.get<HomeSettingsViewModel>(param1: balanceViewModel)));
1679
1680 getIt.registerFactoryParam<HomeSettingsViewModel, BalanceViewModel, void>(
1681 (balanceViewModel, _) => HomeSettingsViewModel(getIt.get<SettingsStore>(), balanceViewModel));
1682
1683 getIt.registerFactoryParam<EditTokenPage, HomeSettingsViewModel, Map<String, dynamic>>(
1684 (homeSettingsViewModel, arguments) => EditTokenPage(
1685 homeSettingsViewModel: homeSettingsViewModel,
1686 token: arguments['token'] as CryptoCurrency?,
1687 initialContractAddress: arguments['contractAddress'] as String?,
1688 ),
1689 );
1690
1691 getIt.registerFactoryParam<ManageNodesPage, bool, void>((bool isPow, _) {
1692 return ManageNodesPage(isPow,
1693 nodeListViewModel: getIt.get<NodeListViewModel>(param1: isPow),
1694 dashboardViewModel: getIt.get<DashboardViewModel>());
1695 });
1696
1697 getIt.registerFactory(
1698 () => WalletConnectConnectionsView(walletKitService: getIt.get<WalletKitService>()),
1699 );
1700
1701 getIt.registerFactory(() => NFTViewModel(appStore, getIt.get<BottomSheetService>()));
1702
1703 getIt.registerFactory(() => SignViewModel(getIt.get<AppStore>().wallet!));
1704
1705 getIt.registerFactory(() => SeedVerificationPage(getIt.get<WalletSeedViewModel>()));
1706
1707 getIt.registerFactory(() => DevMoneroBackgroundSyncPage(getIt.get<DevMoneroBackgroundSync>()));
1708
1709 getIt.registerFactory(() => DevMoneroCallProfilerPage());
1710
1711 getIt.registerFactory(() => DevMoneroWalletCacheDebugPage());
1712
1713 getIt.registerFactory(() => DevSharedPreferencesPage(getIt.get<DevSharedPreferences>()));
1714
1715 getIt.registerFactory(() => DevSecurePreferencesPage(getIt.get<DevSecurePreferences>()));
1716
1717 getIt.registerFactory(() => BackgroundSyncLogsViewModel());
1718
1719 getIt.registerFactory(() => DevBackgroundSyncLogsPage(getIt.get<BackgroundSyncLogsViewModel>()));
1720
1721 getIt.registerFactory(() => SocketHealthLogsViewModel());
1722
1723 getIt.registerFactory(() => DevSocketHealthLogsPage(getIt.get<SocketHealthLogsViewModel>()));
1724
1725 getIt.registerFactory(() => DevNetworkRequests());
1726
1727 getIt.registerFactory(() => DevQRToolsPage());
1728
1729 getIt.registerFactory(() => ExchangeProviderLogsViewModel());
1730 getIt.registerFactory(
1731 () => DevExchangeProviderLogsPage(getIt.get<ExchangeProviderLogsViewModel>()));
1732
1733 getIt.registerFactory(() => StartTorPage(
1734 StartTorViewModel(),
1735 ));
1736
1737 getIt.registerFactory(() => DEuroViewModel(
1738 getIt<AppStore>(),
1739 getIt<BalanceViewModel>(),
1740 getIt<SettingsStore>(),
1741 getIt<FiatConversionStore>(),
1742 getIt.get<AppStore>().wallet!.isHardwareWallet
1743 ? getIt<HardwareWalletViewModel>(
1744 param1: getIt.get<AppStore>().wallet!.hardwareWalletType!)
1745 : null,
1746 ));
1747
1748 getIt.registerFactory(() => DEuroSavingsPage(getIt<DEuroViewModel>()));
1749
1750 getIt.registerFactory(() => BridgeViewModel(
1751 appStore: getIt.get<AppStore>(),
1752 bridgeTransfersStore: getIt.get<BridgeTransfersStore>(),
1753 walletManager: getIt.get<WalletManager>(),
1754 fiatConversionStore: getIt.get<FiatConversionStore>(),
1755 settingsStore: getIt.get<SettingsStore>(),
1756 ));
1757
1758 getIt.registerFactory(() => BridgeHistoryViewModel(
1759 bridgeTransfersStore: getIt.get<BridgeTransfersStore>(),
1760 appStore: getIt.get<AppStore>(),
1761 ));
1762 getIt.registerFactoryParam<BridgeDetailsViewModel, BridgeTransfer, void>(
1763 (BridgeTransfer transfer, _) {
1764 final appStore = getIt.get<AppStore>();
1765 return BridgeDetailsViewModel(
1766 transferForDetails: transfer,
1767 bridgeTransfersStore: getIt.get<BridgeTransfersStore>(),
1768 walletId: appStore.wallet?.name ?? transfer.walletId,
1769 );
1770 });
1771 getIt.registerFactoryParam<BridgeDetailPage, BridgeTransfer, void>(
1772 (BridgeTransfer transfer, _) => BridgeDetailPage(
1773 viewModel: getIt.get<BridgeDetailsViewModel>(param1: transfer),
1774 ));
1775
1776 getIt.registerLazySingleton(() => NodeSwitchingService(
1777 appStore: getIt.get<AppStore>(),
1778 settingsStore: getIt.get<SettingsStore>(),
1779 ));
1780
1781 getIt.registerFactoryParam<BridgeAmountPage, CryptoCurrency, void>(
1782 (CryptoCurrency initialToken, _) => BridgeAmountPage(
1783 bridgeViewModel: getIt.get<BridgeViewModel>(),
1784 bridgeHistoryViewModel: getIt.get<BridgeHistoryViewModel>(),
1785 initialToken: initialToken,
1786 ),
1787 );
1788
1789 _isSetupFinished = true;
1790 }