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 |