Перейти к содержанию

01 one loop

one_loop_app — потребительский кошелёк: P2P, KYC, NFC, mini-apps.

Назначение

Основное потребительское приложение OneWallet для пользователей Таиланда. Работает с accountType=consumer/wallet. Версия 1.3.0+4.

Функции: пополнение баланса, P2P-переводы (QR/номер телефона), просмотр истории, KYC-онбординг, управление NFC-метками, мини-приложения (каталог WebView).

Экраны

Маршрут Экран Guard
/ SplashScreen Определяет начальный redirect
/welcome WelcomeScreen Только неавторизованные
/signin SignInScreen Только неавторизованные
/register/email RegisterEmailScreen Только неавторизованные
/register/otp RegisterOtpScreen Требует accountRequestId (B1a)
/register/password RegisterPasswordScreen Требует registrationToken (B1a)
/register/referral RegisterReferralScreen После auth, до PIN-setup
/register/profile RegisterProfileScreen После auth, до PIN-setup
/forgot-password ForgotPasswordScreen Только неавторизованные
/forgot-password/otp ForgotPasswordOtpScreen Только неавторизованные
/reset-password ResetPasswordScreen Только неавторизованные
/setup-pin SetupPinScreen Авторизован + PIN не установлен (B5)
/setup-biometric SetupBiometricScreen После установки PIN
/pin-unlock PinUnlockScreen Авторизован + заблокирован (B2)
/home HomeScreen Shell, index 0
/apps AppsScreen Shell, index 1
/profile ProfileScreen Shell, index 2
/wallet WalletScreen Push route, без навбара
/history HistoryScreen Push route, без навбара
/transaction-detail TxDetailScreen Push route, extra: TxDetailArgs
/p2p/my-qr MyQrScreen Авторизован
/p2p/scan QrScannerScreen Авторизован
/p2p/phone-transfer PhoneTransferScreen Авторизован
/p2p/preview P2pPreviewScreen Авторизован
/p2p/status P2pStatusScreen Авторизован
/nfc-tags NfcTagsScreen NFC доступен (B7)
/nfc-tags/add NfcTagAddWizard NFC доступен; extra: {renewTagId?}
/nfc-tags/clear/:tagId NfcTagClearScreen NFC доступен
/miniapp-viewer MiniappViewerScreen Авторизован
/invoice-preview InvoicePreviewScreen Авторизован
/invoice-status InvoiceStatusScreen Авторизован

GoRouter Guards

flowchart TD
    Start([Запрос маршрута]) --> B1{Аутентифицирован?}
    B1 -->|нет| Welcome[/welcome]
    B1 -->|да| B1a{Zombie-state?<br>register/otp без token<br>register/password без token}
    B1a -->|да| RegEmail[/register/email]
    B1a -->|нет| B2{PIN заблокирован?}
    B2 -->|да| PinUnlock[/pin-unlock]
    B2 -->|нет, но на /pin-unlock| Home[/home]
    B2 -->|нет| B3{Статус загружен?}
    B3 -->|нет| Wait[ждать null]
    B3 -->|да| B4{На auth-роуте?}
    B4 -->|да| B5{PIN установлен?}
    B5 -->|нет| SetupPin[/setup-pin]
    B5 -->|да| Home2[/home]
    B4 -->|нет| B6{PIN установлен?}
    B6 -->|нет| SetupPin2[/setup-pin]
    B6 -->|да| B7{NFC недоступен<br>и маршрут /nfc-tags*?}
    B7 -->|да| Profile[/profile]
    B7 -->|нет| Target[целевой маршрут]

Провайдеры

Provider Тип Riverpod Назначение
authProvider StateNotifierProvider<AuthNotifier, AuthState> JWT, статус пользователя, аутентификация
pinProvider StateNotifierProvider<PinNotifier, PinState> PIN-код, биометрика, блокировка
profileProvider StateNotifierProvider Данные профиля, KYC-статус
walletProvider Provider Баланс, счёт TigerBeetle
paymentProvider StateNotifierProvider P2P-переводы, статус intent
transactionProvider Provider История транзакций
invoiceProvider StateNotifierProvider Создание и отслеживание инвойсов
nfcTagProvider StateNotifierProvider Список NFC-меток пользователя
nfcAddWizardProvider StateNotifierProvider Состояние мастера добавления метки
nfcAvailabilityProvider FutureProvider Проверка доступности NFC на устройстве
phoneResolveProvider FutureProvider Поиск получателя по номеру телефона
pollingProviders StreamProvider Polling статуса intent (P2P/invoice)
autoLockServiceProvider Provider Экземпляр AutoLockService
localeProvider StateNotifierProvider Язык приложения (en/th/ru)
referralCodeProvider StateNotifierProvider Реферальный код при регистрации

NFC в one_loop

Версия пакета: nfc_manager: ^4.1.1.

Write (запись метки) — используется для программирования NFC-меток идентификатором пользователя: - NfcTagAddWizard — мастер добавления новой метки (маршрут /nfc-tags/add) - NfcTagClearScreen — очистка метки через eraseTag + удаление из реестра сервера - Guard B7 в router: если устройство не поддерживает NFC или сервер отключил флаг C8 → redirect /profile

Read (чтение метки) — используется в P2P-флоу для сканирования чужих меток: - QrScannerScreen содержит NFC-режим (dispatch через QrDispatcher) - Считанный tag-ID резолвится в получателя и передаётся в P2P preview

Ключевые зависимости

Пакет Версия Назначение
flutter_riverpod ^2.6.0 State management
go_router ^14.0.0 Декларативный routing с guards
nfc_manager ^4.1.1 NFC read/write для меток
firebase_messaging ^15.2.10 Push-уведомления (FCM)
firebase_core ^3.3.0 Инициализация Firebase
flutter_local_notifications ^17.1.0 Локальные уведомления
mobile_scanner ^7.0.0 QR-сканер камерой
qr_flutter ^4.0.0 Генерация QR-кода (My QR)
flutter_secure_storage ^10.0.0 Хранение PIN/JWT в защищённом хранилище
phosphor_flutter ^2.1.0 Иконки (только Phosphor)
image_picker ^1.2.2 Загрузка фото профиля/KYC
path_provider ^2.1.5 Пути к файловой системе
onewallet_shared_ui local Общие виджеты, AppTheme, AutoLockService