Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57fb56303a | ||
|
|
8f0a5d3fb5 | ||
|
|
5a8b020256 | ||
|
|
e273785268 | ||
|
|
5ba60747a8 | ||
|
|
c35d0eedbe | ||
|
|
bc751246d8 | ||
|
|
f5e3075205 | ||
|
|
5954510b93 | ||
|
|
7887704a5c | ||
|
|
4c12244d3c | ||
|
|
f4f775b9ed | ||
|
|
44d48d41d4 | ||
|
|
82e1f93cce | ||
|
|
1ce980a87b | ||
|
|
909c312af0 | ||
|
|
73918430b2 | ||
|
|
a5d66c63b7 | ||
|
|
3c596461c6 | ||
|
|
006486bc2a | ||
|
|
2e00207343 | ||
|
|
8e35582f93 | ||
|
|
0ea1a6fa56 | ||
|
|
cee78e179b | ||
|
|
1ca1a45126 | ||
|
|
214dfe3262 | ||
|
|
3b26b19b25 | ||
|
|
b20854f329 | ||
|
|
1a0c0cf49b | ||
|
|
c40f96fc88 | ||
|
|
13c55afe3c | ||
|
|
99bf4d5c7f | ||
|
|
207dda29df | ||
|
|
c3263edb89 | ||
|
|
c072e4c168 | ||
|
|
e4af5f10d7 |
@@ -0,0 +1,150 @@
|
||||
name: Build & Deploy iOS to TestFlight
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: macos-26
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
# Dipin biar CI nggak ikut naik versi diam-diam.
|
||||
# Flutter 3.47 mensyaratkan iOS deployment target minimal 15.0.
|
||||
flutter-version: "3.47.0"
|
||||
cache: true
|
||||
|
||||
- name: Install Dependencies
|
||||
run: flutter pub get
|
||||
|
||||
# ── Code Signing Setup ──────────────────────────────────────────────────
|
||||
|
||||
- name: Install Apple Certificate
|
||||
env:
|
||||
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
|
||||
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
run: |
|
||||
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
|
||||
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
|
||||
|
||||
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
|
||||
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
||||
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
|
||||
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
||||
|
||||
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A \
|
||||
-t cert -f pkcs12 -k $KEYCHAIN_PATH
|
||||
security set-key-partition-list -S apple-tool:,apple: \
|
||||
-s -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
||||
security list-keychain -d user -s $KEYCHAIN_PATH
|
||||
|
||||
- name: Install Provisioning Profile
|
||||
env:
|
||||
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
|
||||
run: |
|
||||
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
|
||||
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH
|
||||
|
||||
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
|
||||
|
||||
# Xcode requires the filename to be the profile's UUID
|
||||
UUID=$(security cms -D -i $PP_PATH | plutil -extract UUID raw -)
|
||||
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles/$UUID.mobileprovision
|
||||
echo "Installed provisioning profile UUID: $UUID"
|
||||
|
||||
# ── Disable SPM ─────────────────────────────────────────────────────────
|
||||
|
||||
- name: Disable Swift Package Manager
|
||||
run: flutter config --no-enable-swift-package-manager
|
||||
|
||||
# ── CocoaPods ───────────────────────────────────────────────────────────
|
||||
|
||||
- name: Install CocoaPods Dependencies
|
||||
run: |
|
||||
cd ios
|
||||
rm -rf Pods Podfile.lock
|
||||
pod install --repo-update
|
||||
|
||||
# ── Build & Archive ─────────────────────────────────────────────────────
|
||||
|
||||
- name: Build iOS (no codesign)
|
||||
run: flutter build ios --release --no-codesign
|
||||
|
||||
- name: Re-run pod install to apply Podfile signing settings
|
||||
run: |
|
||||
cd ios
|
||||
pod install
|
||||
|
||||
- name: Archive with Xcode
|
||||
env:
|
||||
TEAM_ID: ${{ secrets.TEAM_ID }}
|
||||
run: |
|
||||
cat > $RUNNER_TEMP/signing.xcconfig << 'XCCONFIG'
|
||||
CODE_SIGN_STYLE = Manual
|
||||
CODE_SIGN_IDENTITY = iPhone Distribution
|
||||
PROVISIONING_PROFILE_SPECIFIER = Enaklo Customer
|
||||
CODE_SIGNING_REQUIRED = YES
|
||||
XCCONFIG
|
||||
|
||||
xcodebuild archive \
|
||||
-workspace ios/Runner.xcworkspace \
|
||||
-scheme Runner \
|
||||
-configuration Release \
|
||||
-archivePath $RUNNER_TEMP/Runner.xcarchive \
|
||||
-destination "generic/platform=iOS" \
|
||||
-xcconfig $RUNNER_TEMP/signing.xcconfig \
|
||||
DEVELOPMENT_TEAM="$TEAM_ID"
|
||||
|
||||
- name: Export IPA
|
||||
run: |
|
||||
xcodebuild -exportArchive \
|
||||
-archivePath $RUNNER_TEMP/Runner.xcarchive \
|
||||
-exportPath $RUNNER_TEMP/export \
|
||||
-exportOptionsPlist ios/ExportOptions.plist
|
||||
|
||||
mkdir -p build/ios/ipa
|
||||
cp $RUNNER_TEMP/export/*.ipa build/ios/ipa/
|
||||
|
||||
# ── Upload to TestFlight ────────────────────────────────────────────────
|
||||
|
||||
- name: Upload to TestFlight via Transporter
|
||||
env:
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APP_SPECIFIC_PASSWORD: ${{ secrets.APP_SPECIFIC_PASSWORD }}
|
||||
run: |
|
||||
IPA_PATH=$(find build/ios/ipa -name "*.ipa" | head -1)
|
||||
echo "Uploading: $IPA_PATH"
|
||||
xcrun altool --upload-app \
|
||||
--type ios \
|
||||
--file "$IPA_PATH" \
|
||||
--username "$APPLE_ID" \
|
||||
--password "$APP_SPECIFIC_PASSWORD" \
|
||||
--verbose
|
||||
|
||||
# ── Cleanup ─────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Clean Up Keychain and Provisioning Profile
|
||||
if: ${{ always() }}
|
||||
run: |
|
||||
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db || true
|
||||
rm -rf ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision || true
|
||||
|
||||
# ── Artifact ────────────────────────────────────────────────────────────
|
||||
|
||||
- name: Upload IPA as Artifact
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ios-ipa
|
||||
path: build/ios/ipa/*.ipa
|
||||
retention-days: 7
|
||||
@@ -18,3 +18,10 @@ analyzer:
|
||||
- test/generated/**
|
||||
- "**/**.g.dart"
|
||||
- "**/**.freezed.dart"
|
||||
- build/**
|
||||
- android/**
|
||||
- ios/**
|
||||
- web/**
|
||||
- windows/**
|
||||
- macos/**
|
||||
- linux/**
|
||||
|
||||
@@ -6,7 +6,7 @@ plugins {
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.appskel.enaklo"
|
||||
namespace = "com.apskel.enaklocustomer"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = "27.0.12077973"
|
||||
|
||||
@@ -21,7 +21,7 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "com.appskel.enaklo"
|
||||
applicationId = "com.apskel.enaklocustomer"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
minSdk = flutter.minSdkVersion
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.apskel.enaklocustomer
|
||||
|
||||
import android.os.Build
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import io.flutter.plugins.webviewflutter.WebViewFlutterAndroidExternalApi
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
|
||||
// Pengaturan WebView yang tidak disediakan plugin webview_flutter.
|
||||
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, WEBVIEW_CHANNEL)
|
||||
.setMethodCallHandler { call, result ->
|
||||
when (call.method) {
|
||||
"enableOffscreenPreRaster" -> {
|
||||
val id = call.argument<Number>("webViewId")?.toLong()
|
||||
@Suppress("DEPRECATION")
|
||||
val webView = id?.let {
|
||||
WebViewFlutterAndroidExternalApi.getWebView(flutterEngine, it)
|
||||
}
|
||||
if (webView != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
webView.settings.offscreenPreRaster = true
|
||||
}
|
||||
result.success(webView != null)
|
||||
}
|
||||
else -> result.notImplemented()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val WEBVIEW_CHANNEL = "com.apskel.enaklocustomer/webview"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.appskel.enaklo
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
class MainActivity : FlutterActivity()
|
||||
@@ -1,3 +1,7 @@
|
||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||
android.builtInKotlin=false
|
||||
# This newDsl flag was added automatically by Flutter migrator
|
||||
android.newDsl=false
|
||||
|
||||
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip
|
||||
|
||||
@@ -18,8 +18,8 @@ pluginManagement {
|
||||
|
||||
plugins {
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
id("com.android.application") version "8.7.3" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
|
||||
id("com.android.application") version "8.11.1" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.2.20" apply false
|
||||
}
|
||||
|
||||
include(":app")
|
||||
|
||||
|
After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 159 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 790 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 169 KiB |
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 367 KiB |
@@ -0,0 +1,617 @@
|
||||
# Prompt: fitur EnakPoint & EnakCoin di Mobile App Customer
|
||||
|
||||
Kamu mengerjakan aplikasi mobile untuk **customer** (bukan kasir, bukan backoffice).
|
||||
Tugasmu: membangun fitur loyalitas EnakPoint & EnakCoin di aplikasi, memakai API backend
|
||||
yang sudah jadi dan dijelaskan di dokumen ini. Jangan mengarang endpoint, field, atau
|
||||
aturan yang tidak tertulis di sini; kalau ada yang kurang jelas, tanyakan dulu.
|
||||
|
||||
---
|
||||
|
||||
## 1. Konteks bisnis
|
||||
|
||||
| | EnakPoint (`POINT`) | EnakCoin (`COIN`) |
|
||||
| ----------------------------- | ---------------------------------------------------- | ----------------------------------- |
|
||||
| Didapat dari | Belanja (order lunas), koreksi admin, tukar EnakCoin | Belanja, koreksi admin |
|
||||
| Dipakai untuk | **Membayar order** | **Main game**, ditukar ke EnakPoint |
|
||||
| Bisa dikirim ke customer lain | Ya | Ya |
|
||||
| Bisa kedaluwarsa | Ya, bila owner mengaktifkan | Ya, bila owner mengaktifkan |
|
||||
|
||||
Tidak ada lagi "token". Semua yang dulu token sekarang EnakCoin, dan endpoint serta
|
||||
field bernama token sudah dihapus dari API.
|
||||
|
||||
### Aturan yang wajib dipatuhi di UI
|
||||
|
||||
1. **Semua jumlah bilangan bulat.** Tidak ada desimal pada EnakPoint atau EnakCoin.
|
||||
2. **Saldo bukan uang.** Nilai rupiah EnakPoint selalu ditulis **"setara potongan
|
||||
Rp …"**, tidak pernah "saldo Rp …" atau "uang". Tidak ada fitur tarik tunai.
|
||||
3. **PIN 6 digit wajib** untuk: membuat kode bayar, tukar
|
||||
EnakCoin, dan transfer. **Main game tidak butuh PIN.** Melihat saldo dan riwayat
|
||||
tidak butuh PIN.
|
||||
4. **PIN terpisah dari password login** dan selalu dikirim sebagai **string** (supaya
|
||||
nol di depan tidak hilang). Jangan pernah menyimpan PIN di perangkat, log, atau
|
||||
analytics.
|
||||
5. **Satu akun customer = satu organisasi.** Saldo berlaku di semua outlet organisasi itu.
|
||||
6. **Waktu memakai WIB.** Tanggal kedaluwarsa berarti saldo masih bisa dipakai sampai
|
||||
23:59:59 WIB di tanggal itu.
|
||||
|
||||
---
|
||||
|
||||
## 2. Koneksi ke API
|
||||
|
||||
- Base URL: `/api/v1`
|
||||
- Semua endpoint customer: header `Authorization: Bearer <token login customer>`
|
||||
- Semua jumlah di request dan response berupa integer.
|
||||
|
||||
### Registrasi customer
|
||||
|
||||
`POST /api/v1/customer-auth/register/start` menerima `organization_id` (opsional):
|
||||
|
||||
```json
|
||||
{ "phone_number": "0812…", "name": "Budi", "birth_date": "2000-01-31", "organization_id": "648b96a0-1d1d-414e-baee-37e9d6317b4e" }
|
||||
```
|
||||
|
||||
- Customer terdaftar di satu organisasi, dan saldonya berlaku di semua outlet organisasi itu.
|
||||
- Bila `organization_id` tidak dikirim dan backend hanya punya satu organisasi, customer
|
||||
otomatis masuk ke organisasi itu. Bila ada lebih dari satu, registrasi ditolak
|
||||
("organization_id is required"), jadi sebaiknya app selalu mengirimnya dari config per
|
||||
environment/brand.
|
||||
- `organization_id` yang dikirim harus ada; bila tidak, registrasi ditolak sebelum OTP dikirim.
|
||||
- Wallet customer baru belum punya baris sampai saldo pertama kali bergerak;
|
||||
`GET /customer/wallet` tetap menjawab saldo 0.
|
||||
|
||||
### Format response
|
||||
|
||||
Sukses:
|
||||
|
||||
```json
|
||||
{ "success": true, "data": { … }, "errors": null }
|
||||
```
|
||||
|
||||
Gagal:
|
||||
|
||||
```json
|
||||
{ "success": false, "data": null, "errors": [{ "code": "304", "entity": "wallet_service", "cause": "wallet move refused: not enough EnakCoin" }] }
|
||||
```
|
||||
|
||||
| `errors[0].code` | HTTP | Arti | Yang dilakukan app |
|
||||
| ------------------ | ---- | ------------------------------------ | ------------------------------------------------------------------------------------------------- |
|
||||
| `303`, `310` | 400 | Request tidak lengkap / salah format | Bug di app; tampilkan pesan umum |
|
||||
| `304` | 400 | Ditolak aturan bisnis | Tampilkan pesan yang ramah (lihat tiap fitur); `cause` berbahasa Inggris, jangan tampilkan mentah |
|
||||
| `404` | 404 | Tidak ditemukan | Tampilkan "tidak ditemukan" |
|
||||
| `429` | 429 | Minta OTP terlalu cepat | Tampilkan hitung mundur sebelum boleh minta lagi |
|
||||
| `PIN_NOT_SET` | 403 | Belum punya PIN | Buka alur buat PIN (§6.2) |
|
||||
| `PIN_INVALID` | 400 | PIN salah | §6.5 |
|
||||
| `PIN_LOCKED` | 423 | PIN terkunci | §6.5 |
|
||||
| `TRANSFER_BLOCKED` | 403 | Transfer ditahan setelah reset PIN | §6.5 |
|
||||
| `900` | 500 | Error server | "Terjadi kesalahan, coba lagi" |
|
||||
|
||||
### Idempotency-Key
|
||||
|
||||
Endpoint **tukar** dan **transfer** wajib header `Idempotency-Key` (string unik, maks.
|
||||
50 karakter, mis. UUID v4).
|
||||
|
||||
- Buat **satu key baru saat customer menekan tombol konfirmasi**.
|
||||
- Bila request gagal karena jaringan/timeout, **kirim ulang dengan key yang sama**.
|
||||
Server mengembalikan hasil pertama dengan `"replayed": true` dan tidak memotong saldo
|
||||
dua kali.
|
||||
- Jangan pakai ulang key untuk transaksi yang berbeda; server menolaknya (`304`).
|
||||
|
||||
---
|
||||
|
||||
## 3. Layar yang perlu dibuat
|
||||
|
||||
| Layar | Endpoint utama | Butuh PIN |
|
||||
| -------------------------------- | ------------------------------------------------------------ | --------- |
|
||||
| Beranda wallet | `GET /customer/wallet` | – |
|
||||
| Riwayat mutasi | `GET /customer/wallet/transactions` | – |
|
||||
| Saldo akan kedaluwarsa | `GET /customer/wallet/expiring` | – |
|
||||
| Daftar outlet | `GET /customer/outlets` | – |
|
||||
| Riwayat order + detail | `GET /customer/orders`, `GET /customer/orders/:id` | – |
|
||||
| Kode bayar (angka + QR) | `POST /customer/wallet/payment-code` | Ya |
|
||||
| Tukar EnakCoin | `GET …/exchange/preview`, `POST /customer/wallet/exchange` | Ya |
|
||||
| Transfer | `GET …/transfer/recipient`, `POST /customer/wallet/transfer` | Ya |
|
||||
| PIN (buat, ganti, lupa) | `/customer/pin/*` | – |
|
||||
| Game | `POST /customer/spin` | – |
|
||||
| (latar belakang) registrasi push | `PUT` / `DELETE /customer/devices` | – |
|
||||
|
||||
---
|
||||
|
||||
## 4. Beranda wallet, riwayat, kedaluwarsa
|
||||
|
||||
### 4.1 Beranda — `GET /customer/wallet`
|
||||
|
||||
```json
|
||||
{
|
||||
"point_balance": 12500,
|
||||
"coin_balance": 8,
|
||||
"point_value": 1,
|
||||
"point_discount_value": 12500,
|
||||
"nearest_expiring": {
|
||||
"point": { "amount": 150, "date": "2026-12-31" },
|
||||
"coin": null
|
||||
},
|
||||
"recent_transactions": [
|
||||
/* sama dengan item riwayat §4.2, maksimal 5 */
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Tampilkan:
|
||||
|
||||
- Saldo EnakPoint (`point_balance`) dengan keterangan "setara potongan Rp
|
||||
{point_discount_value}" (format ribuan Indonesia: `Rp 12.500`).
|
||||
- Saldo EnakCoin (`coin_balance`).
|
||||
- Bila `nearest_expiring.point` / `.coin` tidak `null`: banner "{amount} EnakPoint akan
|
||||
kedaluwarsa pada {date}" yang membuka layar §4.3.
|
||||
- 5 mutasi terakhir dari `recent_transactions`, dengan tautan "Lihat semua" ke §4.2.
|
||||
- Tombol aksi: Bayar di kasir (§7.1), Tukar EnakCoin (§8.1), Transfer (§8.2), Main game (§9).
|
||||
|
||||
Muat ulang beranda setelah setiap transaksi dan saat menerima push (§5).
|
||||
|
||||
Field `total_points`, `points_history`, `last_updated` di response ini **deprecated**;
|
||||
jangan dipakai.
|
||||
|
||||
### 4.2 Riwayat — `GET /customer/wallet/transactions`
|
||||
|
||||
Query (semua opsional):
|
||||
|
||||
| Query | Contoh | Keterangan |
|
||||
| ------------ | -------------- | --------------------------------------------------- |
|
||||
| `page` | `1` | Mulai dari 1 |
|
||||
| `limit` | `20` | 1–100, default 20 |
|
||||
| `currency` | `POINT` | `POINT` atau `COIN`; untuk tab EnakPoint / EnakCoin |
|
||||
| `type` | `EARN,PAYMENT` | Satu atau beberapa tipe dipisah koma, untuk filter |
|
||||
| `from`, `to` | `2026-09-01` | Tanggal WIB, inklusif |
|
||||
|
||||
```json
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "…",
|
||||
"currency": "POINT",
|
||||
"type": "EARN",
|
||||
"amount": 875,
|
||||
"balance_after": 12500,
|
||||
"description": "Belanja #ORD-0123 di Outlet Kemang",
|
||||
"source": { "type": "ORDER", "id": "…" },
|
||||
"outlet_id": "…",
|
||||
"group_id": null,
|
||||
"expires_at": "2026-12-31T23:59:59+07:00",
|
||||
"lots": [{ "amount": 875, "remaining": 875, "expires_at": "2026-12-31T23:59:59+07:00" }],
|
||||
"created_at": "2026-09-30T12:01:00Z"
|
||||
}
|
||||
],
|
||||
"pagination": { "page": 1, "limit": 20, "total_count": 42, "total_pages": 3 }
|
||||
}
|
||||
```
|
||||
|
||||
Aturan tampilan:
|
||||
|
||||
- `amount` bertanda: positif tampil hijau dengan `+`, negatif merah dengan `−`.
|
||||
- `description` sudah siap tampil (nama lawan transfer sudah disamarkan). Tampilkan apa
|
||||
adanya.
|
||||
- Mutasi masuk yang punya `expires_at` menampilkan "Berlaku sampai {tanggal}".
|
||||
- Infinite scroll memakai `pagination.total_pages`.
|
||||
- Riwayat tidak pernah berubah atau hilang; koreksi muncul sebagai baris baru.
|
||||
|
||||
Label tipe:
|
||||
|
||||
| `type` | Label | Arah |
|
||||
| ---------------- | --------------------------------- | ----- |
|
||||
| `EARN` | Dari belanja | + |
|
||||
| `EARN_REVERSAL` | Dibatalkan (order di-void/refund) | − |
|
||||
| `PAYMENT` | Bayar pesanan | − |
|
||||
| `PAYMENT_REFUND` | Pengembalian pembayaran | + |
|
||||
| `EXCHANGE_OUT` | Ditukar ke EnakPoint | − |
|
||||
| `EXCHANGE_IN` | Hasil tukar EnakCoin | + |
|
||||
| `TRANSFER_OUT` | Transfer keluar | − |
|
||||
| `TRANSFER_IN` | Transfer masuk | + |
|
||||
| `GAME_SPEND` | Main game | − |
|
||||
| `EXPIRE` | Kedaluwarsa | − |
|
||||
| `ADJUSTMENT` | Koreksi | + / − |
|
||||
| `MIGRATION` | Saldo awal | + |
|
||||
|
||||
### 4.3 Akan kedaluwarsa — `GET /customer/wallet/expiring`
|
||||
|
||||
```json
|
||||
{
|
||||
"point": [
|
||||
{ "amount": 150, "date": "2026-10-31" },
|
||||
{ "amount": 200, "date": "2026-12-31" }
|
||||
],
|
||||
"coin": []
|
||||
}
|
||||
```
|
||||
|
||||
Daftar per tanggal, paling dekat di atas. Daftar kosong: tampilkan "Tidak ada saldo
|
||||
yang akan kedaluwarsa". Saldo yang kedaluwarsa hangus tanpa kompensasi.
|
||||
|
||||
---
|
||||
|
||||
### 4.4 Daftar outlet — `GET /customer/outlets`
|
||||
|
||||
Outlet aktif di organisasi customer, tempat saldo EnakPoint & EnakCoin berlaku. Urut
|
||||
berdasarkan nama.
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "…",
|
||||
"name": "Gokuna Kemang",
|
||||
"address": "Jl. Kemang Raya 10",
|
||||
"accepts_point_payment": true,
|
||||
"earns_points": true,
|
||||
"earns_coins": false
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
- `address` bisa `null`.
|
||||
- `accepts_point_payment`: kasir di outlet ini menerima pembayaran EnakPoint. Pakai
|
||||
untuk label "Bisa bayar pakai EnakPoint".
|
||||
- `earns_points` / `earns_coins`: belanja di outlet ini memberi EnakPoint / EnakCoin.
|
||||
- Belum ada telepon, koordinat, atau jam buka; data itu belum disimpan di backend.
|
||||
|
||||
### 4.5 Riwayat order — `GET /customer/orders` dan `GET /customer/orders/:id`
|
||||
|
||||
Order milik customer yang login di semua outlet organisasinya, terbaru di atas. Order
|
||||
hanya masuk ke sini bila kasir mengaitkannya ke customer.
|
||||
|
||||
`GET /api/v1/customer/orders?page=1&limit=20` (`limit` 1–100, default 20):
|
||||
|
||||
```json
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"id": "…",
|
||||
"order_number": "ORD-0123",
|
||||
"outlet_id": "…",
|
||||
"outlet_name": "Gokuna 1",
|
||||
"order_type": "dine_in",
|
||||
"status": "completed",
|
||||
"payment_status": "completed",
|
||||
"total_amount": 99000,
|
||||
"item_count": 2,
|
||||
"is_void": false,
|
||||
"is_refund": false,
|
||||
"points_earned": 865,
|
||||
"coins_earned": 3,
|
||||
"created_at": "2026-09-30T12:01:00Z"
|
||||
}
|
||||
],
|
||||
"pagination": { "page": 1, "limit": 20, "total_count": 42, "total_pages": 3 }
|
||||
}
|
||||
```
|
||||
|
||||
`GET /api/v1/customer/orders/{id}` mengembalikan field yang sama, ditambah:
|
||||
|
||||
```json
|
||||
{
|
||||
"table_number": "A3",
|
||||
"subtotal": 90000,
|
||||
"discount_amount": 0,
|
||||
"tax_amount": 9000,
|
||||
"refund_amount": 0,
|
||||
"items": [
|
||||
{
|
||||
"id": "…",
|
||||
"product_id": "…",
|
||||
"product_name": "Kopi Susu",
|
||||
"variant_name": "Large",
|
||||
"quantity": 2,
|
||||
"unit_price": 25000,
|
||||
"total_price": 50000,
|
||||
"refund_quantity": 0,
|
||||
"modifiers": [],
|
||||
"status": "completed"
|
||||
},
|
||||
{
|
||||
"id": "…",
|
||||
"product_id": "…",
|
||||
"product_name": "Ikan Tude",
|
||||
"variant_name": null,
|
||||
"quantity": 1,
|
||||
"weight": 4.2,
|
||||
"unit_name": "ons",
|
||||
"unit_price": 4500,
|
||||
"total_price": 18900,
|
||||
"refund_quantity": 0,
|
||||
"modifiers": [],
|
||||
"status": "completed"
|
||||
}
|
||||
],
|
||||
"payments": [
|
||||
{ "id": "…", "method_name": "EnakPoint", "method_type": "point", "amount": 12500, "status": "completed", "refund_amount": 0, "points_used": 12500, "point_value": 1, "created_at": "…" },
|
||||
{ "id": "…", "method_name": "Cash", "method_type": "cash", "amount": 86500, "status": "completed", "refund_amount": 0, "created_at": "…" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- Order customer lain atau yang tidak ada → `404`.
|
||||
- `points_earned` / `coins_earned`: yang didapat dari order ini; 0 bila tidak ada.
|
||||
- Item timbangan membawa `weight` dan `unit_name`; tampilkan "1 × 4,2 ons".
|
||||
- Pembayaran EnakPoint membawa `points_used`; tampilkan "EnakPoint 12.500 (Rp 12.500)".
|
||||
- Order yang `is_void` atau `is_refund` tetap tampil, beri label "Dibatalkan" /
|
||||
"Direfund".
|
||||
|
||||
## 5. Notifikasi push (FCM)
|
||||
|
||||
### 5.1 Registrasi device
|
||||
|
||||
Setelah login berhasil **dan** setiap kali FCM memberi token baru (`onTokenRefresh`):
|
||||
|
||||
`PUT /api/v1/customer/devices`
|
||||
|
||||
```json
|
||||
{ "device_id": "<id unik & stabil per instalasi>", "fcm_token": "<token FCM>", "platform": "android", "app_version": "2.4.0" }
|
||||
```
|
||||
|
||||
- `device_id` wajib, stabil untuk satu instalasi (simpan di secure storage).
|
||||
- `platform`: `android`, `ios`, atau `web`.
|
||||
- Saat **logout**, panggil `DELETE /api/v1/customer/devices/{device_id}` sebelum
|
||||
menghapus token login, supaya HP itu tidak lagi menerima notifikasi akun ini.
|
||||
|
||||
Tanpa registrasi ini, customer tidak menerima push apa pun.
|
||||
|
||||
### 5.2 Tipe push
|
||||
|
||||
Semua nilai di `data` berupa string.
|
||||
|
||||
| `data.type` | Kapan | Isi `data` lain | Aksi saat di-tap |
|
||||
| -------------------- | ---------------------------------- | -------------------------------------------------- | --------------------------------- |
|
||||
| `WALLET_TRANSFER_IN` | Menerima transfer | `transaction_id`, `group_id`, `currency`, `amount` | Buka riwayat, sorot transaksi itu |
|
||||
| `WALLET_EXPIRING` | Beberapa hari sebelum saldo hangus | `currency`, `amount`, `expiry_date` | Buka layar kedaluwarsa (§4.3) |
|
||||
| `WALLET_EXPIRED` | Saldo baru saja hangus | `currency`, `amount` | Buka riwayat |
|
||||
| `PIN_LOCKED` | PIN terkunci setelah 5 kali salah | `locked_until` (RFC3339 UTC) | Buka layar lupa PIN (§6.4) |
|
||||
|
||||
Saat app terbuka dan menerima push wallet, muat ulang beranda.
|
||||
|
||||
---
|
||||
|
||||
## 6. PIN
|
||||
|
||||
### 6.1 Kapan diminta
|
||||
|
||||
Jangan minta PIN saat registrasi. Minta saat customer **pertama kali** melakukan aksi
|
||||
yang butuh PIN. Cek dengan:
|
||||
|
||||
`GET /api/v1/customer/pin/status` → `{ "has_pin": false, "locked_until": null, "transfer_blocked_until": null }`
|
||||
|
||||
Bila `has_pin: false`, arahkan ke alur buat PIN, lalu kembali ke aksi semula.
|
||||
|
||||
### 6.2 Buat PIN
|
||||
|
||||
1. `POST /api/v1/customer/pin/otp` dengan `{ "purpose": "pin_setup" }`.
|
||||
Response: `{ "purpose": "pin_setup", "otp_token": "…", "expires_at": "…" }`.
|
||||
OTP dikirim ke WhatsApp customer.
|
||||
2. Customer memasukkan kode OTP, lalu PIN dua kali.
|
||||
3. `POST /api/v1/customer/pin` dengan
|
||||
`{ "otp_token": "…", "otp_code": "123456", "pin": "482913", "confirm_pin": "482913" }`.
|
||||
Response: status PIN.
|
||||
|
||||
Validasi di app sebelum kirim (server juga memeriksa, jawab `304`):
|
||||
|
||||
- Tepat 6 digit angka, dan konfirmasi sama.
|
||||
- Bukan satu digit berulang (`111111`).
|
||||
- Bukan berurutan naik/turun (`123456`, `654321`).
|
||||
- Bukan tanggal lahir customer (`DDMMYY` atau `YYMMDD`).
|
||||
|
||||
Minta OTP lagi terlalu cepat → `429`: tampilkan hitung mundur.
|
||||
|
||||
### 6.3 Ganti PIN
|
||||
|
||||
`PUT /api/v1/customer/pin` dengan `{ "old_pin": "…", "pin": "…", "confirm_pin": "…" }`.
|
||||
|
||||
### 6.4 Lupa PIN
|
||||
|
||||
1. `POST /customer/pin/otp` dengan `{ "purpose": "pin_reset" }`.
|
||||
2. `POST /customer/pin/reset` dengan `{ "otp_token", "otp_code", "pin", "confirm_pin" }`.
|
||||
|
||||
Reset juga membuka PIN yang terkunci. Setelah reset, **transfer keluar ditahan 24 jam**;
|
||||
bayar dan tukar tetap bisa. Beri tahu customer hal ini di layar sukses.
|
||||
|
||||
### 6.5 Menangani error PIN
|
||||
|
||||
Semua endpoint yang menerima `pin` bisa menjawab error PIN. Pada error ini **`data`
|
||||
tidak `null`**:
|
||||
|
||||
```json
|
||||
{ "success": false, "data": { "code": "PIN_INVALID", "remaining_attempts": 3 }, "errors": [ … ] }
|
||||
```
|
||||
|
||||
| `data.code` | Field tambahan | Tampilan |
|
||||
| ------------------ | ------------------------ | ---------------------------------------------------- |
|
||||
| `PIN_NOT_SET` | – | Buka alur buat PIN (§6.2) |
|
||||
| `PIN_INVALID` | `remaining_attempts` | "PIN salah, sisa {n} percobaan." Kosongkan input PIN |
|
||||
| `PIN_LOCKED` | `locked_until` | "PIN terkunci sampai {jam}." Tombol "Lupa PIN" |
|
||||
| `TRANSFER_BLOCKED` | `transfer_blocked_until` | "Transfer bisa dilakukan lagi pada {waktu}." |
|
||||
|
||||
5 kali salah berturut-turut mengunci PIN 30 menit; selama terkunci PIN yang benar pun
|
||||
ditolak. Penghitung ada di server, jadi jangan membuat penghitung sendiri di app.
|
||||
|
||||
---
|
||||
|
||||
## 7. Membayar dengan EnakPoint
|
||||
|
||||
App customer tidak membuat atau membayar order; order hanya bisa dilihat (§4.5).
|
||||
EnakPoint hanya dipakai membayar di kasir, lewat kode bayar dari app. Jangan membangun
|
||||
layar checkout atau memanggil `POST /customer/orders/:id/pay-with-points`.
|
||||
|
||||
### 7.1 Di kasir — kode bayar
|
||||
|
||||
Customer tidak pernah mengetik PIN di mesin kasir. Alurnya:
|
||||
|
||||
1. Customer membuka "Bayar di kasir" dan memasukkan PIN.
|
||||
2. `POST /api/v1/customer/wallet/payment-code` dengan `{ "pin": "482913" }`:
|
||||
|
||||
```json
|
||||
{ "code": "482913", "qr_payload": "enakpoint:482913", "expires_at": "2026-09-30T05:02:00Z" }
|
||||
```
|
||||
|
||||
3. Tampilkan `code` besar (angka) **dan** QR dari `qr_payload` (string apa adanya).
|
||||
4. Tampilkan hitung mundur ke `expires_at` (2 menit). Setelah habis, sembunyikan kode
|
||||
dan tampilkan tombol "Buat kode baru".
|
||||
5. Kasir memindai/mengetik kode dan memilih jumlah EnakPoint. App tidak menerima
|
||||
callback; setelah customer kembali ke beranda, muat ulang saldo.
|
||||
|
||||
Kode sekali pakai. Membuat kode baru membatalkan kode lama.
|
||||
|
||||
### 7.2 Refund
|
||||
|
||||
Bila order yang dibayar EnakPoint dibatalkan atau direfund, EnakPoint kembali sebagai
|
||||
EnakPoint (tidak pernah tunai) dan muncul di riwayat sebagai `PAYMENT_REFUND`.
|
||||
|
||||
---
|
||||
|
||||
## 8. Tukar dan transfer
|
||||
|
||||
### 8.1 Tukar EnakCoin → EnakPoint
|
||||
|
||||
1. Customer mengetik jumlah EnakCoin. Panggil preview (debounce saat mengetik):
|
||||
|
||||
`GET /api/v1/customer/wallet/exchange/preview?coins=30`
|
||||
|
||||
```json
|
||||
{ "coin_amount": 10, "point_amount": 3, "coin_balance": 35, "coins": 30, "points": 9, "valid": true }
|
||||
```
|
||||
|
||||
- Kurs: `coin_amount` EnakCoin = `point_amount` EnakPoint. Tampilkan "10 EnakCoin =
|
||||
3 EnakPoint".
|
||||
- Bila `valid: false`, tampilkan `reason` sebagai alasan dan nonaktifkan tombol. Jumlah
|
||||
harus kelipatan `coin_amount`.
|
||||
- Tampilkan "Kamu akan mendapat {points} EnakPoint".
|
||||
|
||||
2. Konfirmasi (tukar tidak bisa dibatalkan) → minta PIN →
|
||||
|
||||
`POST /api/v1/customer/wallet/exchange` + header `Idempotency-Key`
|
||||
|
||||
```json
|
||||
{ "coins": 30, "pin": "482913" }
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"group_id": "…",
|
||||
"coins": 30,
|
||||
"points": 9,
|
||||
"coin_amount": 10,
|
||||
"point_amount": 3,
|
||||
"lots": [{ "amount": 9, "expires_at": "2026-12-31T23:59:59+07:00" }],
|
||||
"coin_balance": 5,
|
||||
"point_balance": 9,
|
||||
"replayed": false
|
||||
}
|
||||
```
|
||||
|
||||
3. Layar sukses: saldo baru, dan bila `lots[].expires_at` ada, "EnakPoint ini berlaku
|
||||
sampai {tanggal}".
|
||||
|
||||
### 8.2 Transfer
|
||||
|
||||
1. Pilih mata uang (EnakPoint / EnakCoin), isi nomor HP penerima dan jumlah.
|
||||
2. Cek penerima:
|
||||
|
||||
`GET /api/v1/customer/wallet/transfer/recipient?phone=081234561234`
|
||||
|
||||
```json
|
||||
{ "name": "Bu*** Sa***", "phone_number": "08**-****-1234" }
|
||||
```
|
||||
|
||||
| Hasil | Tampilan |
|
||||
| ------ | ---------------------------------------------------------------- |
|
||||
| Sukses | "Kirim ke Bu*** Sa*** (08**-\*\***-1234)?" |
|
||||
| `404` | "Nomor ini tidak terdaftar" |
|
||||
| `304` | "Tidak bisa mengirim ke nomor ini" (diri sendiri, akun nonaktif) |
|
||||
|
||||
3. Konfirmasi (transfer final, tidak bisa dibatalkan) → minta PIN →
|
||||
|
||||
`POST /api/v1/customer/wallet/transfer` + header `Idempotency-Key`
|
||||
|
||||
```json
|
||||
{ "currency": "POINT", "amount": 120, "recipient_phone": "081234561234", "pin": "482913" }
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"group_id": "…",
|
||||
"currency": "POINT",
|
||||
"amount": 120,
|
||||
"recipient": { "name": "Bu*** Sa***", "phone_number": "08**-****-1234" },
|
||||
"lots": [
|
||||
{ "amount": 100, "expires_at": "2026-12-31T23:59:59+07:00" },
|
||||
{ "amount": 20, "expires_at": null }
|
||||
],
|
||||
"balance": 30,
|
||||
"replayed": false
|
||||
}
|
||||
```
|
||||
|
||||
4. Layar sukses: saldo tersisa (`balance`). Bila ada `lots[].expires_at`, tampilkan
|
||||
"Saldo yang dikirim berlaku sampai {tanggal}" (tanggal kedaluwarsa ikut terbawa ke
|
||||
penerima).
|
||||
|
||||
Penolakan `304` yang mungkin: transfer dimatikan owner, di bawah minimal, di atas
|
||||
maksimal per transaksi, melewati batas harian (reset tengah malam WIB), saldo tidak
|
||||
cukup. Tampilkan pesan umum "Transfer tidak bisa diproses" plus alasan yang sesuai
|
||||
bila bisa dikenali. Bila kena `TRANSFER_BLOCKED`, ikuti §6.5.
|
||||
|
||||
Penerima mendapat push `WALLET_TRANSFER_IN`.
|
||||
|
||||
---
|
||||
|
||||
## 9. Game (memakai EnakCoin)
|
||||
|
||||
`POST /api/v1/customer/spin` dengan `{ "spin_id": "<id game>" }`. Tanpa PIN.
|
||||
|
||||
```json
|
||||
{
|
||||
"game_play": { "id": "…", "game_id": "…", "coins_used": 1, "created_at": "…" },
|
||||
"prize_won": { "id": "…", "name": "Voucher 10rb" },
|
||||
"coins_remaining": 7
|
||||
}
|
||||
```
|
||||
|
||||
- Setiap game punya biaya sendiri: `metadata.coin_cost` pada data game dari
|
||||
`GET /api/v1/customer/games` (atau `GET /customer/ferris-wheel`), default 1 bila kosong.
|
||||
Tampilkan biaya sebelum main, dan nonaktifkan tombol bila `coin_balance` kurang.
|
||||
- `304`: EnakCoin kurang, game nonaktif, atau hadiah baru saja habis. Tidak ada
|
||||
EnakCoin yang terpotong; tampilkan pesan dan biarkan customer mencoba lagi.
|
||||
- Setelah main, perbarui saldo EnakCoin dari `coins_remaining`.
|
||||
|
||||
---
|
||||
|
||||
## 10. Yang sudah dihapus / deprecated
|
||||
|
||||
Sudah **dihapus** dari API (jangan dipanggil, akan error / tidak ada):
|
||||
|
||||
| Lama | Pengganti |
|
||||
| ------------------------------------------------- | ----------------------------------------------------------------- |
|
||||
| `GET /customer/tokens` | `GET /customer/wallet` → `coin_balance` |
|
||||
| `total_tokens`, `tokens_history` | `coin_balance`, `GET /customer/wallet/transactions?currency=COIN` |
|
||||
| `token_used`, `tokens_remaining` di response game | `coins_used`, `coins_remaining` |
|
||||
|
||||
Masih ada tapi **deprecated** (akan dihapus, jangan dipakai di kode baru):
|
||||
|
||||
| Lama | Pengganti |
|
||||
| ---------------------------------------------------------------------- | ---------------------------------------- |
|
||||
| `GET /customer/points` | `GET /customer/wallet` → `point_balance` |
|
||||
| `total_points`, `points_history`, `last_updated` di `/customer/wallet` | `point_balance`, `recent_transactions` |
|
||||
|
||||
---
|
||||
|
||||
## 11. Checklist selesai
|
||||
|
||||
- [ ] Beranda menampilkan saldo EnakPoint ("setara potongan Rp …"), EnakCoin, dan banner kedaluwarsa terdekat.
|
||||
- [ ] Riwayat dengan tab per mata uang, filter tipe/tanggal, infinite scroll, label tipe sesuai §4.2.
|
||||
- [ ] Layar saldo akan kedaluwarsa.
|
||||
- [ ] Registrasi device FCM setelah login dan saat token berganti; unregister saat logout.
|
||||
- [ ] Penanganan tap untuk keempat tipe push.
|
||||
- [ ] PIN diminta hanya saat aksi yang membutuhkan; alur buat, ganti, dan lupa PIN lewat OTP.
|
||||
- [ ] Keempat error PIN ditangani di semua layar yang meminta PIN.
|
||||
- [ ] Kode bayar: angka + QR, hitung mundur 2 menit, tombol buat ulang.
|
||||
- [ ] Tukar dengan preview, kelipatan kurs, konfirmasi, `Idempotency-Key`, retry dengan key sama.
|
||||
- [ ] Transfer dengan cek penerima tersamar, konfirmasi, `Idempotency-Key`, retry dengan key sama.
|
||||
- [ ] Game memakai `coins_used` / `coins_remaining` dan menampilkan biaya per game.
|
||||
- [ ] Riwayat order dengan pagination dan layar detail (item, pembayaran, EnakPoint/EnakCoin yang didapat).
|
||||
- [ ] Tidak ada pemakaian endpoint atau field di §10.
|
||||
- [ ] PIN tidak pernah disimpan, di-log, atau dikirim ke analytics.
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<!-- Ganti "app-store-connect" jika perlu: ad-hoc, enterprise, development -->
|
||||
<key>method</key>
|
||||
<string>app-store-connect</string>
|
||||
|
||||
<!-- Team ID dari Apple Developer account -->
|
||||
<key>teamID</key>
|
||||
<string>5TRC3M8UZG</string>
|
||||
|
||||
<!-- Signing style: manual (pakai provisioning profile eksplisit) -->
|
||||
<key>signingStyle</key>
|
||||
<string>manual</string>
|
||||
|
||||
<!-- Provisioning profiles: key = bundle ID, value = nama profile -->
|
||||
<key>provisioningProfiles</key>
|
||||
<dict>
|
||||
<key>com.apskel.enaklocustomer</key>
|
||||
<string>Enaklo Customer</string>
|
||||
</dict>
|
||||
|
||||
<key>stripSwiftSymbols</key>
|
||||
<true/>
|
||||
|
||||
<key>uploadBitcode</key>
|
||||
<false/>
|
||||
|
||||
<key>uploadSymbols</key>
|
||||
<true/>
|
||||
|
||||
<key>compileBitcode</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -21,6 +21,6 @@
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>12.0</string>
|
||||
<string>15.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
# platform :ios, '12.0'
|
||||
platform :ios, '15.0'
|
||||
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
@@ -39,5 +39,12 @@ end
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
flutter_additional_ios_build_settings(target)
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
|
||||
# Disable code signing for all Pod targets — only Runner needs signing
|
||||
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
||||
config.build_settings['CODE_SIGNING_REQUIRED'] = 'NO'
|
||||
config.build_settings['CODE_SIGN_IDENTITY'] = ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
@@ -368,7 +368,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.appskel.enaklo;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apskel.enaklocustomer;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@@ -384,7 +384,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.appskel.enaklo.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apskel.enaklocustomer.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -401,7 +401,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.appskel.enaklo.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apskel.enaklocustomer.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -416,7 +416,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.appskel.enaklo.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apskel.enaklocustomer.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@@ -472,7 +472,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -523,7 +523,7 @@
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
@@ -547,7 +547,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.appskel.enaklo;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apskel.enaklocustomer;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@@ -569,7 +569,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.appskel.enaklo;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.apskel.enaklocustomer;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../domain/auth/auth.dart';
|
||||
|
||||
part 'auth_event.dart';
|
||||
part 'auth_state.dart';
|
||||
part 'auth_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
||||
final IAuthRepository _repository;
|
||||
AuthBloc(this._repository) : super(AuthState.initial()) {
|
||||
on<AuthEvent>(_onAuthEvent);
|
||||
}
|
||||
|
||||
Future<void> _onAuthEvent(AuthEvent event, Emitter<AuthState> emit) {
|
||||
return event.map(
|
||||
fetchCurrentUser: (e) async {
|
||||
emit(state.copyWith(failureOption: none()));
|
||||
|
||||
final token = await _repository.hasToken();
|
||||
|
||||
final failureOrAuth = await _repository.currentUser();
|
||||
|
||||
failureOrAuth.fold(
|
||||
(f) => emit(
|
||||
state.copyWith(
|
||||
failureOption: optionOf(f),
|
||||
status: token
|
||||
? AuthStatus.authenticated()
|
||||
: AuthStatus.unauthenticated(),
|
||||
),
|
||||
),
|
||||
(user) => emit(
|
||||
state.copyWith(
|
||||
user: user,
|
||||
status: token
|
||||
? AuthStatus.authenticated()
|
||||
: AuthStatus.unauthenticated(),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,778 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'auth_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$AuthEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is AuthEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $AuthEventCopyWith<$Res> {
|
||||
$AuthEventCopyWith(AuthEvent _, $Res Function(AuthEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [AuthEvent].
|
||||
extension AuthEventPatterns on AuthEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _FetchCurrentUser value)? fetchCurrentUser,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _FetchCurrentUser() when fetchCurrentUser != null:
|
||||
return fetchCurrentUser(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _FetchCurrentUser value) fetchCurrentUser,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _FetchCurrentUser():
|
||||
return fetchCurrentUser(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _FetchCurrentUser value)? fetchCurrentUser,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _FetchCurrentUser() when fetchCurrentUser != null:
|
||||
return fetchCurrentUser(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()? fetchCurrentUser,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _FetchCurrentUser() when fetchCurrentUser != null:
|
||||
return fetchCurrentUser();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function() fetchCurrentUser,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _FetchCurrentUser():
|
||||
return fetchCurrentUser();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetchCurrentUser,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _FetchCurrentUser() when fetchCurrentUser != null:
|
||||
return fetchCurrentUser();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _FetchCurrentUser implements AuthEvent {
|
||||
const _FetchCurrentUser();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _FetchCurrentUser);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthEvent.fetchCurrentUser()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$AuthState {
|
||||
|
||||
User get user; AuthStatus get status; Option<AuthFailure> get failureOption; bool get isFetching;
|
||||
/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$AuthStateCopyWith<AuthState> get copyWith => _$AuthStateCopyWithImpl<AuthState>(this as AuthState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as AuthState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is AuthState&&(identical(other.user, _this.user) || other.user == _this.user)&&(identical(other.status, _this.status) || other.status == _this.status)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isFetching, _this.isFetching) || other.isFetching == _this.isFetching));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as AuthState;
|
||||
return Object.hash(runtimeType,_this.user,_this.status,_this.failureOption,_this.isFetching);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as AuthState;
|
||||
return 'AuthState(user: ${_this.user}, status: ${_this.status}, failureOption: ${_this.failureOption}, isFetching: ${_this.isFetching})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $AuthStateCopyWith<$Res> {
|
||||
factory $AuthStateCopyWith(AuthState value, $Res Function(AuthState) _then) = _$AuthStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
User user, AuthStatus status, Option<AuthFailure> failureOption, bool isFetching
|
||||
});
|
||||
|
||||
|
||||
$UserCopyWith<$Res> get user;$AuthStatusCopyWith<$Res> get status;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$AuthStateCopyWithImpl<$Res>
|
||||
implements $AuthStateCopyWith<$Res> {
|
||||
_$AuthStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final AuthState _self;
|
||||
final $Res Function(AuthState) _then;
|
||||
|
||||
/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? user = null,Object? status = null,Object? failureOption = null,Object? isFetching = null,}) {
|
||||
return _then(AuthState(
|
||||
user: null == user ? _self.user : user // ignore: cast_nullable_to_non_nullable
|
||||
as User,status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable
|
||||
as AuthStatus,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AuthFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$UserCopyWith<$Res> get user {
|
||||
|
||||
return $UserCopyWith<$Res>(_self.user, (value) {
|
||||
return _then(_self.copyWith(user: value));
|
||||
});
|
||||
}/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$AuthStatusCopyWith<$Res> get status {
|
||||
|
||||
return $AuthStatusCopyWith<$Res>(_self.status, (value) {
|
||||
return _then(_self.copyWith(status: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [AuthState].
|
||||
extension AuthStatePatterns on AuthState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _AuthState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _AuthState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _AuthState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _AuthState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _AuthState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _AuthState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( User user, AuthStatus status, Option<AuthFailure> failureOption, bool isFetching)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _AuthState() when $default != null:
|
||||
return $default(_that.user,_that.status,_that.failureOption,_that.isFetching);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( User user, AuthStatus status, Option<AuthFailure> failureOption, bool isFetching) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _AuthState():
|
||||
return $default(_that.user,_that.status,_that.failureOption,_that.isFetching);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( User user, AuthStatus status, Option<AuthFailure> failureOption, bool isFetching)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _AuthState() when $default != null:
|
||||
return $default(_that.user,_that.status,_that.failureOption,_that.isFetching);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _AuthState extends AuthState {
|
||||
const _AuthState({required this.user, this.status = const AuthStatus.initial(), required this.failureOption, this.isFetching = false}): super._();
|
||||
|
||||
|
||||
@override final User user;
|
||||
@override@JsonKey() final AuthStatus status;
|
||||
@override final Option<AuthFailure> failureOption;
|
||||
@override@JsonKey() final bool isFetching;
|
||||
|
||||
/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$AuthStateCopyWith<_AuthState> get copyWith => __$AuthStateCopyWithImpl<_AuthState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _AuthState&&(identical(other.user, user) || other.user == user)&&(identical(other.status, status) || other.status == status)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isFetching, isFetching) || other.isFetching == isFetching));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,user,status,failureOption,isFetching);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthState(user: $user, status: $status, failureOption: $failureOption, isFetching: $isFetching)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$AuthStateCopyWith<$Res> implements $AuthStateCopyWith<$Res> {
|
||||
factory _$AuthStateCopyWith(_AuthState value, $Res Function(_AuthState) _then) = __$AuthStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
User user, AuthStatus status, Option<AuthFailure> failureOption, bool isFetching
|
||||
});
|
||||
|
||||
|
||||
@override $UserCopyWith<$Res> get user;@override $AuthStatusCopyWith<$Res> get status;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$AuthStateCopyWithImpl<$Res>
|
||||
implements _$AuthStateCopyWith<$Res> {
|
||||
__$AuthStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _AuthState _self;
|
||||
final $Res Function(_AuthState) _then;
|
||||
|
||||
/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? user = null,Object? status = null,Object? failureOption = null,Object? isFetching = null,}) {
|
||||
return _then(_AuthState(
|
||||
user: null == user ? _self.user : user // ignore: cast_nullable_to_non_nullable
|
||||
as User,status: null == status ? _self.status : status // ignore: cast_nullable_to_non_nullable
|
||||
as AuthStatus,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<AuthFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$UserCopyWith<$Res> get user {
|
||||
|
||||
return $UserCopyWith<$Res>(_self.user, (value) {
|
||||
return _then(_self.copyWith(user: value));
|
||||
});
|
||||
}/// Create a copy of AuthState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$AuthStatusCopyWith<$Res> get status {
|
||||
|
||||
return $AuthStatusCopyWith<$Res>(_self.status, (value) {
|
||||
return _then(_self.copyWith(status: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$AuthStatus {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is AuthStatus);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthStatus()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $AuthStatusCopyWith<$Res> {
|
||||
$AuthStatusCopyWith(AuthStatus _, $Res Function(AuthStatus) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [AuthStatus].
|
||||
extension AuthStatusPatterns on AuthStatus {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Authenticated value)? authenticated,TResult Function( _Unauthenticated value)? unauthenticated,TResult Function( _Initial value)? initial,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Authenticated() when authenticated != null:
|
||||
return authenticated(_that);case _Unauthenticated() when unauthenticated != null:
|
||||
return unauthenticated(_that);case _Initial() when initial != null:
|
||||
return initial(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Authenticated value) authenticated,required TResult Function( _Unauthenticated value) unauthenticated,required TResult Function( _Initial value) initial,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Authenticated():
|
||||
return authenticated(_that);case _Unauthenticated():
|
||||
return unauthenticated(_that);case _Initial():
|
||||
return initial(_that);}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Authenticated value)? authenticated,TResult? Function( _Unauthenticated value)? unauthenticated,TResult? Function( _Initial value)? initial,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Authenticated() when authenticated != null:
|
||||
return authenticated(_that);case _Unauthenticated() when unauthenticated != null:
|
||||
return unauthenticated(_that);case _Initial() when initial != null:
|
||||
return initial(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()? authenticated,TResult Function()? unauthenticated,TResult Function()? initial,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Authenticated() when authenticated != null:
|
||||
return authenticated();case _Unauthenticated() when unauthenticated != null:
|
||||
return unauthenticated();case _Initial() when initial != null:
|
||||
return initial();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function() authenticated,required TResult Function() unauthenticated,required TResult Function() initial,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Authenticated():
|
||||
return authenticated();case _Unauthenticated():
|
||||
return unauthenticated();case _Initial():
|
||||
return initial();}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? authenticated,TResult? Function()? unauthenticated,TResult? Function()? initial,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Authenticated() when authenticated != null:
|
||||
return authenticated();case _Unauthenticated() when unauthenticated != null:
|
||||
return unauthenticated();case _Initial() when initial != null:
|
||||
return initial();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Authenticated implements AuthStatus {
|
||||
const _Authenticated();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Authenticated);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthStatus.authenticated()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Unauthenticated implements AuthStatus {
|
||||
const _Unauthenticated();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Unauthenticated);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthStatus.unauthenticated()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Initial implements AuthStatus {
|
||||
const _Initial();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Initial);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AuthStatus.initial()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,6 @@
|
||||
part of 'auth_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class AuthEvent with _$AuthEvent {
|
||||
const factory AuthEvent.fetchCurrentUser() = _FetchCurrentUser;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
part of 'auth_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class AuthState with _$AuthState {
|
||||
const AuthState._();
|
||||
|
||||
const factory AuthState({
|
||||
required User user,
|
||||
@Default(AuthStatus.initial()) AuthStatus status,
|
||||
required Option<AuthFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
}) = _AuthState;
|
||||
|
||||
factory AuthState.initial() =>
|
||||
AuthState(user: User.empty(), failureOption: none());
|
||||
|
||||
bool get isAuthenticated => status == const AuthStatus.authenticated();
|
||||
bool get isInitial => status == const AuthStatus.initial();
|
||||
}
|
||||
|
||||
@freezed
|
||||
sealed class AuthStatus with _$AuthStatus {
|
||||
const factory AuthStatus.authenticated() = _Authenticated;
|
||||
const factory AuthStatus.unauthenticated() = _Unauthenticated;
|
||||
const factory AuthStatus.initial() = _Initial;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../common/function/app_function.dart';
|
||||
import '../../../domain/auth/auth.dart';
|
||||
|
||||
part 'check_phone_form_event.dart';
|
||||
part 'check_phone_form_state.dart';
|
||||
part 'check_phone_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class CheckPhoneFormBloc
|
||||
extends Bloc<CheckPhoneFormEvent, CheckPhoneFormState> {
|
||||
final IAuthRepository _repository;
|
||||
CheckPhoneFormBloc(this._repository) : super(CheckPhoneFormState.initial()) {
|
||||
on<CheckPhoneFormEvent>(_onCheckPhoneFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onCheckPhoneFormEvent(
|
||||
CheckPhoneFormEvent event,
|
||||
Emitter<CheckPhoneFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
phoneNumberChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
phoneNumber: e.phoneNumber,
|
||||
failureOrCheckPhoneOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
Either<AuthFailure, CheckPhone>? failureOrCheckPhone;
|
||||
emit(
|
||||
state.copyWith(isSubmitting: true, failureOrCheckPhoneOption: none()),
|
||||
);
|
||||
|
||||
final phoneNumberValid = state.phoneNumber.isNotEmpty;
|
||||
|
||||
if (phoneNumberValid) {
|
||||
failureOrCheckPhone = await _repository.checkPhone(
|
||||
phoneNumber: getNormalizePhone(state.phoneNumber),
|
||||
);
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrCheckPhoneOption: optionOf(failureOrCheckPhone),
|
||||
),
|
||||
);
|
||||
}
|
||||
emit(state.copyWith(showErrorMessages: true, isSubmitting: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,554 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'check_phone_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$CheckPhoneFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is CheckPhoneFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'CheckPhoneFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $CheckPhoneFormEventCopyWith<$Res> {
|
||||
$CheckPhoneFormEventCopyWith(CheckPhoneFormEvent _, $Res Function(CheckPhoneFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [CheckPhoneFormEvent].
|
||||
extension CheckPhoneFormEventPatterns on CheckPhoneFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _PhoneNumberChanged value) phoneNumberChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String phoneNumber)? phoneNumberChanged,TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String phoneNumber) phoneNumberChanged,required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that.phoneNumber);case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String phoneNumber)? phoneNumberChanged,TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PhoneNumberChanged implements CheckPhoneFormEvent {
|
||||
const _PhoneNumberChanged(this.phoneNumber);
|
||||
|
||||
|
||||
final String phoneNumber;
|
||||
|
||||
/// Create a copy of CheckPhoneFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PhoneNumberChangedCopyWith<_PhoneNumberChanged> get copyWith => __$PhoneNumberChangedCopyWithImpl<_PhoneNumberChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PhoneNumberChanged&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'CheckPhoneFormEvent.phoneNumberChanged(phoneNumber: $phoneNumber)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PhoneNumberChangedCopyWith<$Res> implements $CheckPhoneFormEventCopyWith<$Res> {
|
||||
factory _$PhoneNumberChangedCopyWith(_PhoneNumberChanged value, $Res Function(_PhoneNumberChanged) _then) = __$PhoneNumberChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PhoneNumberChangedCopyWithImpl<$Res>
|
||||
implements _$PhoneNumberChangedCopyWith<$Res> {
|
||||
__$PhoneNumberChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PhoneNumberChanged _self;
|
||||
final $Res Function(_PhoneNumberChanged) _then;
|
||||
|
||||
/// Create a copy of CheckPhoneFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,}) {
|
||||
return _then(_PhoneNumberChanged(
|
||||
null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements CheckPhoneFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'CheckPhoneFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$CheckPhoneFormState {
|
||||
|
||||
String get phoneNumber; Option<Either<AuthFailure, CheckPhone>> get failureOrCheckPhoneOption; bool get isSubmitting; bool get showErrorMessages;
|
||||
/// Create a copy of CheckPhoneFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$CheckPhoneFormStateCopyWith<CheckPhoneFormState> get copyWith => _$CheckPhoneFormStateCopyWithImpl<CheckPhoneFormState>(this as CheckPhoneFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as CheckPhoneFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is CheckPhoneFormState&&(identical(other.phoneNumber, _this.phoneNumber) || other.phoneNumber == _this.phoneNumber)&&(identical(other.failureOrCheckPhoneOption, _this.failureOrCheckPhoneOption) || other.failureOrCheckPhoneOption == _this.failureOrCheckPhoneOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.showErrorMessages, _this.showErrorMessages) || other.showErrorMessages == _this.showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as CheckPhoneFormState;
|
||||
return Object.hash(runtimeType,_this.phoneNumber,_this.failureOrCheckPhoneOption,_this.isSubmitting,_this.showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as CheckPhoneFormState;
|
||||
return 'CheckPhoneFormState(phoneNumber: ${_this.phoneNumber}, failureOrCheckPhoneOption: ${_this.failureOrCheckPhoneOption}, isSubmitting: ${_this.isSubmitting}, showErrorMessages: ${_this.showErrorMessages})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $CheckPhoneFormStateCopyWith<$Res> {
|
||||
factory $CheckPhoneFormStateCopyWith(CheckPhoneFormState value, $Res Function(CheckPhoneFormState) _then) = _$CheckPhoneFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber, Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$CheckPhoneFormStateCopyWithImpl<$Res>
|
||||
implements $CheckPhoneFormStateCopyWith<$Res> {
|
||||
_$CheckPhoneFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final CheckPhoneFormState _self;
|
||||
final $Res Function(CheckPhoneFormState) _then;
|
||||
|
||||
/// Create a copy of CheckPhoneFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? phoneNumber = null,Object? failureOrCheckPhoneOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(CheckPhoneFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrCheckPhoneOption: null == failureOrCheckPhoneOption ? _self.failureOrCheckPhoneOption : failureOrCheckPhoneOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, CheckPhone>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [CheckPhoneFormState].
|
||||
extension CheckPhoneFormStatePatterns on CheckPhoneFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _CheckPhoneFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _CheckPhoneFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _CheckPhoneFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _CheckPhoneFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _CheckPhoneFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _CheckPhoneFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String phoneNumber, Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption, bool isSubmitting, bool showErrorMessages)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _CheckPhoneFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.failureOrCheckPhoneOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String phoneNumber, Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption, bool isSubmitting, bool showErrorMessages) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _CheckPhoneFormState():
|
||||
return $default(_that.phoneNumber,_that.failureOrCheckPhoneOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String phoneNumber, Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption, bool isSubmitting, bool showErrorMessages)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _CheckPhoneFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.failureOrCheckPhoneOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _CheckPhoneFormState implements CheckPhoneFormState {
|
||||
const _CheckPhoneFormState({required this.phoneNumber, required this.failureOrCheckPhoneOption, this.isSubmitting = false, this.showErrorMessages = false});
|
||||
|
||||
|
||||
@override final String phoneNumber;
|
||||
@override final Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override@JsonKey() final bool showErrorMessages;
|
||||
|
||||
/// Create a copy of CheckPhoneFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$CheckPhoneFormStateCopyWith<_CheckPhoneFormState> get copyWith => __$CheckPhoneFormStateCopyWithImpl<_CheckPhoneFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _CheckPhoneFormState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.failureOrCheckPhoneOption, failureOrCheckPhoneOption) || other.failureOrCheckPhoneOption == failureOrCheckPhoneOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.showErrorMessages, showErrorMessages) || other.showErrorMessages == showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber,failureOrCheckPhoneOption,isSubmitting,showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'CheckPhoneFormState(phoneNumber: $phoneNumber, failureOrCheckPhoneOption: $failureOrCheckPhoneOption, isSubmitting: $isSubmitting, showErrorMessages: $showErrorMessages)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$CheckPhoneFormStateCopyWith<$Res> implements $CheckPhoneFormStateCopyWith<$Res> {
|
||||
factory _$CheckPhoneFormStateCopyWith(_CheckPhoneFormState value, $Res Function(_CheckPhoneFormState) _then) = __$CheckPhoneFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String phoneNumber, Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$CheckPhoneFormStateCopyWithImpl<$Res>
|
||||
implements _$CheckPhoneFormStateCopyWith<$Res> {
|
||||
__$CheckPhoneFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _CheckPhoneFormState _self;
|
||||
final $Res Function(_CheckPhoneFormState) _then;
|
||||
|
||||
/// Create a copy of CheckPhoneFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,Object? failureOrCheckPhoneOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(_CheckPhoneFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrCheckPhoneOption: null == failureOrCheckPhoneOption ? _self.failureOrCheckPhoneOption : failureOrCheckPhoneOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, CheckPhone>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,8 @@
|
||||
part of 'check_phone_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class CheckPhoneFormEvent with _$CheckPhoneFormEvent {
|
||||
const factory CheckPhoneFormEvent.phoneNumberChanged(String phoneNumber) =
|
||||
_PhoneNumberChanged;
|
||||
const factory CheckPhoneFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
part of 'check_phone_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class CheckPhoneFormState with _$CheckPhoneFormState {
|
||||
const factory CheckPhoneFormState({
|
||||
required String phoneNumber,
|
||||
required Option<Either<AuthFailure, CheckPhone>> failureOrCheckPhoneOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
@Default(false) bool showErrorMessages,
|
||||
}) = _CheckPhoneFormState;
|
||||
|
||||
factory CheckPhoneFormState.initial() =>
|
||||
CheckPhoneFormState(phoneNumber: '', failureOrCheckPhoneOption: none());
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/auth/auth.dart';
|
||||
|
||||
part 'login_form_event.dart';
|
||||
part 'login_form_state.dart';
|
||||
part 'login_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class LoginFormBloc extends Bloc<LoginFormEvent, LoginFormState> {
|
||||
final IAuthRepository _authRepository;
|
||||
LoginFormBloc(this._authRepository) : super(LoginFormState.initial()) {
|
||||
on<LoginFormEvent>(_onLoginFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onLoginFormEvent(
|
||||
LoginFormEvent event,
|
||||
Emitter<LoginFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
phoneNumberChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
phoneNumber: e.phoneNumber,
|
||||
failureOrLoginOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
passwordChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(password: e.password, failureOrLoginOption: none()),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
Either<AuthFailure, Login>? failureOrLogin;
|
||||
emit(state.copyWith(isSubmitting: true, failureOrLoginOption: none()));
|
||||
|
||||
final phoneNumberValid = state.phoneNumber.isNotEmpty;
|
||||
final passwordValid = state.password.isNotEmpty;
|
||||
|
||||
log(
|
||||
'phoneNumberValid: $phoneNumberValid, passwordValid: $passwordValid, phoneNumber: ${state.phoneNumber}, password: ${state.password}',
|
||||
);
|
||||
|
||||
if (phoneNumberValid && passwordValid) {
|
||||
failureOrLogin = await _authRepository.login(
|
||||
phoneNumber: state.phoneNumber,
|
||||
password: state.password,
|
||||
);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrLoginOption: optionOf(failureOrLogin),
|
||||
),
|
||||
);
|
||||
}
|
||||
emit(state.copyWith(showErrorMessages: true, isSubmitting: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,631 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'login_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$LoginFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is LoginFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LoginFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $LoginFormEventCopyWith<$Res> {
|
||||
$LoginFormEventCopyWith(LoginFormEvent _, $Res Function(LoginFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [LoginFormEvent].
|
||||
extension LoginFormEventPatterns on LoginFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult Function( _PasswordChanged value)? passwordChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _PhoneNumberChanged value) phoneNumberChanged,required TResult Function( _PasswordChanged value) passwordChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that);case _PasswordChanged():
|
||||
return passwordChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult? Function( _PasswordChanged value)? passwordChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String phoneNumber)? phoneNumberChanged,TResult Function( String password)? passwordChanged,TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that.password);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String phoneNumber) phoneNumberChanged,required TResult Function( String password) passwordChanged,required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that.phoneNumber);case _PasswordChanged():
|
||||
return passwordChanged(_that.password);case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String phoneNumber)? phoneNumberChanged,TResult? Function( String password)? passwordChanged,TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that.password);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PhoneNumberChanged implements LoginFormEvent {
|
||||
const _PhoneNumberChanged(this.phoneNumber);
|
||||
|
||||
|
||||
final String phoneNumber;
|
||||
|
||||
/// Create a copy of LoginFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PhoneNumberChangedCopyWith<_PhoneNumberChanged> get copyWith => __$PhoneNumberChangedCopyWithImpl<_PhoneNumberChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PhoneNumberChanged&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LoginFormEvent.phoneNumberChanged(phoneNumber: $phoneNumber)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PhoneNumberChangedCopyWith<$Res> implements $LoginFormEventCopyWith<$Res> {
|
||||
factory _$PhoneNumberChangedCopyWith(_PhoneNumberChanged value, $Res Function(_PhoneNumberChanged) _then) = __$PhoneNumberChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PhoneNumberChangedCopyWithImpl<$Res>
|
||||
implements _$PhoneNumberChangedCopyWith<$Res> {
|
||||
__$PhoneNumberChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PhoneNumberChanged _self;
|
||||
final $Res Function(_PhoneNumberChanged) _then;
|
||||
|
||||
/// Create a copy of LoginFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,}) {
|
||||
return _then(_PhoneNumberChanged(
|
||||
null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PasswordChanged implements LoginFormEvent {
|
||||
const _PasswordChanged(this.password);
|
||||
|
||||
|
||||
final String password;
|
||||
|
||||
/// Create a copy of LoginFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PasswordChangedCopyWith<_PasswordChanged> get copyWith => __$PasswordChangedCopyWithImpl<_PasswordChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PasswordChanged&&(identical(other.password, password) || other.password == password));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,password);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LoginFormEvent.passwordChanged(password: $password)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PasswordChangedCopyWith<$Res> implements $LoginFormEventCopyWith<$Res> {
|
||||
factory _$PasswordChangedCopyWith(_PasswordChanged value, $Res Function(_PasswordChanged) _then) = __$PasswordChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String password
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PasswordChangedCopyWithImpl<$Res>
|
||||
implements _$PasswordChangedCopyWith<$Res> {
|
||||
__$PasswordChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PasswordChanged _self;
|
||||
final $Res Function(_PasswordChanged) _then;
|
||||
|
||||
/// Create a copy of LoginFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? password = null,}) {
|
||||
return _then(_PasswordChanged(
|
||||
null == password ? _self.password : password // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements LoginFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LoginFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$LoginFormState {
|
||||
|
||||
String get phoneNumber; String get password; Option<Either<AuthFailure, Login>> get failureOrLoginOption; bool get isSubmitting; bool get showErrorMessages;
|
||||
/// Create a copy of LoginFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$LoginFormStateCopyWith<LoginFormState> get copyWith => _$LoginFormStateCopyWithImpl<LoginFormState>(this as LoginFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as LoginFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is LoginFormState&&(identical(other.phoneNumber, _this.phoneNumber) || other.phoneNumber == _this.phoneNumber)&&(identical(other.password, _this.password) || other.password == _this.password)&&(identical(other.failureOrLoginOption, _this.failureOrLoginOption) || other.failureOrLoginOption == _this.failureOrLoginOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.showErrorMessages, _this.showErrorMessages) || other.showErrorMessages == _this.showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as LoginFormState;
|
||||
return Object.hash(runtimeType,_this.phoneNumber,_this.password,_this.failureOrLoginOption,_this.isSubmitting,_this.showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as LoginFormState;
|
||||
return 'LoginFormState(phoneNumber: ${_this.phoneNumber}, password: ${_this.password}, failureOrLoginOption: ${_this.failureOrLoginOption}, isSubmitting: ${_this.isSubmitting}, showErrorMessages: ${_this.showErrorMessages})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $LoginFormStateCopyWith<$Res> {
|
||||
factory $LoginFormStateCopyWith(LoginFormState value, $Res Function(LoginFormState) _then) = _$LoginFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber, String password, Option<Either<AuthFailure, Login>> failureOrLoginOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$LoginFormStateCopyWithImpl<$Res>
|
||||
implements $LoginFormStateCopyWith<$Res> {
|
||||
_$LoginFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final LoginFormState _self;
|
||||
final $Res Function(LoginFormState) _then;
|
||||
|
||||
/// Create a copy of LoginFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? phoneNumber = null,Object? password = null,Object? failureOrLoginOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(LoginFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,password: null == password ? _self.password : password // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrLoginOption: null == failureOrLoginOption ? _self.failureOrLoginOption : failureOrLoginOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Login>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [LoginFormState].
|
||||
extension LoginFormStatePatterns on LoginFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _LoginFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _LoginFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _LoginFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _LoginFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _LoginFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _LoginFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String phoneNumber, String password, Option<Either<AuthFailure, Login>> failureOrLoginOption, bool isSubmitting, bool showErrorMessages)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _LoginFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.password,_that.failureOrLoginOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String phoneNumber, String password, Option<Either<AuthFailure, Login>> failureOrLoginOption, bool isSubmitting, bool showErrorMessages) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _LoginFormState():
|
||||
return $default(_that.phoneNumber,_that.password,_that.failureOrLoginOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String phoneNumber, String password, Option<Either<AuthFailure, Login>> failureOrLoginOption, bool isSubmitting, bool showErrorMessages)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _LoginFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.password,_that.failureOrLoginOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _LoginFormState implements LoginFormState {
|
||||
const _LoginFormState({required this.phoneNumber, required this.password, required this.failureOrLoginOption, this.isSubmitting = false, this.showErrorMessages = false});
|
||||
|
||||
|
||||
@override final String phoneNumber;
|
||||
@override final String password;
|
||||
@override final Option<Either<AuthFailure, Login>> failureOrLoginOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override@JsonKey() final bool showErrorMessages;
|
||||
|
||||
/// Create a copy of LoginFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$LoginFormStateCopyWith<_LoginFormState> get copyWith => __$LoginFormStateCopyWithImpl<_LoginFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _LoginFormState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.password, password) || other.password == password)&&(identical(other.failureOrLoginOption, failureOrLoginOption) || other.failureOrLoginOption == failureOrLoginOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.showErrorMessages, showErrorMessages) || other.showErrorMessages == showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber,password,failureOrLoginOption,isSubmitting,showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LoginFormState(phoneNumber: $phoneNumber, password: $password, failureOrLoginOption: $failureOrLoginOption, isSubmitting: $isSubmitting, showErrorMessages: $showErrorMessages)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$LoginFormStateCopyWith<$Res> implements $LoginFormStateCopyWith<$Res> {
|
||||
factory _$LoginFormStateCopyWith(_LoginFormState value, $Res Function(_LoginFormState) _then) = __$LoginFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String phoneNumber, String password, Option<Either<AuthFailure, Login>> failureOrLoginOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$LoginFormStateCopyWithImpl<$Res>
|
||||
implements _$LoginFormStateCopyWith<$Res> {
|
||||
__$LoginFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _LoginFormState _self;
|
||||
final $Res Function(_LoginFormState) _then;
|
||||
|
||||
/// Create a copy of LoginFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,Object? password = null,Object? failureOrLoginOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(_LoginFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,password: null == password ? _self.password : password // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrLoginOption: null == failureOrLoginOption ? _self.failureOrLoginOption : failureOrLoginOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Login>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,10 @@
|
||||
part of 'login_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class LoginFormEvent with _$LoginFormEvent {
|
||||
const factory LoginFormEvent.phoneNumberChanged(String phoneNumber) =
|
||||
_PhoneNumberChanged;
|
||||
const factory LoginFormEvent.passwordChanged(String password) =
|
||||
_PasswordChanged;
|
||||
const factory LoginFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
part of 'login_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class LoginFormState with _$LoginFormState {
|
||||
const factory LoginFormState({
|
||||
required String phoneNumber,
|
||||
required String password,
|
||||
required Option<Either<AuthFailure, Login>> failureOrLoginOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
@Default(false) bool showErrorMessages,
|
||||
}) = _LoginFormState;
|
||||
|
||||
factory LoginFormState.initial() => LoginFormState(
|
||||
phoneNumber: '',
|
||||
password: '',
|
||||
failureOrLoginOption: none(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/auth/auth.dart';
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'logout_form_event.dart';
|
||||
part 'logout_form_state.dart';
|
||||
part 'logout_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class LogoutFormBloc extends Bloc<LogoutFormEvent, LogoutFormState> {
|
||||
final IAuthRepository _repository;
|
||||
final IDeviceRepository _deviceRepository;
|
||||
|
||||
LogoutFormBloc(this._repository, this._deviceRepository)
|
||||
: super(LogoutFormState.initial()) {
|
||||
on<LogoutFormEvent>(_onLogoutFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onLogoutFormEvent(
|
||||
LogoutFormEvent event,
|
||||
Emitter<LogoutFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
submitted: (e) async {
|
||||
emit(state.copyWith(isSubmitting: true, failureOrAuthOption: none()));
|
||||
// Hapus registrasi push sebelum token login dihapus. Kegagalannya
|
||||
// tidak menghalangi logout.
|
||||
await _deviceRepository.unregister();
|
||||
final failureOrAuth = await _repository.logout();
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrAuthOption: optionOf(failureOrAuth),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,474 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'logout_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$LogoutFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is LogoutFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LogoutFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $LogoutFormEventCopyWith<$Res> {
|
||||
$LogoutFormEventCopyWith(LogoutFormEvent _, $Res Function(LogoutFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [LogoutFormEvent].
|
||||
extension LogoutFormEventPatterns on LogoutFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements LogoutFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LogoutFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$LogoutFormState {
|
||||
|
||||
Option<Either<AuthFailure, Unit>> get failureOrAuthOption; bool get isSubmitting;
|
||||
/// Create a copy of LogoutFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$LogoutFormStateCopyWith<LogoutFormState> get copyWith => _$LogoutFormStateCopyWithImpl<LogoutFormState>(this as LogoutFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as LogoutFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is LogoutFormState&&(identical(other.failureOrAuthOption, _this.failureOrAuthOption) || other.failureOrAuthOption == _this.failureOrAuthOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as LogoutFormState;
|
||||
return Object.hash(runtimeType,_this.failureOrAuthOption,_this.isSubmitting);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as LogoutFormState;
|
||||
return 'LogoutFormState(failureOrAuthOption: ${_this.failureOrAuthOption}, isSubmitting: ${_this.isSubmitting})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $LogoutFormStateCopyWith<$Res> {
|
||||
factory $LogoutFormStateCopyWith(LogoutFormState value, $Res Function(LogoutFormState) _then) = _$LogoutFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
Option<Either<AuthFailure, Unit>> failureOrAuthOption, bool isSubmitting
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$LogoutFormStateCopyWithImpl<$Res>
|
||||
implements $LogoutFormStateCopyWith<$Res> {
|
||||
_$LogoutFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final LogoutFormState _self;
|
||||
final $Res Function(LogoutFormState) _then;
|
||||
|
||||
/// Create a copy of LogoutFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? failureOrAuthOption = null,Object? isSubmitting = null,}) {
|
||||
return _then(LogoutFormState(
|
||||
failureOrAuthOption: null == failureOrAuthOption ? _self.failureOrAuthOption : failureOrAuthOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Unit>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [LogoutFormState].
|
||||
extension LogoutFormStatePatterns on LogoutFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _LogoutFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _LogoutFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _LogoutFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _LogoutFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _LogoutFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _LogoutFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( Option<Either<AuthFailure, Unit>> failureOrAuthOption, bool isSubmitting)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _LogoutFormState() when $default != null:
|
||||
return $default(_that.failureOrAuthOption,_that.isSubmitting);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( Option<Either<AuthFailure, Unit>> failureOrAuthOption, bool isSubmitting) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _LogoutFormState():
|
||||
return $default(_that.failureOrAuthOption,_that.isSubmitting);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( Option<Either<AuthFailure, Unit>> failureOrAuthOption, bool isSubmitting)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _LogoutFormState() when $default != null:
|
||||
return $default(_that.failureOrAuthOption,_that.isSubmitting);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _LogoutFormState implements LogoutFormState {
|
||||
const _LogoutFormState({required this.failureOrAuthOption, this.isSubmitting = false});
|
||||
|
||||
|
||||
@override final Option<Either<AuthFailure, Unit>> failureOrAuthOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
|
||||
/// Create a copy of LogoutFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$LogoutFormStateCopyWith<_LogoutFormState> get copyWith => __$LogoutFormStateCopyWithImpl<_LogoutFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _LogoutFormState&&(identical(other.failureOrAuthOption, failureOrAuthOption) || other.failureOrAuthOption == failureOrAuthOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,failureOrAuthOption,isSubmitting);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LogoutFormState(failureOrAuthOption: $failureOrAuthOption, isSubmitting: $isSubmitting)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$LogoutFormStateCopyWith<$Res> implements $LogoutFormStateCopyWith<$Res> {
|
||||
factory _$LogoutFormStateCopyWith(_LogoutFormState value, $Res Function(_LogoutFormState) _then) = __$LogoutFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
Option<Either<AuthFailure, Unit>> failureOrAuthOption, bool isSubmitting
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$LogoutFormStateCopyWithImpl<$Res>
|
||||
implements _$LogoutFormStateCopyWith<$Res> {
|
||||
__$LogoutFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _LogoutFormState _self;
|
||||
final $Res Function(_LogoutFormState) _then;
|
||||
|
||||
/// Create a copy of LogoutFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? failureOrAuthOption = null,Object? isSubmitting = null,}) {
|
||||
return _then(_LogoutFormState(
|
||||
failureOrAuthOption: null == failureOrAuthOption ? _self.failureOrAuthOption : failureOrAuthOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Unit>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,6 @@
|
||||
part of 'logout_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class LogoutFormEvent with _$LogoutFormEvent {
|
||||
const factory LogoutFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
part of 'logout_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class LogoutFormState with _$LogoutFormState {
|
||||
const factory LogoutFormState({
|
||||
required Option<Either<AuthFailure, Unit>> failureOrAuthOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
}) = _LogoutFormState;
|
||||
|
||||
factory LogoutFormState.initial() =>
|
||||
LogoutFormState(failureOrAuthOption: none(), isSubmitting: false);
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/auth/auth.dart';
|
||||
|
||||
part 'register_form_event.dart';
|
||||
part 'register_form_state.dart';
|
||||
part 'register_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class RegisterFormBloc extends Bloc<RegisterFormEvent, RegisterFormState> {
|
||||
final IAuthRepository _repository;
|
||||
RegisterFormBloc(this._repository) : super(RegisterFormState.initial()) {
|
||||
on<RegisterFormEvent>(_onRegisterFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onRegisterFormEvent(
|
||||
RegisterFormEvent event,
|
||||
Emitter<RegisterFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
phoneNumberChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
phoneNumber: e.phoneNumber,
|
||||
failureOrRegisterOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
nameChanged: (e) async {
|
||||
emit(state.copyWith(name: e.name, failureOrRegisterOption: none()));
|
||||
},
|
||||
birthDateChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
birthDate: e.birthDate,
|
||||
failureOrRegisterOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
Either<AuthFailure, Register>? failureOrRegister;
|
||||
emit(
|
||||
state.copyWith(isSubmitting: true, failureOrRegisterOption: none()),
|
||||
);
|
||||
|
||||
final phoneNumberValid = state.phoneNumber.isNotEmpty;
|
||||
final nameValid = state.name.isNotEmpty;
|
||||
|
||||
if (phoneNumberValid && nameValid) {
|
||||
failureOrRegister = await _repository.register(
|
||||
phoneNumber: state.phoneNumber,
|
||||
name: state.name,
|
||||
birthDate: state.birthDate,
|
||||
);
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrRegisterOption: optionOf(failureOrRegister),
|
||||
),
|
||||
);
|
||||
}
|
||||
emit(state.copyWith(showErrorMessages: true, isSubmitting: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,708 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'register_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$RegisterFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is RegisterFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RegisterFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $RegisterFormEventCopyWith<$Res> {
|
||||
$RegisterFormEventCopyWith(RegisterFormEvent _, $Res Function(RegisterFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [RegisterFormEvent].
|
||||
extension RegisterFormEventPatterns on RegisterFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult Function( _NameChanged value)? nameChanged,TResult Function( _BirthDateChanged value)? birthDateChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _NameChanged() when nameChanged != null:
|
||||
return nameChanged(_that);case _BirthDateChanged() when birthDateChanged != null:
|
||||
return birthDateChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _PhoneNumberChanged value) phoneNumberChanged,required TResult Function( _NameChanged value) nameChanged,required TResult Function( _BirthDateChanged value) birthDateChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that);case _NameChanged():
|
||||
return nameChanged(_that);case _BirthDateChanged():
|
||||
return birthDateChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult? Function( _NameChanged value)? nameChanged,TResult? Function( _BirthDateChanged value)? birthDateChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _NameChanged() when nameChanged != null:
|
||||
return nameChanged(_that);case _BirthDateChanged() when birthDateChanged != null:
|
||||
return birthDateChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String phoneNumber)? phoneNumberChanged,TResult Function( String name)? nameChanged,TResult Function( DateTime birthDate)? birthDateChanged,TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _NameChanged() when nameChanged != null:
|
||||
return nameChanged(_that.name);case _BirthDateChanged() when birthDateChanged != null:
|
||||
return birthDateChanged(_that.birthDate);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String phoneNumber) phoneNumberChanged,required TResult Function( String name) nameChanged,required TResult Function( DateTime birthDate) birthDateChanged,required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that.phoneNumber);case _NameChanged():
|
||||
return nameChanged(_that.name);case _BirthDateChanged():
|
||||
return birthDateChanged(_that.birthDate);case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String phoneNumber)? phoneNumberChanged,TResult? Function( String name)? nameChanged,TResult? Function( DateTime birthDate)? birthDateChanged,TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _NameChanged() when nameChanged != null:
|
||||
return nameChanged(_that.name);case _BirthDateChanged() when birthDateChanged != null:
|
||||
return birthDateChanged(_that.birthDate);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PhoneNumberChanged implements RegisterFormEvent {
|
||||
const _PhoneNumberChanged(this.phoneNumber);
|
||||
|
||||
|
||||
final String phoneNumber;
|
||||
|
||||
/// Create a copy of RegisterFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PhoneNumberChangedCopyWith<_PhoneNumberChanged> get copyWith => __$PhoneNumberChangedCopyWithImpl<_PhoneNumberChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PhoneNumberChanged&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RegisterFormEvent.phoneNumberChanged(phoneNumber: $phoneNumber)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PhoneNumberChangedCopyWith<$Res> implements $RegisterFormEventCopyWith<$Res> {
|
||||
factory _$PhoneNumberChangedCopyWith(_PhoneNumberChanged value, $Res Function(_PhoneNumberChanged) _then) = __$PhoneNumberChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PhoneNumberChangedCopyWithImpl<$Res>
|
||||
implements _$PhoneNumberChangedCopyWith<$Res> {
|
||||
__$PhoneNumberChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PhoneNumberChanged _self;
|
||||
final $Res Function(_PhoneNumberChanged) _then;
|
||||
|
||||
/// Create a copy of RegisterFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,}) {
|
||||
return _then(_PhoneNumberChanged(
|
||||
null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _NameChanged implements RegisterFormEvent {
|
||||
const _NameChanged(this.name);
|
||||
|
||||
|
||||
final String name;
|
||||
|
||||
/// Create a copy of RegisterFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$NameChangedCopyWith<_NameChanged> get copyWith => __$NameChangedCopyWithImpl<_NameChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _NameChanged&&(identical(other.name, name) || other.name == name));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,name);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RegisterFormEvent.nameChanged(name: $name)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$NameChangedCopyWith<$Res> implements $RegisterFormEventCopyWith<$Res> {
|
||||
factory _$NameChangedCopyWith(_NameChanged value, $Res Function(_NameChanged) _then) = __$NameChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String name
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$NameChangedCopyWithImpl<$Res>
|
||||
implements _$NameChangedCopyWith<$Res> {
|
||||
__$NameChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _NameChanged _self;
|
||||
final $Res Function(_NameChanged) _then;
|
||||
|
||||
/// Create a copy of RegisterFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? name = null,}) {
|
||||
return _then(_NameChanged(
|
||||
null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _BirthDateChanged implements RegisterFormEvent {
|
||||
const _BirthDateChanged(this.birthDate);
|
||||
|
||||
|
||||
final DateTime birthDate;
|
||||
|
||||
/// Create a copy of RegisterFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$BirthDateChangedCopyWith<_BirthDateChanged> get copyWith => __$BirthDateChangedCopyWithImpl<_BirthDateChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _BirthDateChanged&&(identical(other.birthDate, birthDate) || other.birthDate == birthDate));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,birthDate);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RegisterFormEvent.birthDateChanged(birthDate: $birthDate)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$BirthDateChangedCopyWith<$Res> implements $RegisterFormEventCopyWith<$Res> {
|
||||
factory _$BirthDateChangedCopyWith(_BirthDateChanged value, $Res Function(_BirthDateChanged) _then) = __$BirthDateChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
DateTime birthDate
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$BirthDateChangedCopyWithImpl<$Res>
|
||||
implements _$BirthDateChangedCopyWith<$Res> {
|
||||
__$BirthDateChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _BirthDateChanged _self;
|
||||
final $Res Function(_BirthDateChanged) _then;
|
||||
|
||||
/// Create a copy of RegisterFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? birthDate = null,}) {
|
||||
return _then(_BirthDateChanged(
|
||||
null == birthDate ? _self.birthDate : birthDate // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements RegisterFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RegisterFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$RegisterFormState {
|
||||
|
||||
String get phoneNumber; String get name; DateTime get birthDate; Option<Either<AuthFailure, Register>> get failureOrRegisterOption; bool get isSubmitting; bool get showErrorMessages;
|
||||
/// Create a copy of RegisterFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$RegisterFormStateCopyWith<RegisterFormState> get copyWith => _$RegisterFormStateCopyWithImpl<RegisterFormState>(this as RegisterFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as RegisterFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is RegisterFormState&&(identical(other.phoneNumber, _this.phoneNumber) || other.phoneNumber == _this.phoneNumber)&&(identical(other.name, _this.name) || other.name == _this.name)&&(identical(other.birthDate, _this.birthDate) || other.birthDate == _this.birthDate)&&(identical(other.failureOrRegisterOption, _this.failureOrRegisterOption) || other.failureOrRegisterOption == _this.failureOrRegisterOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.showErrorMessages, _this.showErrorMessages) || other.showErrorMessages == _this.showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as RegisterFormState;
|
||||
return Object.hash(runtimeType,_this.phoneNumber,_this.name,_this.birthDate,_this.failureOrRegisterOption,_this.isSubmitting,_this.showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as RegisterFormState;
|
||||
return 'RegisterFormState(phoneNumber: ${_this.phoneNumber}, name: ${_this.name}, birthDate: ${_this.birthDate}, failureOrRegisterOption: ${_this.failureOrRegisterOption}, isSubmitting: ${_this.isSubmitting}, showErrorMessages: ${_this.showErrorMessages})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $RegisterFormStateCopyWith<$Res> {
|
||||
factory $RegisterFormStateCopyWith(RegisterFormState value, $Res Function(RegisterFormState) _then) = _$RegisterFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber, String name, DateTime birthDate, Option<Either<AuthFailure, Register>> failureOrRegisterOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$RegisterFormStateCopyWithImpl<$Res>
|
||||
implements $RegisterFormStateCopyWith<$Res> {
|
||||
_$RegisterFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final RegisterFormState _self;
|
||||
final $Res Function(RegisterFormState) _then;
|
||||
|
||||
/// Create a copy of RegisterFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? phoneNumber = null,Object? name = null,Object? birthDate = null,Object? failureOrRegisterOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(RegisterFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
||||
as String,birthDate: null == birthDate ? _self.birthDate : birthDate // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,failureOrRegisterOption: null == failureOrRegisterOption ? _self.failureOrRegisterOption : failureOrRegisterOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Register>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [RegisterFormState].
|
||||
extension RegisterFormStatePatterns on RegisterFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _RegisterFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegisterFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _RegisterFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegisterFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _RegisterFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegisterFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String phoneNumber, String name, DateTime birthDate, Option<Either<AuthFailure, Register>> failureOrRegisterOption, bool isSubmitting, bool showErrorMessages)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegisterFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.name,_that.birthDate,_that.failureOrRegisterOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String phoneNumber, String name, DateTime birthDate, Option<Either<AuthFailure, Register>> failureOrRegisterOption, bool isSubmitting, bool showErrorMessages) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegisterFormState():
|
||||
return $default(_that.phoneNumber,_that.name,_that.birthDate,_that.failureOrRegisterOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String phoneNumber, String name, DateTime birthDate, Option<Either<AuthFailure, Register>> failureOrRegisterOption, bool isSubmitting, bool showErrorMessages)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegisterFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.name,_that.birthDate,_that.failureOrRegisterOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _RegisterFormState implements RegisterFormState {
|
||||
const _RegisterFormState({required this.phoneNumber, required this.name, required this.birthDate, required this.failureOrRegisterOption, this.isSubmitting = false, this.showErrorMessages = false});
|
||||
|
||||
|
||||
@override final String phoneNumber;
|
||||
@override final String name;
|
||||
@override final DateTime birthDate;
|
||||
@override final Option<Either<AuthFailure, Register>> failureOrRegisterOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override@JsonKey() final bool showErrorMessages;
|
||||
|
||||
/// Create a copy of RegisterFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$RegisterFormStateCopyWith<_RegisterFormState> get copyWith => __$RegisterFormStateCopyWithImpl<_RegisterFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _RegisterFormState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.name, name) || other.name == name)&&(identical(other.birthDate, birthDate) || other.birthDate == birthDate)&&(identical(other.failureOrRegisterOption, failureOrRegisterOption) || other.failureOrRegisterOption == failureOrRegisterOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.showErrorMessages, showErrorMessages) || other.showErrorMessages == showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber,name,birthDate,failureOrRegisterOption,isSubmitting,showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RegisterFormState(phoneNumber: $phoneNumber, name: $name, birthDate: $birthDate, failureOrRegisterOption: $failureOrRegisterOption, isSubmitting: $isSubmitting, showErrorMessages: $showErrorMessages)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$RegisterFormStateCopyWith<$Res> implements $RegisterFormStateCopyWith<$Res> {
|
||||
factory _$RegisterFormStateCopyWith(_RegisterFormState value, $Res Function(_RegisterFormState) _then) = __$RegisterFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String phoneNumber, String name, DateTime birthDate, Option<Either<AuthFailure, Register>> failureOrRegisterOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$RegisterFormStateCopyWithImpl<$Res>
|
||||
implements _$RegisterFormStateCopyWith<$Res> {
|
||||
__$RegisterFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _RegisterFormState _self;
|
||||
final $Res Function(_RegisterFormState) _then;
|
||||
|
||||
/// Create a copy of RegisterFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,Object? name = null,Object? birthDate = null,Object? failureOrRegisterOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(_RegisterFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
||||
as String,birthDate: null == birthDate ? _self.birthDate : birthDate // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,failureOrRegisterOption: null == failureOrRegisterOption ? _self.failureOrRegisterOption : failureOrRegisterOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Register>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,11 @@
|
||||
part of 'register_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class RegisterFormEvent with _$RegisterFormEvent {
|
||||
const factory RegisterFormEvent.phoneNumberChanged(String phoneNumber) =
|
||||
_PhoneNumberChanged;
|
||||
const factory RegisterFormEvent.nameChanged(String name) = _NameChanged;
|
||||
const factory RegisterFormEvent.birthDateChanged(DateTime birthDate) =
|
||||
_BirthDateChanged;
|
||||
const factory RegisterFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
part of 'register_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class RegisterFormState with _$RegisterFormState {
|
||||
const factory RegisterFormState({
|
||||
required String phoneNumber,
|
||||
required String name,
|
||||
required DateTime birthDate,
|
||||
required Option<Either<AuthFailure, Register>> failureOrRegisterOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
@Default(false) bool showErrorMessages,
|
||||
}) = _RegisterFormState;
|
||||
|
||||
factory RegisterFormState.initial() => RegisterFormState(
|
||||
phoneNumber: '',
|
||||
failureOrRegisterOption: none(),
|
||||
name: '',
|
||||
birthDate: DateTime.now(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/auth/auth.dart';
|
||||
|
||||
part 'resend_form_event.dart';
|
||||
part 'resend_form_state.dart';
|
||||
part 'resend_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class ResendFormBloc extends Bloc<ResendFormEvent, ResendFormState> {
|
||||
final IAuthRepository _repository;
|
||||
ResendFormBloc(this._repository) : super(ResendFormState.initial()) {
|
||||
on<ResendFormEvent>(_onResendFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onResendFormEvent(
|
||||
ResendFormEvent event,
|
||||
Emitter<ResendFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
phoneNumberChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
phoneNumber: e.phoneNumber,
|
||||
failureOrResendOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
purposeChanged: (e) async {
|
||||
emit(state.copyWith(purpose: e.purpose, failureOrResendOption: none()));
|
||||
},
|
||||
submitted: (e) async {
|
||||
Either<AuthFailure, Resend>? failureOrResend;
|
||||
emit(state.copyWith(isSubmitting: true, failureOrResendOption: none()));
|
||||
|
||||
final phoneNumberValid = state.phoneNumber.isNotEmpty;
|
||||
final purposeValid = state.purpose.isNotEmpty;
|
||||
|
||||
if (phoneNumberValid && purposeValid) {
|
||||
failureOrResend = await _repository.resend(
|
||||
phoneNumber: state.phoneNumber,
|
||||
purpose: state.purpose,
|
||||
);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrResendOption: optionOf(failureOrResend),
|
||||
),
|
||||
);
|
||||
}
|
||||
emit(state.copyWith(showErrorMessages: true, isSubmitting: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,631 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'resend_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$ResendFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is ResendFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ResendFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $ResendFormEventCopyWith<$Res> {
|
||||
$ResendFormEventCopyWith(ResendFormEvent _, $Res Function(ResendFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [ResendFormEvent].
|
||||
extension ResendFormEventPatterns on ResendFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult Function( _PurposeChanged value)? purposeChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _PurposeChanged() when purposeChanged != null:
|
||||
return purposeChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _PhoneNumberChanged value) phoneNumberChanged,required TResult Function( _PurposeChanged value) purposeChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that);case _PurposeChanged():
|
||||
return purposeChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _PhoneNumberChanged value)? phoneNumberChanged,TResult? Function( _PurposeChanged value)? purposeChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that);case _PurposeChanged() when purposeChanged != null:
|
||||
return purposeChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String phoneNumber)? phoneNumberChanged,TResult Function( String purpose)? purposeChanged,TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _PurposeChanged() when purposeChanged != null:
|
||||
return purposeChanged(_that.purpose);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String phoneNumber) phoneNumberChanged,required TResult Function( String purpose) purposeChanged,required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged():
|
||||
return phoneNumberChanged(_that.phoneNumber);case _PurposeChanged():
|
||||
return purposeChanged(_that.purpose);case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String phoneNumber)? phoneNumberChanged,TResult? Function( String purpose)? purposeChanged,TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PhoneNumberChanged() when phoneNumberChanged != null:
|
||||
return phoneNumberChanged(_that.phoneNumber);case _PurposeChanged() when purposeChanged != null:
|
||||
return purposeChanged(_that.purpose);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PhoneNumberChanged implements ResendFormEvent {
|
||||
const _PhoneNumberChanged(this.phoneNumber);
|
||||
|
||||
|
||||
final String phoneNumber;
|
||||
|
||||
/// Create a copy of ResendFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PhoneNumberChangedCopyWith<_PhoneNumberChanged> get copyWith => __$PhoneNumberChangedCopyWithImpl<_PhoneNumberChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PhoneNumberChanged&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ResendFormEvent.phoneNumberChanged(phoneNumber: $phoneNumber)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PhoneNumberChangedCopyWith<$Res> implements $ResendFormEventCopyWith<$Res> {
|
||||
factory _$PhoneNumberChangedCopyWith(_PhoneNumberChanged value, $Res Function(_PhoneNumberChanged) _then) = __$PhoneNumberChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PhoneNumberChangedCopyWithImpl<$Res>
|
||||
implements _$PhoneNumberChangedCopyWith<$Res> {
|
||||
__$PhoneNumberChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PhoneNumberChanged _self;
|
||||
final $Res Function(_PhoneNumberChanged) _then;
|
||||
|
||||
/// Create a copy of ResendFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,}) {
|
||||
return _then(_PhoneNumberChanged(
|
||||
null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PurposeChanged implements ResendFormEvent {
|
||||
const _PurposeChanged(this.purpose);
|
||||
|
||||
|
||||
final String purpose;
|
||||
|
||||
/// Create a copy of ResendFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PurposeChangedCopyWith<_PurposeChanged> get copyWith => __$PurposeChangedCopyWithImpl<_PurposeChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PurposeChanged&&(identical(other.purpose, purpose) || other.purpose == purpose));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,purpose);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ResendFormEvent.purposeChanged(purpose: $purpose)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PurposeChangedCopyWith<$Res> implements $ResendFormEventCopyWith<$Res> {
|
||||
factory _$PurposeChangedCopyWith(_PurposeChanged value, $Res Function(_PurposeChanged) _then) = __$PurposeChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String purpose
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PurposeChangedCopyWithImpl<$Res>
|
||||
implements _$PurposeChangedCopyWith<$Res> {
|
||||
__$PurposeChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PurposeChanged _self;
|
||||
final $Res Function(_PurposeChanged) _then;
|
||||
|
||||
/// Create a copy of ResendFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? purpose = null,}) {
|
||||
return _then(_PurposeChanged(
|
||||
null == purpose ? _self.purpose : purpose // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements ResendFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ResendFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ResendFormState {
|
||||
|
||||
String get phoneNumber; String get purpose; Option<Either<AuthFailure, Resend>> get failureOrResendOption; bool get isSubmitting; bool get showErrorMessages;
|
||||
/// Create a copy of ResendFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$ResendFormStateCopyWith<ResendFormState> get copyWith => _$ResendFormStateCopyWithImpl<ResendFormState>(this as ResendFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as ResendFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is ResendFormState&&(identical(other.phoneNumber, _this.phoneNumber) || other.phoneNumber == _this.phoneNumber)&&(identical(other.purpose, _this.purpose) || other.purpose == _this.purpose)&&(identical(other.failureOrResendOption, _this.failureOrResendOption) || other.failureOrResendOption == _this.failureOrResendOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.showErrorMessages, _this.showErrorMessages) || other.showErrorMessages == _this.showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as ResendFormState;
|
||||
return Object.hash(runtimeType,_this.phoneNumber,_this.purpose,_this.failureOrResendOption,_this.isSubmitting,_this.showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as ResendFormState;
|
||||
return 'ResendFormState(phoneNumber: ${_this.phoneNumber}, purpose: ${_this.purpose}, failureOrResendOption: ${_this.failureOrResendOption}, isSubmitting: ${_this.isSubmitting}, showErrorMessages: ${_this.showErrorMessages})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $ResendFormStateCopyWith<$Res> {
|
||||
factory $ResendFormStateCopyWith(ResendFormState value, $Res Function(ResendFormState) _then) = _$ResendFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String phoneNumber, String purpose, Option<Either<AuthFailure, Resend>> failureOrResendOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$ResendFormStateCopyWithImpl<$Res>
|
||||
implements $ResendFormStateCopyWith<$Res> {
|
||||
_$ResendFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final ResendFormState _self;
|
||||
final $Res Function(ResendFormState) _then;
|
||||
|
||||
/// Create a copy of ResendFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? phoneNumber = null,Object? purpose = null,Object? failureOrResendOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(ResendFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,purpose: null == purpose ? _self.purpose : purpose // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrResendOption: null == failureOrResendOption ? _self.failureOrResendOption : failureOrResendOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Resend>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [ResendFormState].
|
||||
extension ResendFormStatePatterns on ResendFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _ResendFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _ResendFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _ResendFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _ResendFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _ResendFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _ResendFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String phoneNumber, String purpose, Option<Either<AuthFailure, Resend>> failureOrResendOption, bool isSubmitting, bool showErrorMessages)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _ResendFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.purpose,_that.failureOrResendOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String phoneNumber, String purpose, Option<Either<AuthFailure, Resend>> failureOrResendOption, bool isSubmitting, bool showErrorMessages) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _ResendFormState():
|
||||
return $default(_that.phoneNumber,_that.purpose,_that.failureOrResendOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String phoneNumber, String purpose, Option<Either<AuthFailure, Resend>> failureOrResendOption, bool isSubmitting, bool showErrorMessages)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _ResendFormState() when $default != null:
|
||||
return $default(_that.phoneNumber,_that.purpose,_that.failureOrResendOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _ResendFormState implements ResendFormState {
|
||||
const _ResendFormState({required this.phoneNumber, required this.purpose, required this.failureOrResendOption, this.isSubmitting = false, this.showErrorMessages = false});
|
||||
|
||||
|
||||
@override final String phoneNumber;
|
||||
@override final String purpose;
|
||||
@override final Option<Either<AuthFailure, Resend>> failureOrResendOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override@JsonKey() final bool showErrorMessages;
|
||||
|
||||
/// Create a copy of ResendFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$ResendFormStateCopyWith<_ResendFormState> get copyWith => __$ResendFormStateCopyWithImpl<_ResendFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ResendFormState&&(identical(other.phoneNumber, phoneNumber) || other.phoneNumber == phoneNumber)&&(identical(other.purpose, purpose) || other.purpose == purpose)&&(identical(other.failureOrResendOption, failureOrResendOption) || other.failureOrResendOption == failureOrResendOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.showErrorMessages, showErrorMessages) || other.showErrorMessages == showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,phoneNumber,purpose,failureOrResendOption,isSubmitting,showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ResendFormState(phoneNumber: $phoneNumber, purpose: $purpose, failureOrResendOption: $failureOrResendOption, isSubmitting: $isSubmitting, showErrorMessages: $showErrorMessages)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$ResendFormStateCopyWith<$Res> implements $ResendFormStateCopyWith<$Res> {
|
||||
factory _$ResendFormStateCopyWith(_ResendFormState value, $Res Function(_ResendFormState) _then) = __$ResendFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String phoneNumber, String purpose, Option<Either<AuthFailure, Resend>> failureOrResendOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$ResendFormStateCopyWithImpl<$Res>
|
||||
implements _$ResendFormStateCopyWith<$Res> {
|
||||
__$ResendFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _ResendFormState _self;
|
||||
final $Res Function(_ResendFormState) _then;
|
||||
|
||||
/// Create a copy of ResendFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? phoneNumber = null,Object? purpose = null,Object? failureOrResendOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(_ResendFormState(
|
||||
phoneNumber: null == phoneNumber ? _self.phoneNumber : phoneNumber // ignore: cast_nullable_to_non_nullable
|
||||
as String,purpose: null == purpose ? _self.purpose : purpose // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrResendOption: null == failureOrResendOption ? _self.failureOrResendOption : failureOrResendOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Resend>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,10 @@
|
||||
part of 'resend_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class ResendFormEvent with _$ResendFormEvent {
|
||||
const factory ResendFormEvent.phoneNumberChanged(String phoneNumber) =
|
||||
_PhoneNumberChanged;
|
||||
const factory ResendFormEvent.purposeChanged(String purpose) =
|
||||
_PurposeChanged;
|
||||
const factory ResendFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
part of 'resend_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class ResendFormState with _$ResendFormState {
|
||||
const factory ResendFormState({
|
||||
required String phoneNumber,
|
||||
required String purpose,
|
||||
required Option<Either<AuthFailure, Resend>> failureOrResendOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
@Default(false) bool showErrorMessages,
|
||||
}) = _ResendFormState;
|
||||
|
||||
factory ResendFormState.initial() => ResendFormState(
|
||||
phoneNumber: '',
|
||||
purpose: '',
|
||||
failureOrResendOption: none(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/auth/auth.dart';
|
||||
|
||||
part 'set_password_form_event.dart';
|
||||
part 'set_password_form_state.dart';
|
||||
part 'set_password_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class SetPasswordFormBloc
|
||||
extends Bloc<SetPasswordFormEvent, SetPasswordFormState> {
|
||||
final IAuthRepository _repository;
|
||||
SetPasswordFormBloc(this._repository)
|
||||
: super(SetPasswordFormState.initial()) {
|
||||
on<SetPasswordFormEvent>(_onSetPasswordFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onSetPasswordFormEvent(
|
||||
SetPasswordFormEvent event,
|
||||
Emitter<SetPasswordFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
registrationTokenChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
registrationToken: e.registrationToken,
|
||||
failureOrSetPasswordOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
passwordChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
password: e.password,
|
||||
failureOrSetPasswordOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
confirmPasswordChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
confirmPassword: e.confirmPassword,
|
||||
failureOrSetPasswordOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
Either<AuthFailure, Login>? failureOrSetPassword;
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: true,
|
||||
failureOrSetPasswordOption: none(),
|
||||
),
|
||||
);
|
||||
|
||||
final registrationTokenValid = state.registrationToken.isNotEmpty;
|
||||
final passwordValid = state.password.isNotEmpty;
|
||||
final confirmPasswordValid = state.confirmPassword.isNotEmpty;
|
||||
|
||||
if (registrationTokenValid && passwordValid && confirmPasswordValid) {
|
||||
failureOrSetPassword = await _repository.setPassword(
|
||||
registrationToken: state.registrationToken,
|
||||
password: state.password,
|
||||
confirmPassword: state.confirmPassword,
|
||||
);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrSetPasswordOption: optionOf(failureOrSetPassword),
|
||||
),
|
||||
);
|
||||
}
|
||||
emit(state.copyWith(showErrorMessages: true, isSubmitting: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,708 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'set_password_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$SetPasswordFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SetPasswordFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetPasswordFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $SetPasswordFormEventCopyWith<$Res> {
|
||||
$SetPasswordFormEventCopyWith(SetPasswordFormEvent _, $Res Function(SetPasswordFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [SetPasswordFormEvent].
|
||||
extension SetPasswordFormEventPatterns on SetPasswordFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _RegistrationTokenChanged value)? registrationTokenChanged,TResult Function( _PasswordChanged value)? passwordChanged,TResult Function( _ConfirmPasswordChanged value)? confirmPasswordChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that);case _ConfirmPasswordChanged() when confirmPasswordChanged != null:
|
||||
return confirmPasswordChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _RegistrationTokenChanged value) registrationTokenChanged,required TResult Function( _PasswordChanged value) passwordChanged,required TResult Function( _ConfirmPasswordChanged value) confirmPasswordChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged():
|
||||
return registrationTokenChanged(_that);case _PasswordChanged():
|
||||
return passwordChanged(_that);case _ConfirmPasswordChanged():
|
||||
return confirmPasswordChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _RegistrationTokenChanged value)? registrationTokenChanged,TResult? Function( _PasswordChanged value)? passwordChanged,TResult? Function( _ConfirmPasswordChanged value)? confirmPasswordChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that);case _ConfirmPasswordChanged() when confirmPasswordChanged != null:
|
||||
return confirmPasswordChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String registrationToken)? registrationTokenChanged,TResult Function( String password)? passwordChanged,TResult Function( String confirmPassword)? confirmPasswordChanged,TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that.registrationToken);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that.password);case _ConfirmPasswordChanged() when confirmPasswordChanged != null:
|
||||
return confirmPasswordChanged(_that.confirmPassword);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String registrationToken) registrationTokenChanged,required TResult Function( String password) passwordChanged,required TResult Function( String confirmPassword) confirmPasswordChanged,required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged():
|
||||
return registrationTokenChanged(_that.registrationToken);case _PasswordChanged():
|
||||
return passwordChanged(_that.password);case _ConfirmPasswordChanged():
|
||||
return confirmPasswordChanged(_that.confirmPassword);case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String registrationToken)? registrationTokenChanged,TResult? Function( String password)? passwordChanged,TResult? Function( String confirmPassword)? confirmPasswordChanged,TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that.registrationToken);case _PasswordChanged() when passwordChanged != null:
|
||||
return passwordChanged(_that.password);case _ConfirmPasswordChanged() when confirmPasswordChanged != null:
|
||||
return confirmPasswordChanged(_that.confirmPassword);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _RegistrationTokenChanged implements SetPasswordFormEvent {
|
||||
const _RegistrationTokenChanged(this.registrationToken);
|
||||
|
||||
|
||||
final String registrationToken;
|
||||
|
||||
/// Create a copy of SetPasswordFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$RegistrationTokenChangedCopyWith<_RegistrationTokenChanged> get copyWith => __$RegistrationTokenChangedCopyWithImpl<_RegistrationTokenChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _RegistrationTokenChanged&&(identical(other.registrationToken, registrationToken) || other.registrationToken == registrationToken));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,registrationToken);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetPasswordFormEvent.registrationTokenChanged(registrationToken: $registrationToken)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$RegistrationTokenChangedCopyWith<$Res> implements $SetPasswordFormEventCopyWith<$Res> {
|
||||
factory _$RegistrationTokenChangedCopyWith(_RegistrationTokenChanged value, $Res Function(_RegistrationTokenChanged) _then) = __$RegistrationTokenChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String registrationToken
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$RegistrationTokenChangedCopyWithImpl<$Res>
|
||||
implements _$RegistrationTokenChangedCopyWith<$Res> {
|
||||
__$RegistrationTokenChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _RegistrationTokenChanged _self;
|
||||
final $Res Function(_RegistrationTokenChanged) _then;
|
||||
|
||||
/// Create a copy of SetPasswordFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? registrationToken = null,}) {
|
||||
return _then(_RegistrationTokenChanged(
|
||||
null == registrationToken ? _self.registrationToken : registrationToken // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PasswordChanged implements SetPasswordFormEvent {
|
||||
const _PasswordChanged(this.password);
|
||||
|
||||
|
||||
final String password;
|
||||
|
||||
/// Create a copy of SetPasswordFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PasswordChangedCopyWith<_PasswordChanged> get copyWith => __$PasswordChangedCopyWithImpl<_PasswordChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PasswordChanged&&(identical(other.password, password) || other.password == password));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,password);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetPasswordFormEvent.passwordChanged(password: $password)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PasswordChangedCopyWith<$Res> implements $SetPasswordFormEventCopyWith<$Res> {
|
||||
factory _$PasswordChangedCopyWith(_PasswordChanged value, $Res Function(_PasswordChanged) _then) = __$PasswordChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String password
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PasswordChangedCopyWithImpl<$Res>
|
||||
implements _$PasswordChangedCopyWith<$Res> {
|
||||
__$PasswordChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PasswordChanged _self;
|
||||
final $Res Function(_PasswordChanged) _then;
|
||||
|
||||
/// Create a copy of SetPasswordFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? password = null,}) {
|
||||
return _then(_PasswordChanged(
|
||||
null == password ? _self.password : password // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _ConfirmPasswordChanged implements SetPasswordFormEvent {
|
||||
const _ConfirmPasswordChanged(this.confirmPassword);
|
||||
|
||||
|
||||
final String confirmPassword;
|
||||
|
||||
/// Create a copy of SetPasswordFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$ConfirmPasswordChangedCopyWith<_ConfirmPasswordChanged> get copyWith => __$ConfirmPasswordChangedCopyWithImpl<_ConfirmPasswordChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ConfirmPasswordChanged&&(identical(other.confirmPassword, confirmPassword) || other.confirmPassword == confirmPassword));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,confirmPassword);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetPasswordFormEvent.confirmPasswordChanged(confirmPassword: $confirmPassword)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$ConfirmPasswordChangedCopyWith<$Res> implements $SetPasswordFormEventCopyWith<$Res> {
|
||||
factory _$ConfirmPasswordChangedCopyWith(_ConfirmPasswordChanged value, $Res Function(_ConfirmPasswordChanged) _then) = __$ConfirmPasswordChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String confirmPassword
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$ConfirmPasswordChangedCopyWithImpl<$Res>
|
||||
implements _$ConfirmPasswordChangedCopyWith<$Res> {
|
||||
__$ConfirmPasswordChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _ConfirmPasswordChanged _self;
|
||||
final $Res Function(_ConfirmPasswordChanged) _then;
|
||||
|
||||
/// Create a copy of SetPasswordFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? confirmPassword = null,}) {
|
||||
return _then(_ConfirmPasswordChanged(
|
||||
null == confirmPassword ? _self.confirmPassword : confirmPassword // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements SetPasswordFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetPasswordFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$SetPasswordFormState {
|
||||
|
||||
String get registrationToken; String get password; String get confirmPassword; Option<Either<AuthFailure, Login>> get failureOrSetPasswordOption; bool get isSubmitting; bool get showErrorMessages;
|
||||
/// Create a copy of SetPasswordFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$SetPasswordFormStateCopyWith<SetPasswordFormState> get copyWith => _$SetPasswordFormStateCopyWithImpl<SetPasswordFormState>(this as SetPasswordFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as SetPasswordFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SetPasswordFormState&&(identical(other.registrationToken, _this.registrationToken) || other.registrationToken == _this.registrationToken)&&(identical(other.password, _this.password) || other.password == _this.password)&&(identical(other.confirmPassword, _this.confirmPassword) || other.confirmPassword == _this.confirmPassword)&&(identical(other.failureOrSetPasswordOption, _this.failureOrSetPasswordOption) || other.failureOrSetPasswordOption == _this.failureOrSetPasswordOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.showErrorMessages, _this.showErrorMessages) || other.showErrorMessages == _this.showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as SetPasswordFormState;
|
||||
return Object.hash(runtimeType,_this.registrationToken,_this.password,_this.confirmPassword,_this.failureOrSetPasswordOption,_this.isSubmitting,_this.showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as SetPasswordFormState;
|
||||
return 'SetPasswordFormState(registrationToken: ${_this.registrationToken}, password: ${_this.password}, confirmPassword: ${_this.confirmPassword}, failureOrSetPasswordOption: ${_this.failureOrSetPasswordOption}, isSubmitting: ${_this.isSubmitting}, showErrorMessages: ${_this.showErrorMessages})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $SetPasswordFormStateCopyWith<$Res> {
|
||||
factory $SetPasswordFormStateCopyWith(SetPasswordFormState value, $Res Function(SetPasswordFormState) _then) = _$SetPasswordFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String registrationToken, String password, String confirmPassword, Option<Either<AuthFailure, Login>> failureOrSetPasswordOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$SetPasswordFormStateCopyWithImpl<$Res>
|
||||
implements $SetPasswordFormStateCopyWith<$Res> {
|
||||
_$SetPasswordFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final SetPasswordFormState _self;
|
||||
final $Res Function(SetPasswordFormState) _then;
|
||||
|
||||
/// Create a copy of SetPasswordFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? registrationToken = null,Object? password = null,Object? confirmPassword = null,Object? failureOrSetPasswordOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(SetPasswordFormState(
|
||||
registrationToken: null == registrationToken ? _self.registrationToken : registrationToken // ignore: cast_nullable_to_non_nullable
|
||||
as String,password: null == password ? _self.password : password // ignore: cast_nullable_to_non_nullable
|
||||
as String,confirmPassword: null == confirmPassword ? _self.confirmPassword : confirmPassword // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrSetPasswordOption: null == failureOrSetPasswordOption ? _self.failureOrSetPasswordOption : failureOrSetPasswordOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Login>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [SetPasswordFormState].
|
||||
extension SetPasswordFormStatePatterns on SetPasswordFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SetPasswordFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SetPasswordFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SetPasswordFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SetPasswordFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SetPasswordFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SetPasswordFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String registrationToken, String password, String confirmPassword, Option<Either<AuthFailure, Login>> failureOrSetPasswordOption, bool isSubmitting, bool showErrorMessages)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SetPasswordFormState() when $default != null:
|
||||
return $default(_that.registrationToken,_that.password,_that.confirmPassword,_that.failureOrSetPasswordOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String registrationToken, String password, String confirmPassword, Option<Either<AuthFailure, Login>> failureOrSetPasswordOption, bool isSubmitting, bool showErrorMessages) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SetPasswordFormState():
|
||||
return $default(_that.registrationToken,_that.password,_that.confirmPassword,_that.failureOrSetPasswordOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String registrationToken, String password, String confirmPassword, Option<Either<AuthFailure, Login>> failureOrSetPasswordOption, bool isSubmitting, bool showErrorMessages)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SetPasswordFormState() when $default != null:
|
||||
return $default(_that.registrationToken,_that.password,_that.confirmPassword,_that.failureOrSetPasswordOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _SetPasswordFormState implements SetPasswordFormState {
|
||||
const _SetPasswordFormState({required this.registrationToken, required this.password, required this.confirmPassword, required this.failureOrSetPasswordOption, this.isSubmitting = false, this.showErrorMessages = false});
|
||||
|
||||
|
||||
@override final String registrationToken;
|
||||
@override final String password;
|
||||
@override final String confirmPassword;
|
||||
@override final Option<Either<AuthFailure, Login>> failureOrSetPasswordOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override@JsonKey() final bool showErrorMessages;
|
||||
|
||||
/// Create a copy of SetPasswordFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SetPasswordFormStateCopyWith<_SetPasswordFormState> get copyWith => __$SetPasswordFormStateCopyWithImpl<_SetPasswordFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SetPasswordFormState&&(identical(other.registrationToken, registrationToken) || other.registrationToken == registrationToken)&&(identical(other.password, password) || other.password == password)&&(identical(other.confirmPassword, confirmPassword) || other.confirmPassword == confirmPassword)&&(identical(other.failureOrSetPasswordOption, failureOrSetPasswordOption) || other.failureOrSetPasswordOption == failureOrSetPasswordOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.showErrorMessages, showErrorMessages) || other.showErrorMessages == showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,registrationToken,password,confirmPassword,failureOrSetPasswordOption,isSubmitting,showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetPasswordFormState(registrationToken: $registrationToken, password: $password, confirmPassword: $confirmPassword, failureOrSetPasswordOption: $failureOrSetPasswordOption, isSubmitting: $isSubmitting, showErrorMessages: $showErrorMessages)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SetPasswordFormStateCopyWith<$Res> implements $SetPasswordFormStateCopyWith<$Res> {
|
||||
factory _$SetPasswordFormStateCopyWith(_SetPasswordFormState value, $Res Function(_SetPasswordFormState) _then) = __$SetPasswordFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String registrationToken, String password, String confirmPassword, Option<Either<AuthFailure, Login>> failureOrSetPasswordOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SetPasswordFormStateCopyWithImpl<$Res>
|
||||
implements _$SetPasswordFormStateCopyWith<$Res> {
|
||||
__$SetPasswordFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _SetPasswordFormState _self;
|
||||
final $Res Function(_SetPasswordFormState) _then;
|
||||
|
||||
/// Create a copy of SetPasswordFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? registrationToken = null,Object? password = null,Object? confirmPassword = null,Object? failureOrSetPasswordOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(_SetPasswordFormState(
|
||||
registrationToken: null == registrationToken ? _self.registrationToken : registrationToken // ignore: cast_nullable_to_non_nullable
|
||||
as String,password: null == password ? _self.password : password // ignore: cast_nullable_to_non_nullable
|
||||
as String,confirmPassword: null == confirmPassword ? _self.confirmPassword : confirmPassword // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrSetPasswordOption: null == failureOrSetPasswordOption ? _self.failureOrSetPasswordOption : failureOrSetPasswordOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Login>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,14 @@
|
||||
part of 'set_password_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class SetPasswordFormEvent with _$SetPasswordFormEvent {
|
||||
const factory SetPasswordFormEvent.registrationTokenChanged(
|
||||
String registrationToken,
|
||||
) = _RegistrationTokenChanged;
|
||||
const factory SetPasswordFormEvent.passwordChanged(String password) =
|
||||
_PasswordChanged;
|
||||
const factory SetPasswordFormEvent.confirmPasswordChanged(
|
||||
String confirmPassword,
|
||||
) = _ConfirmPasswordChanged;
|
||||
const factory SetPasswordFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
part of 'set_password_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class SetPasswordFormState with _$SetPasswordFormState {
|
||||
const factory SetPasswordFormState({
|
||||
required String registrationToken,
|
||||
required String password,
|
||||
required String confirmPassword,
|
||||
required Option<Either<AuthFailure, Login>> failureOrSetPasswordOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
@Default(false) bool showErrorMessages,
|
||||
}) = _SetPasswordFormState;
|
||||
|
||||
factory SetPasswordFormState.initial() => SetPasswordFormState(
|
||||
registrationToken: '',
|
||||
password: '',
|
||||
confirmPassword: '',
|
||||
failureOrSetPasswordOption: none(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/auth/auth.dart';
|
||||
|
||||
part 'verify_form_event.dart';
|
||||
part 'verify_form_state.dart';
|
||||
part 'verify_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class VerifyFormBloc extends Bloc<VerifyFormEvent, VerifyFormState> {
|
||||
final IAuthRepository _repository;
|
||||
VerifyFormBloc(this._repository) : super(VerifyFormState.initial()) {
|
||||
on<VerifyFormEvent>(_onVerifyFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onVerifyFormEvent(
|
||||
VerifyFormEvent event,
|
||||
Emitter<VerifyFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
registrationTokenChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
registrationToken: e.registrationToken,
|
||||
failureOrVerifyOption: none(),
|
||||
),
|
||||
);
|
||||
},
|
||||
otpCodeChanged: (e) async {
|
||||
emit(state.copyWith(otpCode: e.otpCode, failureOrVerifyOption: none()));
|
||||
},
|
||||
submitted: (e) async {
|
||||
Either<AuthFailure, Verify>? failureOrVerify;
|
||||
emit(state.copyWith(isSubmitting: true, failureOrVerifyOption: none()));
|
||||
|
||||
final otpCodeValid = state.otpCode.isNotEmpty;
|
||||
final registrationTokenValid = state.registrationToken.isNotEmpty;
|
||||
|
||||
if (registrationTokenValid && otpCodeValid) {
|
||||
failureOrVerify = await _repository.verify(
|
||||
registrationToken: state.registrationToken,
|
||||
otpCode: state.otpCode,
|
||||
);
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrVerifyOption: optionOf(failureOrVerify),
|
||||
),
|
||||
);
|
||||
}
|
||||
emit(state.copyWith(showErrorMessages: true, isSubmitting: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,631 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'verify_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$VerifyFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is VerifyFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VerifyFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $VerifyFormEventCopyWith<$Res> {
|
||||
$VerifyFormEventCopyWith(VerifyFormEvent _, $Res Function(VerifyFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [VerifyFormEvent].
|
||||
extension VerifyFormEventPatterns on VerifyFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _RegistrationTokenChanged value)? registrationTokenChanged,TResult Function( _OtpCodeChanged value)? otpCodeChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that);case _OtpCodeChanged() when otpCodeChanged != null:
|
||||
return otpCodeChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _RegistrationTokenChanged value) registrationTokenChanged,required TResult Function( _OtpCodeChanged value) otpCodeChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged():
|
||||
return registrationTokenChanged(_that);case _OtpCodeChanged():
|
||||
return otpCodeChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _RegistrationTokenChanged value)? registrationTokenChanged,TResult? Function( _OtpCodeChanged value)? otpCodeChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that);case _OtpCodeChanged() when otpCodeChanged != null:
|
||||
return otpCodeChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String registrationToken)? registrationTokenChanged,TResult Function( String otpCode)? otpCodeChanged,TResult Function()? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that.registrationToken);case _OtpCodeChanged() when otpCodeChanged != null:
|
||||
return otpCodeChanged(_that.otpCode);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String registrationToken) registrationTokenChanged,required TResult Function( String otpCode) otpCodeChanged,required TResult Function() submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged():
|
||||
return registrationTokenChanged(_that.registrationToken);case _OtpCodeChanged():
|
||||
return otpCodeChanged(_that.otpCode);case _Submitted():
|
||||
return submitted();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String registrationToken)? registrationTokenChanged,TResult? Function( String otpCode)? otpCodeChanged,TResult? Function()? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _RegistrationTokenChanged() when registrationTokenChanged != null:
|
||||
return registrationTokenChanged(_that.registrationToken);case _OtpCodeChanged() when otpCodeChanged != null:
|
||||
return otpCodeChanged(_that.otpCode);case _Submitted() when submitted != null:
|
||||
return submitted();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _RegistrationTokenChanged implements VerifyFormEvent {
|
||||
const _RegistrationTokenChanged(this.registrationToken);
|
||||
|
||||
|
||||
final String registrationToken;
|
||||
|
||||
/// Create a copy of VerifyFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$RegistrationTokenChangedCopyWith<_RegistrationTokenChanged> get copyWith => __$RegistrationTokenChangedCopyWithImpl<_RegistrationTokenChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _RegistrationTokenChanged&&(identical(other.registrationToken, registrationToken) || other.registrationToken == registrationToken));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,registrationToken);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VerifyFormEvent.registrationTokenChanged(registrationToken: $registrationToken)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$RegistrationTokenChangedCopyWith<$Res> implements $VerifyFormEventCopyWith<$Res> {
|
||||
factory _$RegistrationTokenChangedCopyWith(_RegistrationTokenChanged value, $Res Function(_RegistrationTokenChanged) _then) = __$RegistrationTokenChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String registrationToken
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$RegistrationTokenChangedCopyWithImpl<$Res>
|
||||
implements _$RegistrationTokenChangedCopyWith<$Res> {
|
||||
__$RegistrationTokenChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _RegistrationTokenChanged _self;
|
||||
final $Res Function(_RegistrationTokenChanged) _then;
|
||||
|
||||
/// Create a copy of VerifyFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? registrationToken = null,}) {
|
||||
return _then(_RegistrationTokenChanged(
|
||||
null == registrationToken ? _self.registrationToken : registrationToken // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _OtpCodeChanged implements VerifyFormEvent {
|
||||
const _OtpCodeChanged(this.otpCode);
|
||||
|
||||
|
||||
final String otpCode;
|
||||
|
||||
/// Create a copy of VerifyFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$OtpCodeChangedCopyWith<_OtpCodeChanged> get copyWith => __$OtpCodeChangedCopyWithImpl<_OtpCodeChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _OtpCodeChanged&&(identical(other.otpCode, otpCode) || other.otpCode == otpCode));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,otpCode);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VerifyFormEvent.otpCodeChanged(otpCode: $otpCode)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$OtpCodeChangedCopyWith<$Res> implements $VerifyFormEventCopyWith<$Res> {
|
||||
factory _$OtpCodeChangedCopyWith(_OtpCodeChanged value, $Res Function(_OtpCodeChanged) _then) = __$OtpCodeChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String otpCode
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$OtpCodeChangedCopyWithImpl<$Res>
|
||||
implements _$OtpCodeChangedCopyWith<$Res> {
|
||||
__$OtpCodeChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _OtpCodeChanged _self;
|
||||
final $Res Function(_OtpCodeChanged) _then;
|
||||
|
||||
/// Create a copy of VerifyFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? otpCode = null,}) {
|
||||
return _then(_OtpCodeChanged(
|
||||
null == otpCode ? _self.otpCode : otpCode // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements VerifyFormEvent {
|
||||
const _Submitted();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VerifyFormEvent.submitted()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$VerifyFormState {
|
||||
|
||||
String get registrationToken; String get otpCode; Option<Either<AuthFailure, Verify>> get failureOrVerifyOption; bool get isSubmitting; bool get showErrorMessages;
|
||||
/// Create a copy of VerifyFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$VerifyFormStateCopyWith<VerifyFormState> get copyWith => _$VerifyFormStateCopyWithImpl<VerifyFormState>(this as VerifyFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as VerifyFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is VerifyFormState&&(identical(other.registrationToken, _this.registrationToken) || other.registrationToken == _this.registrationToken)&&(identical(other.otpCode, _this.otpCode) || other.otpCode == _this.otpCode)&&(identical(other.failureOrVerifyOption, _this.failureOrVerifyOption) || other.failureOrVerifyOption == _this.failureOrVerifyOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.showErrorMessages, _this.showErrorMessages) || other.showErrorMessages == _this.showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as VerifyFormState;
|
||||
return Object.hash(runtimeType,_this.registrationToken,_this.otpCode,_this.failureOrVerifyOption,_this.isSubmitting,_this.showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as VerifyFormState;
|
||||
return 'VerifyFormState(registrationToken: ${_this.registrationToken}, otpCode: ${_this.otpCode}, failureOrVerifyOption: ${_this.failureOrVerifyOption}, isSubmitting: ${_this.isSubmitting}, showErrorMessages: ${_this.showErrorMessages})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $VerifyFormStateCopyWith<$Res> {
|
||||
factory $VerifyFormStateCopyWith(VerifyFormState value, $Res Function(VerifyFormState) _then) = _$VerifyFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String registrationToken, String otpCode, Option<Either<AuthFailure, Verify>> failureOrVerifyOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$VerifyFormStateCopyWithImpl<$Res>
|
||||
implements $VerifyFormStateCopyWith<$Res> {
|
||||
_$VerifyFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final VerifyFormState _self;
|
||||
final $Res Function(VerifyFormState) _then;
|
||||
|
||||
/// Create a copy of VerifyFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? registrationToken = null,Object? otpCode = null,Object? failureOrVerifyOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(VerifyFormState(
|
||||
registrationToken: null == registrationToken ? _self.registrationToken : registrationToken // ignore: cast_nullable_to_non_nullable
|
||||
as String,otpCode: null == otpCode ? _self.otpCode : otpCode // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrVerifyOption: null == failureOrVerifyOption ? _self.failureOrVerifyOption : failureOrVerifyOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Verify>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [VerifyFormState].
|
||||
extension VerifyFormStatePatterns on VerifyFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _VerifyFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _VerifyFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _VerifyFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _VerifyFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _VerifyFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _VerifyFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String registrationToken, String otpCode, Option<Either<AuthFailure, Verify>> failureOrVerifyOption, bool isSubmitting, bool showErrorMessages)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _VerifyFormState() when $default != null:
|
||||
return $default(_that.registrationToken,_that.otpCode,_that.failureOrVerifyOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String registrationToken, String otpCode, Option<Either<AuthFailure, Verify>> failureOrVerifyOption, bool isSubmitting, bool showErrorMessages) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _VerifyFormState():
|
||||
return $default(_that.registrationToken,_that.otpCode,_that.failureOrVerifyOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String registrationToken, String otpCode, Option<Either<AuthFailure, Verify>> failureOrVerifyOption, bool isSubmitting, bool showErrorMessages)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _VerifyFormState() when $default != null:
|
||||
return $default(_that.registrationToken,_that.otpCode,_that.failureOrVerifyOption,_that.isSubmitting,_that.showErrorMessages);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _VerifyFormState implements VerifyFormState {
|
||||
const _VerifyFormState({required this.registrationToken, required this.otpCode, required this.failureOrVerifyOption, this.isSubmitting = false, this.showErrorMessages = false});
|
||||
|
||||
|
||||
@override final String registrationToken;
|
||||
@override final String otpCode;
|
||||
@override final Option<Either<AuthFailure, Verify>> failureOrVerifyOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override@JsonKey() final bool showErrorMessages;
|
||||
|
||||
/// Create a copy of VerifyFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$VerifyFormStateCopyWith<_VerifyFormState> get copyWith => __$VerifyFormStateCopyWithImpl<_VerifyFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _VerifyFormState&&(identical(other.registrationToken, registrationToken) || other.registrationToken == registrationToken)&&(identical(other.otpCode, otpCode) || other.otpCode == otpCode)&&(identical(other.failureOrVerifyOption, failureOrVerifyOption) || other.failureOrVerifyOption == failureOrVerifyOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.showErrorMessages, showErrorMessages) || other.showErrorMessages == showErrorMessages));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,registrationToken,otpCode,failureOrVerifyOption,isSubmitting,showErrorMessages);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VerifyFormState(registrationToken: $registrationToken, otpCode: $otpCode, failureOrVerifyOption: $failureOrVerifyOption, isSubmitting: $isSubmitting, showErrorMessages: $showErrorMessages)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$VerifyFormStateCopyWith<$Res> implements $VerifyFormStateCopyWith<$Res> {
|
||||
factory _$VerifyFormStateCopyWith(_VerifyFormState value, $Res Function(_VerifyFormState) _then) = __$VerifyFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String registrationToken, String otpCode, Option<Either<AuthFailure, Verify>> failureOrVerifyOption, bool isSubmitting, bool showErrorMessages
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$VerifyFormStateCopyWithImpl<$Res>
|
||||
implements _$VerifyFormStateCopyWith<$Res> {
|
||||
__$VerifyFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _VerifyFormState _self;
|
||||
final $Res Function(_VerifyFormState) _then;
|
||||
|
||||
/// Create a copy of VerifyFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? registrationToken = null,Object? otpCode = null,Object? failureOrVerifyOption = null,Object? isSubmitting = null,Object? showErrorMessages = null,}) {
|
||||
return _then(_VerifyFormState(
|
||||
registrationToken: null == registrationToken ? _self.registrationToken : registrationToken // ignore: cast_nullable_to_non_nullable
|
||||
as String,otpCode: null == otpCode ? _self.otpCode : otpCode // ignore: cast_nullable_to_non_nullable
|
||||
as String,failureOrVerifyOption: null == failureOrVerifyOption ? _self.failureOrVerifyOption : failureOrVerifyOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<AuthFailure, Verify>>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,showErrorMessages: null == showErrorMessages ? _self.showErrorMessages : showErrorMessages // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,11 @@
|
||||
part of 'verify_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class VerifyFormEvent with _$VerifyFormEvent {
|
||||
const factory VerifyFormEvent.registrationTokenChanged(
|
||||
String registrationToken,
|
||||
) = _RegistrationTokenChanged;
|
||||
const factory VerifyFormEvent.otpCodeChanged(String otpCode) =
|
||||
_OtpCodeChanged;
|
||||
const factory VerifyFormEvent.submitted() = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
part of 'verify_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class VerifyFormState with _$VerifyFormState {
|
||||
const factory VerifyFormState({
|
||||
required String registrationToken,
|
||||
required String otpCode,
|
||||
required Option<Either<AuthFailure, Verify>> failureOrVerifyOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
@Default(false) bool showErrorMessages,
|
||||
}) = _VerifyFormState;
|
||||
|
||||
factory VerifyFormState.initial() => VerifyFormState(
|
||||
registrationToken: '',
|
||||
otpCode: '',
|
||||
failureOrVerifyOption: none(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/game/game.dart';
|
||||
|
||||
part 'ferris_wheel_loader_event.dart';
|
||||
part 'ferris_wheel_loader_state.dart';
|
||||
part 'ferris_wheel_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class FerrisWheelLoaderBloc
|
||||
extends Bloc<FerrisWheelLoaderEvent, FerrisWheelLoaderState> {
|
||||
final IGameRepository _repository;
|
||||
FerrisWheelLoaderBloc(this._repository)
|
||||
: super(FerrisWheelLoaderState.initial()) {
|
||||
on<FerrisWheelLoaderEvent>(_onFerrisWheelLoaderEvent);
|
||||
}
|
||||
|
||||
Future<void> _onFerrisWheelLoaderEvent(
|
||||
FerrisWheelLoaderEvent event,
|
||||
Emitter<FerrisWheelLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
fetched: (e) async {
|
||||
emit(
|
||||
state.copyWith(isFetching: true, failureOptionFerrisWheel: none()),
|
||||
);
|
||||
|
||||
final result = await _repository.ferrisWheel();
|
||||
|
||||
var data = result.fold(
|
||||
(f) => state.copyWith(failureOptionFerrisWheel: optionOf(f)),
|
||||
(ferrisWheel) => state.copyWith(ferrisWheel: ferrisWheel),
|
||||
);
|
||||
|
||||
emit(data.copyWith(isFetching: false));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,495 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'ferris_wheel_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$FerrisWheelLoaderEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is FerrisWheelLoaderEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'FerrisWheelLoaderEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $FerrisWheelLoaderEventCopyWith<$Res> {
|
||||
$FerrisWheelLoaderEventCopyWith(FerrisWheelLoaderEvent _, $Res Function(FerrisWheelLoaderEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [FerrisWheelLoaderEvent].
|
||||
extension FerrisWheelLoaderEventPatterns on FerrisWheelLoaderEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Fetched value)? fetched,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Fetched value) fetched,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched():
|
||||
return fetched(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Fetched value)? fetched,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()? fetched,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function() fetched,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched():
|
||||
return fetched();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Fetched implements FerrisWheelLoaderEvent {
|
||||
const _Fetched();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Fetched);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'FerrisWheelLoaderEvent.fetched()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$FerrisWheelLoaderState {
|
||||
|
||||
Game get ferrisWheel; Option<GameFailure> get failureOptionFerrisWheel; bool get isFetching;
|
||||
/// Create a copy of FerrisWheelLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$FerrisWheelLoaderStateCopyWith<FerrisWheelLoaderState> get copyWith => _$FerrisWheelLoaderStateCopyWithImpl<FerrisWheelLoaderState>(this as FerrisWheelLoaderState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as FerrisWheelLoaderState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is FerrisWheelLoaderState&&(identical(other.ferrisWheel, _this.ferrisWheel) || other.ferrisWheel == _this.ferrisWheel)&&(identical(other.failureOptionFerrisWheel, _this.failureOptionFerrisWheel) || other.failureOptionFerrisWheel == _this.failureOptionFerrisWheel)&&(identical(other.isFetching, _this.isFetching) || other.isFetching == _this.isFetching));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as FerrisWheelLoaderState;
|
||||
return Object.hash(runtimeType,_this.ferrisWheel,_this.failureOptionFerrisWheel,_this.isFetching);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as FerrisWheelLoaderState;
|
||||
return 'FerrisWheelLoaderState(ferrisWheel: ${_this.ferrisWheel}, failureOptionFerrisWheel: ${_this.failureOptionFerrisWheel}, isFetching: ${_this.isFetching})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $FerrisWheelLoaderStateCopyWith<$Res> {
|
||||
factory $FerrisWheelLoaderStateCopyWith(FerrisWheelLoaderState value, $Res Function(FerrisWheelLoaderState) _then) = _$FerrisWheelLoaderStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
Game ferrisWheel, Option<GameFailure> failureOptionFerrisWheel, bool isFetching
|
||||
});
|
||||
|
||||
|
||||
$GameCopyWith<$Res> get ferrisWheel;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$FerrisWheelLoaderStateCopyWithImpl<$Res>
|
||||
implements $FerrisWheelLoaderStateCopyWith<$Res> {
|
||||
_$FerrisWheelLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final FerrisWheelLoaderState _self;
|
||||
final $Res Function(FerrisWheelLoaderState) _then;
|
||||
|
||||
/// Create a copy of FerrisWheelLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? ferrisWheel = null,Object? failureOptionFerrisWheel = null,Object? isFetching = null,}) {
|
||||
return _then(FerrisWheelLoaderState(
|
||||
ferrisWheel: null == ferrisWheel ? _self.ferrisWheel : ferrisWheel // ignore: cast_nullable_to_non_nullable
|
||||
as Game,failureOptionFerrisWheel: null == failureOptionFerrisWheel ? _self.failureOptionFerrisWheel : failureOptionFerrisWheel // ignore: cast_nullable_to_non_nullable
|
||||
as Option<GameFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
/// Create a copy of FerrisWheelLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$GameCopyWith<$Res> get ferrisWheel {
|
||||
|
||||
return $GameCopyWith<$Res>(_self.ferrisWheel, (value) {
|
||||
return _then(_self.copyWith(ferrisWheel: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [FerrisWheelLoaderState].
|
||||
extension FerrisWheelLoaderStatePatterns on FerrisWheelLoaderState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _FerrisWheelLoaderState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _FerrisWheelLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _FerrisWheelLoaderState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _FerrisWheelLoaderState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _FerrisWheelLoaderState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _FerrisWheelLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( Game ferrisWheel, Option<GameFailure> failureOptionFerrisWheel, bool isFetching)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _FerrisWheelLoaderState() when $default != null:
|
||||
return $default(_that.ferrisWheel,_that.failureOptionFerrisWheel,_that.isFetching);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( Game ferrisWheel, Option<GameFailure> failureOptionFerrisWheel, bool isFetching) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _FerrisWheelLoaderState():
|
||||
return $default(_that.ferrisWheel,_that.failureOptionFerrisWheel,_that.isFetching);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( Game ferrisWheel, Option<GameFailure> failureOptionFerrisWheel, bool isFetching)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _FerrisWheelLoaderState() when $default != null:
|
||||
return $default(_that.ferrisWheel,_that.failureOptionFerrisWheel,_that.isFetching);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _FerrisWheelLoaderState implements FerrisWheelLoaderState {
|
||||
const _FerrisWheelLoaderState({required this.ferrisWheel, required this.failureOptionFerrisWheel, this.isFetching = false});
|
||||
|
||||
|
||||
@override final Game ferrisWheel;
|
||||
@override final Option<GameFailure> failureOptionFerrisWheel;
|
||||
@override@JsonKey() final bool isFetching;
|
||||
|
||||
/// Create a copy of FerrisWheelLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$FerrisWheelLoaderStateCopyWith<_FerrisWheelLoaderState> get copyWith => __$FerrisWheelLoaderStateCopyWithImpl<_FerrisWheelLoaderState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _FerrisWheelLoaderState&&(identical(other.ferrisWheel, ferrisWheel) || other.ferrisWheel == ferrisWheel)&&(identical(other.failureOptionFerrisWheel, failureOptionFerrisWheel) || other.failureOptionFerrisWheel == failureOptionFerrisWheel)&&(identical(other.isFetching, isFetching) || other.isFetching == isFetching));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,ferrisWheel,failureOptionFerrisWheel,isFetching);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'FerrisWheelLoaderState(ferrisWheel: $ferrisWheel, failureOptionFerrisWheel: $failureOptionFerrisWheel, isFetching: $isFetching)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$FerrisWheelLoaderStateCopyWith<$Res> implements $FerrisWheelLoaderStateCopyWith<$Res> {
|
||||
factory _$FerrisWheelLoaderStateCopyWith(_FerrisWheelLoaderState value, $Res Function(_FerrisWheelLoaderState) _then) = __$FerrisWheelLoaderStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
Game ferrisWheel, Option<GameFailure> failureOptionFerrisWheel, bool isFetching
|
||||
});
|
||||
|
||||
|
||||
@override $GameCopyWith<$Res> get ferrisWheel;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$FerrisWheelLoaderStateCopyWithImpl<$Res>
|
||||
implements _$FerrisWheelLoaderStateCopyWith<$Res> {
|
||||
__$FerrisWheelLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _FerrisWheelLoaderState _self;
|
||||
final $Res Function(_FerrisWheelLoaderState) _then;
|
||||
|
||||
/// Create a copy of FerrisWheelLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? ferrisWheel = null,Object? failureOptionFerrisWheel = null,Object? isFetching = null,}) {
|
||||
return _then(_FerrisWheelLoaderState(
|
||||
ferrisWheel: null == ferrisWheel ? _self.ferrisWheel : ferrisWheel // ignore: cast_nullable_to_non_nullable
|
||||
as Game,failureOptionFerrisWheel: null == failureOptionFerrisWheel ? _self.failureOptionFerrisWheel : failureOptionFerrisWheel // ignore: cast_nullable_to_non_nullable
|
||||
as Option<GameFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of FerrisWheelLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$GameCopyWith<$Res> get ferrisWheel {
|
||||
|
||||
return $GameCopyWith<$Res>(_self.ferrisWheel, (value) {
|
||||
return _then(_self.copyWith(ferrisWheel: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,6 @@
|
||||
part of 'ferris_wheel_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class FerrisWheelLoaderEvent with _$FerrisWheelLoaderEvent {
|
||||
const factory FerrisWheelLoaderEvent.fetched() = _Fetched;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
part of 'ferris_wheel_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class FerrisWheelLoaderState with _$FerrisWheelLoaderState {
|
||||
const factory FerrisWheelLoaderState({
|
||||
required Game ferrisWheel,
|
||||
required Option<GameFailure> failureOptionFerrisWheel,
|
||||
@Default(false) bool isFetching,
|
||||
}) = _FerrisWheelLoaderState;
|
||||
|
||||
factory FerrisWheelLoaderState.initial() => FerrisWheelLoaderState(
|
||||
ferrisWheel: Game.empty(),
|
||||
failureOptionFerrisWheel: none(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/game/game.dart';
|
||||
|
||||
part 'game_spin_event.dart';
|
||||
part 'game_spin_state.dart';
|
||||
part 'game_spin_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class GameSpinBloc extends Bloc<GameSpinEvent, GameSpinState> {
|
||||
final IGameRepository _repository;
|
||||
|
||||
GameSpinBloc(this._repository) : super(GameSpinState.initial()) {
|
||||
on<GameSpinEvent>(_onGameSpinEvent);
|
||||
}
|
||||
|
||||
Future<void> _onGameSpinEvent(
|
||||
GameSpinEvent event,
|
||||
Emitter<GameSpinState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
spun: (e) async {
|
||||
if (state.isSpinning) return;
|
||||
emit(state.copyWith(isSpinning: true, failureOrResultOption: none()));
|
||||
|
||||
final result = await _repository.spin(gameId: e.gameId);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSpinning: false,
|
||||
failureOrResultOption: optionOf(result),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,546 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'game_spin_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$GameSpinEvent {
|
||||
|
||||
String get gameId;
|
||||
/// Create a copy of GameSpinEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$GameSpinEventCopyWith<GameSpinEvent> get copyWith => _$GameSpinEventCopyWithImpl<GameSpinEvent>(this as GameSpinEvent, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as GameSpinEvent;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is GameSpinEvent&&(identical(other.gameId, _this.gameId) || other.gameId == _this.gameId));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as GameSpinEvent;
|
||||
return Object.hash(runtimeType,_this.gameId);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as GameSpinEvent;
|
||||
return 'GameSpinEvent(gameId: ${_this.gameId})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $GameSpinEventCopyWith<$Res> {
|
||||
factory $GameSpinEventCopyWith(GameSpinEvent value, $Res Function(GameSpinEvent) _then) = _$GameSpinEventCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String gameId
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$GameSpinEventCopyWithImpl<$Res>
|
||||
implements $GameSpinEventCopyWith<$Res> {
|
||||
_$GameSpinEventCopyWithImpl(this._self, this._then);
|
||||
|
||||
final GameSpinEvent _self;
|
||||
final $Res Function(GameSpinEvent) _then;
|
||||
|
||||
/// Create a copy of GameSpinEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? gameId = null,}) {
|
||||
return _then(GameSpinEvent.spun(
|
||||
null == gameId ? _self.gameId : gameId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [GameSpinEvent].
|
||||
extension GameSpinEventPatterns on GameSpinEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Spun value)? spun,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Spun() when spun != null:
|
||||
return spun(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Spun value) spun,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Spun():
|
||||
return spun(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Spun value)? spun,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Spun() when spun != null:
|
||||
return spun(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String gameId)? spun,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Spun() when spun != null:
|
||||
return spun(_that.gameId);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String gameId) spun,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Spun():
|
||||
return spun(_that.gameId);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String gameId)? spun,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Spun() when spun != null:
|
||||
return spun(_that.gameId);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Spun implements GameSpinEvent {
|
||||
const _Spun(this.gameId);
|
||||
|
||||
|
||||
@override final String gameId;
|
||||
|
||||
/// Create a copy of GameSpinEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SpunCopyWith<_Spun> get copyWith => __$SpunCopyWithImpl<_Spun>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Spun&&(identical(other.gameId, gameId) || other.gameId == gameId));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,gameId);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'GameSpinEvent.spun(gameId: $gameId)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SpunCopyWith<$Res> implements $GameSpinEventCopyWith<$Res> {
|
||||
factory _$SpunCopyWith(_Spun value, $Res Function(_Spun) _then) = __$SpunCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String gameId
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SpunCopyWithImpl<$Res>
|
||||
implements _$SpunCopyWith<$Res> {
|
||||
__$SpunCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _Spun _self;
|
||||
final $Res Function(_Spun) _then;
|
||||
|
||||
/// Create a copy of GameSpinEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? gameId = null,}) {
|
||||
return _then(_Spun(
|
||||
null == gameId ? _self.gameId : gameId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$GameSpinState {
|
||||
|
||||
bool get isSpinning; Option<Either<GameFailure, SpinResult>> get failureOrResultOption;
|
||||
/// Create a copy of GameSpinState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$GameSpinStateCopyWith<GameSpinState> get copyWith => _$GameSpinStateCopyWithImpl<GameSpinState>(this as GameSpinState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as GameSpinState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is GameSpinState&&(identical(other.isSpinning, _this.isSpinning) || other.isSpinning == _this.isSpinning)&&(identical(other.failureOrResultOption, _this.failureOrResultOption) || other.failureOrResultOption == _this.failureOrResultOption));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as GameSpinState;
|
||||
return Object.hash(runtimeType,_this.isSpinning,_this.failureOrResultOption);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as GameSpinState;
|
||||
return 'GameSpinState(isSpinning: ${_this.isSpinning}, failureOrResultOption: ${_this.failureOrResultOption})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $GameSpinStateCopyWith<$Res> {
|
||||
factory $GameSpinStateCopyWith(GameSpinState value, $Res Function(GameSpinState) _then) = _$GameSpinStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
bool isSpinning, Option<Either<GameFailure, SpinResult>> failureOrResultOption
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$GameSpinStateCopyWithImpl<$Res>
|
||||
implements $GameSpinStateCopyWith<$Res> {
|
||||
_$GameSpinStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final GameSpinState _self;
|
||||
final $Res Function(GameSpinState) _then;
|
||||
|
||||
/// Create a copy of GameSpinState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? isSpinning = null,Object? failureOrResultOption = null,}) {
|
||||
return _then(GameSpinState(
|
||||
isSpinning: null == isSpinning ? _self.isSpinning : isSpinning // ignore: cast_nullable_to_non_nullable
|
||||
as bool,failureOrResultOption: null == failureOrResultOption ? _self.failureOrResultOption : failureOrResultOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<GameFailure, SpinResult>>,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [GameSpinState].
|
||||
extension GameSpinStatePatterns on GameSpinState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _GameSpinState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _GameSpinState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _GameSpinState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _GameSpinState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _GameSpinState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _GameSpinState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isSpinning, Option<Either<GameFailure, SpinResult>> failureOrResultOption)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _GameSpinState() when $default != null:
|
||||
return $default(_that.isSpinning,_that.failureOrResultOption);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isSpinning, Option<Either<GameFailure, SpinResult>> failureOrResultOption) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _GameSpinState():
|
||||
return $default(_that.isSpinning,_that.failureOrResultOption);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isSpinning, Option<Either<GameFailure, SpinResult>> failureOrResultOption)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _GameSpinState() when $default != null:
|
||||
return $default(_that.isSpinning,_that.failureOrResultOption);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _GameSpinState implements GameSpinState {
|
||||
const _GameSpinState({this.isSpinning = false, required this.failureOrResultOption});
|
||||
|
||||
|
||||
@override@JsonKey() final bool isSpinning;
|
||||
@override final Option<Either<GameFailure, SpinResult>> failureOrResultOption;
|
||||
|
||||
/// Create a copy of GameSpinState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$GameSpinStateCopyWith<_GameSpinState> get copyWith => __$GameSpinStateCopyWithImpl<_GameSpinState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _GameSpinState&&(identical(other.isSpinning, isSpinning) || other.isSpinning == isSpinning)&&(identical(other.failureOrResultOption, failureOrResultOption) || other.failureOrResultOption == failureOrResultOption));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,isSpinning,failureOrResultOption);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'GameSpinState(isSpinning: $isSpinning, failureOrResultOption: $failureOrResultOption)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$GameSpinStateCopyWith<$Res> implements $GameSpinStateCopyWith<$Res> {
|
||||
factory _$GameSpinStateCopyWith(_GameSpinState value, $Res Function(_GameSpinState) _then) = __$GameSpinStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
bool isSpinning, Option<Either<GameFailure, SpinResult>> failureOrResultOption
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$GameSpinStateCopyWithImpl<$Res>
|
||||
implements _$GameSpinStateCopyWith<$Res> {
|
||||
__$GameSpinStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _GameSpinState _self;
|
||||
final $Res Function(_GameSpinState) _then;
|
||||
|
||||
/// Create a copy of GameSpinState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? isSpinning = null,Object? failureOrResultOption = null,}) {
|
||||
return _then(_GameSpinState(
|
||||
isSpinning: null == isSpinning ? _self.isSpinning : isSpinning // ignore: cast_nullable_to_non_nullable
|
||||
as bool,failureOrResultOption: null == failureOrResultOption ? _self.failureOrResultOption : failureOrResultOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<GameFailure, SpinResult>>,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,6 @@
|
||||
part of 'game_spin_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class GameSpinEvent with _$GameSpinEvent {
|
||||
const factory GameSpinEvent.spun(String gameId) = _Spun;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
part of 'game_spin_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class GameSpinState with _$GameSpinState {
|
||||
const factory GameSpinState({
|
||||
@Default(false) bool isSpinning,
|
||||
required Option<Either<GameFailure, SpinResult>> failureOrResultOption,
|
||||
}) = _GameSpinState;
|
||||
|
||||
factory GameSpinState.initial() =>
|
||||
GameSpinState(failureOrResultOption: none());
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'order_detail_loader_event.dart';
|
||||
part 'order_detail_loader_state.dart';
|
||||
part 'order_detail_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class OrderDetailLoaderBloc
|
||||
extends Bloc<OrderDetailLoaderEvent, OrderDetailLoaderState> {
|
||||
final IOrderRepository _repository;
|
||||
|
||||
OrderDetailLoaderBloc(this._repository)
|
||||
: super(OrderDetailLoaderState.initial()) {
|
||||
on<OrderDetailLoaderEvent>(_onOrderDetailLoaderEvent);
|
||||
}
|
||||
|
||||
Future<void> _onOrderDetailLoaderEvent(
|
||||
OrderDetailLoaderEvent event,
|
||||
Emitter<OrderDetailLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
fetched: (e) async {
|
||||
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||
|
||||
final result = await _repository.getOrderDetail(e.orderId);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(detail) => state.copyWith(detailOption: some(detail)),
|
||||
)
|
||||
.copyWith(isFetching: false),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,549 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'order_detail_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$OrderDetailLoaderEvent {
|
||||
|
||||
String get orderId;
|
||||
/// Create a copy of OrderDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$OrderDetailLoaderEventCopyWith<OrderDetailLoaderEvent> get copyWith => _$OrderDetailLoaderEventCopyWithImpl<OrderDetailLoaderEvent>(this as OrderDetailLoaderEvent, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as OrderDetailLoaderEvent;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is OrderDetailLoaderEvent&&(identical(other.orderId, _this.orderId) || other.orderId == _this.orderId));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as OrderDetailLoaderEvent;
|
||||
return Object.hash(runtimeType,_this.orderId);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as OrderDetailLoaderEvent;
|
||||
return 'OrderDetailLoaderEvent(orderId: ${_this.orderId})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $OrderDetailLoaderEventCopyWith<$Res> {
|
||||
factory $OrderDetailLoaderEventCopyWith(OrderDetailLoaderEvent value, $Res Function(OrderDetailLoaderEvent) _then) = _$OrderDetailLoaderEventCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String orderId
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$OrderDetailLoaderEventCopyWithImpl<$Res>
|
||||
implements $OrderDetailLoaderEventCopyWith<$Res> {
|
||||
_$OrderDetailLoaderEventCopyWithImpl(this._self, this._then);
|
||||
|
||||
final OrderDetailLoaderEvent _self;
|
||||
final $Res Function(OrderDetailLoaderEvent) _then;
|
||||
|
||||
/// Create a copy of OrderDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? orderId = null,}) {
|
||||
return _then(OrderDetailLoaderEvent.fetched(
|
||||
null == orderId ? _self.orderId : orderId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [OrderDetailLoaderEvent].
|
||||
extension OrderDetailLoaderEventPatterns on OrderDetailLoaderEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Fetched value)? fetched,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Fetched value) fetched,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched():
|
||||
return fetched(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Fetched value)? fetched,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String orderId)? fetched,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that.orderId);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String orderId) fetched,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched():
|
||||
return fetched(_that.orderId);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String orderId)? fetched,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that.orderId);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Fetched implements OrderDetailLoaderEvent {
|
||||
const _Fetched(this.orderId);
|
||||
|
||||
|
||||
@override final String orderId;
|
||||
|
||||
/// Create a copy of OrderDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$FetchedCopyWith<_Fetched> get copyWith => __$FetchedCopyWithImpl<_Fetched>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Fetched&&(identical(other.orderId, orderId) || other.orderId == orderId));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,orderId);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderDetailLoaderEvent.fetched(orderId: $orderId)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$FetchedCopyWith<$Res> implements $OrderDetailLoaderEventCopyWith<$Res> {
|
||||
factory _$FetchedCopyWith(_Fetched value, $Res Function(_Fetched) _then) = __$FetchedCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String orderId
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$FetchedCopyWithImpl<$Res>
|
||||
implements _$FetchedCopyWith<$Res> {
|
||||
__$FetchedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _Fetched _self;
|
||||
final $Res Function(_Fetched) _then;
|
||||
|
||||
/// Create a copy of OrderDetailLoaderEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? orderId = null,}) {
|
||||
return _then(_Fetched(
|
||||
null == orderId ? _self.orderId : orderId // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$OrderDetailLoaderState {
|
||||
|
||||
Option<CustomerOrderDetail> get detailOption; Option<WalletFailure> get failureOption; bool get isFetching;
|
||||
/// Create a copy of OrderDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$OrderDetailLoaderStateCopyWith<OrderDetailLoaderState> get copyWith => _$OrderDetailLoaderStateCopyWithImpl<OrderDetailLoaderState>(this as OrderDetailLoaderState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as OrderDetailLoaderState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is OrderDetailLoaderState&&(identical(other.detailOption, _this.detailOption) || other.detailOption == _this.detailOption)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isFetching, _this.isFetching) || other.isFetching == _this.isFetching));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as OrderDetailLoaderState;
|
||||
return Object.hash(runtimeType,_this.detailOption,_this.failureOption,_this.isFetching);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as OrderDetailLoaderState;
|
||||
return 'OrderDetailLoaderState(detailOption: ${_this.detailOption}, failureOption: ${_this.failureOption}, isFetching: ${_this.isFetching})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $OrderDetailLoaderStateCopyWith<$Res> {
|
||||
factory $OrderDetailLoaderStateCopyWith(OrderDetailLoaderState value, $Res Function(OrderDetailLoaderState) _then) = _$OrderDetailLoaderStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$OrderDetailLoaderStateCopyWithImpl<$Res>
|
||||
implements $OrderDetailLoaderStateCopyWith<$Res> {
|
||||
_$OrderDetailLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final OrderDetailLoaderState _self;
|
||||
final $Res Function(OrderDetailLoaderState) _then;
|
||||
|
||||
/// Create a copy of OrderDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? detailOption = null,Object? failureOption = null,Object? isFetching = null,}) {
|
||||
return _then(OrderDetailLoaderState(
|
||||
detailOption: null == detailOption ? _self.detailOption : detailOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<CustomerOrderDetail>,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [OrderDetailLoaderState].
|
||||
extension OrderDetailLoaderStatePatterns on OrderDetailLoaderState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _OrderDetailLoaderState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderDetailLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _OrderDetailLoaderState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderDetailLoaderState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _OrderDetailLoaderState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderDetailLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderDetailLoaderState() when $default != null:
|
||||
return $default(_that.detailOption,_that.failureOption,_that.isFetching);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderDetailLoaderState():
|
||||
return $default(_that.detailOption,_that.failureOption,_that.isFetching);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderDetailLoaderState() when $default != null:
|
||||
return $default(_that.detailOption,_that.failureOption,_that.isFetching);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _OrderDetailLoaderState implements OrderDetailLoaderState {
|
||||
const _OrderDetailLoaderState({required this.detailOption, required this.failureOption, this.isFetching = false});
|
||||
|
||||
|
||||
@override final Option<CustomerOrderDetail> detailOption;
|
||||
@override final Option<WalletFailure> failureOption;
|
||||
@override@JsonKey() final bool isFetching;
|
||||
|
||||
/// Create a copy of OrderDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$OrderDetailLoaderStateCopyWith<_OrderDetailLoaderState> get copyWith => __$OrderDetailLoaderStateCopyWithImpl<_OrderDetailLoaderState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _OrderDetailLoaderState&&(identical(other.detailOption, detailOption) || other.detailOption == detailOption)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isFetching, isFetching) || other.isFetching == isFetching));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,detailOption,failureOption,isFetching);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderDetailLoaderState(detailOption: $detailOption, failureOption: $failureOption, isFetching: $isFetching)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$OrderDetailLoaderStateCopyWith<$Res> implements $OrderDetailLoaderStateCopyWith<$Res> {
|
||||
factory _$OrderDetailLoaderStateCopyWith(_OrderDetailLoaderState value, $Res Function(_OrderDetailLoaderState) _then) = __$OrderDetailLoaderStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$OrderDetailLoaderStateCopyWithImpl<$Res>
|
||||
implements _$OrderDetailLoaderStateCopyWith<$Res> {
|
||||
__$OrderDetailLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _OrderDetailLoaderState _self;
|
||||
final $Res Function(_OrderDetailLoaderState) _then;
|
||||
|
||||
/// Create a copy of OrderDetailLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? detailOption = null,Object? failureOption = null,Object? isFetching = null,}) {
|
||||
return _then(_OrderDetailLoaderState(
|
||||
detailOption: null == detailOption ? _self.detailOption : detailOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<CustomerOrderDetail>,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,6 @@
|
||||
part of 'order_detail_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class OrderDetailLoaderEvent with _$OrderDetailLoaderEvent {
|
||||
const factory OrderDetailLoaderEvent.fetched(String orderId) = _Fetched;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
part of 'order_detail_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class OrderDetailLoaderState with _$OrderDetailLoaderState {
|
||||
const factory OrderDetailLoaderState({
|
||||
required Option<CustomerOrderDetail> detailOption,
|
||||
required Option<WalletFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
}) = _OrderDetailLoaderState;
|
||||
|
||||
factory OrderDetailLoaderState.initial() =>
|
||||
OrderDetailLoaderState(detailOption: none(), failureOption: none());
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'order_loader_event.dart';
|
||||
part 'order_loader_state.dart';
|
||||
part 'order_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class OrderLoaderBloc extends Bloc<OrderLoaderEvent, OrderLoaderState> {
|
||||
final IOrderRepository _repository;
|
||||
|
||||
static const int _limit = 20;
|
||||
|
||||
OrderLoaderBloc(this._repository) : super(OrderLoaderState.initial()) {
|
||||
on<OrderLoaderEvent>(_onOrderLoaderEvent);
|
||||
}
|
||||
|
||||
Future<void> _onOrderLoaderEvent(
|
||||
OrderLoaderEvent event,
|
||||
Emitter<OrderLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
refreshed: (e) async {
|
||||
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||
|
||||
final result = await _repository.getOrders(page: 1, limit: _limit);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(page) => state.copyWith(
|
||||
items: page.items,
|
||||
page: page.page,
|
||||
totalPages: page.totalPages,
|
||||
hasLoaded: true,
|
||||
),
|
||||
)
|
||||
.copyWith(isFetching: false),
|
||||
);
|
||||
},
|
||||
loadedMore: (e) async {
|
||||
if (state.isFetching || state.isLoadingMore || !state.hasMore) return;
|
||||
emit(state.copyWith(isLoadingMore: true, failureOption: none()));
|
||||
|
||||
final result = await _repository.getOrders(
|
||||
page: state.page + 1,
|
||||
limit: _limit,
|
||||
);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(page) => state.copyWith(
|
||||
items: [...state.items, ...page.items],
|
||||
page: page.page,
|
||||
totalPages: page.totalPages,
|
||||
),
|
||||
)
|
||||
.copyWith(isLoadingMore: false),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,533 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'order_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$OrderLoaderEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is OrderLoaderEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderLoaderEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $OrderLoaderEventCopyWith<$Res> {
|
||||
$OrderLoaderEventCopyWith(OrderLoaderEvent _, $Res Function(OrderLoaderEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [OrderLoaderEvent].
|
||||
extension OrderLoaderEventPatterns on OrderLoaderEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Refreshed value)? refreshed,TResult Function( _LoadedMore value)? loadedMore,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Refreshed() when refreshed != null:
|
||||
return refreshed(_that);case _LoadedMore() when loadedMore != null:
|
||||
return loadedMore(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Refreshed value) refreshed,required TResult Function( _LoadedMore value) loadedMore,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Refreshed():
|
||||
return refreshed(_that);case _LoadedMore():
|
||||
return loadedMore(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Refreshed value)? refreshed,TResult? Function( _LoadedMore value)? loadedMore,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Refreshed() when refreshed != null:
|
||||
return refreshed(_that);case _LoadedMore() when loadedMore != null:
|
||||
return loadedMore(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()? refreshed,TResult Function()? loadedMore,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Refreshed() when refreshed != null:
|
||||
return refreshed();case _LoadedMore() when loadedMore != null:
|
||||
return loadedMore();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function() refreshed,required TResult Function() loadedMore,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Refreshed():
|
||||
return refreshed();case _LoadedMore():
|
||||
return loadedMore();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? refreshed,TResult? Function()? loadedMore,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Refreshed() when refreshed != null:
|
||||
return refreshed();case _LoadedMore() when loadedMore != null:
|
||||
return loadedMore();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Refreshed implements OrderLoaderEvent {
|
||||
const _Refreshed();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Refreshed);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderLoaderEvent.refreshed()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _LoadedMore implements OrderLoaderEvent {
|
||||
const _LoadedMore();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _LoadedMore);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderLoaderEvent.loadedMore()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$OrderLoaderState {
|
||||
|
||||
List<CustomerOrder> get items; int get page; int get totalPages; Option<WalletFailure> get failureOption; bool get isFetching; bool get isLoadingMore; bool get hasLoaded;
|
||||
/// Create a copy of OrderLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$OrderLoaderStateCopyWith<OrderLoaderState> get copyWith => _$OrderLoaderStateCopyWithImpl<OrderLoaderState>(this as OrderLoaderState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as OrderLoaderState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is OrderLoaderState&&const DeepCollectionEquality().equals(other.items, _this.items)&&(identical(other.page, _this.page) || other.page == _this.page)&&(identical(other.totalPages, _this.totalPages) || other.totalPages == _this.totalPages)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isFetching, _this.isFetching) || other.isFetching == _this.isFetching)&&(identical(other.isLoadingMore, _this.isLoadingMore) || other.isLoadingMore == _this.isLoadingMore)&&(identical(other.hasLoaded, _this.hasLoaded) || other.hasLoaded == _this.hasLoaded));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as OrderLoaderState;
|
||||
return Object.hash(runtimeType,const DeepCollectionEquality().hash(_this.items),_this.page,_this.totalPages,_this.failureOption,_this.isFetching,_this.isLoadingMore,_this.hasLoaded);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as OrderLoaderState;
|
||||
return 'OrderLoaderState(items: ${_this.items}, page: ${_this.page}, totalPages: ${_this.totalPages}, failureOption: ${_this.failureOption}, isFetching: ${_this.isFetching}, isLoadingMore: ${_this.isLoadingMore}, hasLoaded: ${_this.hasLoaded})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $OrderLoaderStateCopyWith<$Res> {
|
||||
factory $OrderLoaderStateCopyWith(OrderLoaderState value, $Res Function(OrderLoaderState) _then) = _$OrderLoaderStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
List<CustomerOrder> items, int page, int totalPages, Option<WalletFailure> failureOption, bool isFetching, bool isLoadingMore, bool hasLoaded
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$OrderLoaderStateCopyWithImpl<$Res>
|
||||
implements $OrderLoaderStateCopyWith<$Res> {
|
||||
_$OrderLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final OrderLoaderState _self;
|
||||
final $Res Function(OrderLoaderState) _then;
|
||||
|
||||
/// Create a copy of OrderLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? items = null,Object? page = null,Object? totalPages = null,Object? failureOption = null,Object? isFetching = null,Object? isLoadingMore = null,Object? hasLoaded = null,}) {
|
||||
return _then(OrderLoaderState(
|
||||
items: null == items ? _self.items : items // ignore: cast_nullable_to_non_nullable
|
||||
as List<CustomerOrder>,page: null == page ? _self.page : page // ignore: cast_nullable_to_non_nullable
|
||||
as int,totalPages: null == totalPages ? _self.totalPages : totalPages // ignore: cast_nullable_to_non_nullable
|
||||
as int,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,isLoadingMore: null == isLoadingMore ? _self.isLoadingMore : isLoadingMore // ignore: cast_nullable_to_non_nullable
|
||||
as bool,hasLoaded: null == hasLoaded ? _self.hasLoaded : hasLoaded // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [OrderLoaderState].
|
||||
extension OrderLoaderStatePatterns on OrderLoaderState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _OrderLoaderState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _OrderLoaderState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderLoaderState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _OrderLoaderState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( List<CustomerOrder> items, int page, int totalPages, Option<WalletFailure> failureOption, bool isFetching, bool isLoadingMore, bool hasLoaded)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderLoaderState() when $default != null:
|
||||
return $default(_that.items,_that.page,_that.totalPages,_that.failureOption,_that.isFetching,_that.isLoadingMore,_that.hasLoaded);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( List<CustomerOrder> items, int page, int totalPages, Option<WalletFailure> failureOption, bool isFetching, bool isLoadingMore, bool hasLoaded) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderLoaderState():
|
||||
return $default(_that.items,_that.page,_that.totalPages,_that.failureOption,_that.isFetching,_that.isLoadingMore,_that.hasLoaded);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( List<CustomerOrder> items, int page, int totalPages, Option<WalletFailure> failureOption, bool isFetching, bool isLoadingMore, bool hasLoaded)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OrderLoaderState() when $default != null:
|
||||
return $default(_that.items,_that.page,_that.totalPages,_that.failureOption,_that.isFetching,_that.isLoadingMore,_that.hasLoaded);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _OrderLoaderState extends OrderLoaderState {
|
||||
const _OrderLoaderState({required List<CustomerOrder> items, required this.page, required this.totalPages, required this.failureOption, this.isFetching = false, this.isLoadingMore = false, this.hasLoaded = false}): _items = items,super._();
|
||||
|
||||
|
||||
final List<CustomerOrder> _items;
|
||||
@override List<CustomerOrder> get items {
|
||||
if (_items is EqualUnmodifiableListView) return _items;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(_items);
|
||||
}
|
||||
|
||||
@override final int page;
|
||||
@override final int totalPages;
|
||||
@override final Option<WalletFailure> failureOption;
|
||||
@override@JsonKey() final bool isFetching;
|
||||
@override@JsonKey() final bool isLoadingMore;
|
||||
@override@JsonKey() final bool hasLoaded;
|
||||
|
||||
/// Create a copy of OrderLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$OrderLoaderStateCopyWith<_OrderLoaderState> get copyWith => __$OrderLoaderStateCopyWithImpl<_OrderLoaderState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _OrderLoaderState&&const DeepCollectionEquality().equals(other.items, _items)&&(identical(other.page, page) || other.page == page)&&(identical(other.totalPages, totalPages) || other.totalPages == totalPages)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isFetching, isFetching) || other.isFetching == isFetching)&&(identical(other.isLoadingMore, isLoadingMore) || other.isLoadingMore == isLoadingMore)&&(identical(other.hasLoaded, hasLoaded) || other.hasLoaded == hasLoaded));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,const DeepCollectionEquality().hash(_items),page,totalPages,failureOption,isFetching,isLoadingMore,hasLoaded);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OrderLoaderState(items: $items, page: $page, totalPages: $totalPages, failureOption: $failureOption, isFetching: $isFetching, isLoadingMore: $isLoadingMore, hasLoaded: $hasLoaded)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$OrderLoaderStateCopyWith<$Res> implements $OrderLoaderStateCopyWith<$Res> {
|
||||
factory _$OrderLoaderStateCopyWith(_OrderLoaderState value, $Res Function(_OrderLoaderState) _then) = __$OrderLoaderStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
List<CustomerOrder> items, int page, int totalPages, Option<WalletFailure> failureOption, bool isFetching, bool isLoadingMore, bool hasLoaded
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$OrderLoaderStateCopyWithImpl<$Res>
|
||||
implements _$OrderLoaderStateCopyWith<$Res> {
|
||||
__$OrderLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _OrderLoaderState _self;
|
||||
final $Res Function(_OrderLoaderState) _then;
|
||||
|
||||
/// Create a copy of OrderLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? items = null,Object? page = null,Object? totalPages = null,Object? failureOption = null,Object? isFetching = null,Object? isLoadingMore = null,Object? hasLoaded = null,}) {
|
||||
return _then(_OrderLoaderState(
|
||||
items: null == items ? _self._items : items // ignore: cast_nullable_to_non_nullable
|
||||
as List<CustomerOrder>,page: null == page ? _self.page : page // ignore: cast_nullable_to_non_nullable
|
||||
as int,totalPages: null == totalPages ? _self.totalPages : totalPages // ignore: cast_nullable_to_non_nullable
|
||||
as int,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,isLoadingMore: null == isLoadingMore ? _self.isLoadingMore : isLoadingMore // ignore: cast_nullable_to_non_nullable
|
||||
as bool,hasLoaded: null == hasLoaded ? _self.hasLoaded : hasLoaded // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,9 @@
|
||||
part of 'order_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class OrderLoaderEvent with _$OrderLoaderEvent {
|
||||
/// Muat ulang dari halaman pertama.
|
||||
const factory OrderLoaderEvent.refreshed() = _Refreshed;
|
||||
|
||||
const factory OrderLoaderEvent.loadedMore() = _LoadedMore;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
part of 'order_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class OrderLoaderState with _$OrderLoaderState {
|
||||
const OrderLoaderState._();
|
||||
|
||||
const factory OrderLoaderState({
|
||||
required List<CustomerOrder> items,
|
||||
required int page,
|
||||
required int totalPages,
|
||||
required Option<WalletFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
@Default(false) bool isLoadingMore,
|
||||
@Default(false) bool hasLoaded,
|
||||
}) = _OrderLoaderState;
|
||||
|
||||
factory OrderLoaderState.initial() => OrderLoaderState(
|
||||
items: const [],
|
||||
page: 0,
|
||||
totalPages: 0,
|
||||
failureOption: none(),
|
||||
);
|
||||
|
||||
bool get hasMore => page < totalPages;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'outlet_loader_event.dart';
|
||||
part 'outlet_loader_state.dart';
|
||||
part 'outlet_loader_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class OutletLoaderBloc extends Bloc<OutletLoaderEvent, OutletLoaderState> {
|
||||
final IOutletRepository _repository;
|
||||
|
||||
OutletLoaderBloc(this._repository) : super(OutletLoaderState.initial()) {
|
||||
on<OutletLoaderEvent>(_onOutletLoaderEvent);
|
||||
}
|
||||
|
||||
Future<void> _onOutletLoaderEvent(
|
||||
OutletLoaderEvent event,
|
||||
Emitter<OutletLoaderState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
fetched: (e) async {
|
||||
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||
|
||||
final result = await _repository.getOutlets();
|
||||
|
||||
final data = result.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(outlets) => state.copyWith(outlets: outlets, hasLoaded: true),
|
||||
);
|
||||
|
||||
emit(data.copyWith(isFetching: false));
|
||||
},
|
||||
cleared: (e) async => emit(OutletLoaderState.initial()),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,524 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'outlet_loader_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$OutletLoaderEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is OutletLoaderEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OutletLoaderEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $OutletLoaderEventCopyWith<$Res> {
|
||||
$OutletLoaderEventCopyWith(OutletLoaderEvent _, $Res Function(OutletLoaderEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [OutletLoaderEvent].
|
||||
extension OutletLoaderEventPatterns on OutletLoaderEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Fetched value)? fetched,TResult Function( _Cleared value)? cleared,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that);case _Cleared() when cleared != null:
|
||||
return cleared(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Fetched value) fetched,required TResult Function( _Cleared value) cleared,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched():
|
||||
return fetched(_that);case _Cleared():
|
||||
return cleared(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Fetched value)? fetched,TResult? Function( _Cleared value)? cleared,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched(_that);case _Cleared() when cleared != null:
|
||||
return cleared(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function()? fetched,TResult Function()? cleared,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched();case _Cleared() when cleared != null:
|
||||
return cleared();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function() fetched,required TResult Function() cleared,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched():
|
||||
return fetched();case _Cleared():
|
||||
return cleared();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched,TResult? Function()? cleared,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Fetched() when fetched != null:
|
||||
return fetched();case _Cleared() when cleared != null:
|
||||
return cleared();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Fetched implements OutletLoaderEvent {
|
||||
const _Fetched();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Fetched);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OutletLoaderEvent.fetched()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Cleared implements OutletLoaderEvent {
|
||||
const _Cleared();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Cleared);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OutletLoaderEvent.cleared()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$OutletLoaderState {
|
||||
|
||||
List<Outlet> get outlets; Option<WalletFailure> get failureOption; bool get isFetching; bool get hasLoaded;
|
||||
/// Create a copy of OutletLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$OutletLoaderStateCopyWith<OutletLoaderState> get copyWith => _$OutletLoaderStateCopyWithImpl<OutletLoaderState>(this as OutletLoaderState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as OutletLoaderState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is OutletLoaderState&&const DeepCollectionEquality().equals(other.outlets, _this.outlets)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isFetching, _this.isFetching) || other.isFetching == _this.isFetching)&&(identical(other.hasLoaded, _this.hasLoaded) || other.hasLoaded == _this.hasLoaded));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as OutletLoaderState;
|
||||
return Object.hash(runtimeType,const DeepCollectionEquality().hash(_this.outlets),_this.failureOption,_this.isFetching,_this.hasLoaded);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as OutletLoaderState;
|
||||
return 'OutletLoaderState(outlets: ${_this.outlets}, failureOption: ${_this.failureOption}, isFetching: ${_this.isFetching}, hasLoaded: ${_this.hasLoaded})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $OutletLoaderStateCopyWith<$Res> {
|
||||
factory $OutletLoaderStateCopyWith(OutletLoaderState value, $Res Function(OutletLoaderState) _then) = _$OutletLoaderStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
List<Outlet> outlets, Option<WalletFailure> failureOption, bool isFetching, bool hasLoaded
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$OutletLoaderStateCopyWithImpl<$Res>
|
||||
implements $OutletLoaderStateCopyWith<$Res> {
|
||||
_$OutletLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final OutletLoaderState _self;
|
||||
final $Res Function(OutletLoaderState) _then;
|
||||
|
||||
/// Create a copy of OutletLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? outlets = null,Object? failureOption = null,Object? isFetching = null,Object? hasLoaded = null,}) {
|
||||
return _then(OutletLoaderState(
|
||||
outlets: null == outlets ? _self.outlets : outlets // ignore: cast_nullable_to_non_nullable
|
||||
as List<Outlet>,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,hasLoaded: null == hasLoaded ? _self.hasLoaded : hasLoaded // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [OutletLoaderState].
|
||||
extension OutletLoaderStatePatterns on OutletLoaderState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _OutletLoaderState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OutletLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _OutletLoaderState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OutletLoaderState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _OutletLoaderState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OutletLoaderState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( List<Outlet> outlets, Option<WalletFailure> failureOption, bool isFetching, bool hasLoaded)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OutletLoaderState() when $default != null:
|
||||
return $default(_that.outlets,_that.failureOption,_that.isFetching,_that.hasLoaded);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( List<Outlet> outlets, Option<WalletFailure> failureOption, bool isFetching, bool hasLoaded) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OutletLoaderState():
|
||||
return $default(_that.outlets,_that.failureOption,_that.isFetching,_that.hasLoaded);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( List<Outlet> outlets, Option<WalletFailure> failureOption, bool isFetching, bool hasLoaded)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OutletLoaderState() when $default != null:
|
||||
return $default(_that.outlets,_that.failureOption,_that.isFetching,_that.hasLoaded);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _OutletLoaderState implements OutletLoaderState {
|
||||
const _OutletLoaderState({required List<Outlet> outlets, required this.failureOption, this.isFetching = false, this.hasLoaded = false}): _outlets = outlets;
|
||||
|
||||
|
||||
final List<Outlet> _outlets;
|
||||
@override List<Outlet> get outlets {
|
||||
if (_outlets is EqualUnmodifiableListView) return _outlets;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(_outlets);
|
||||
}
|
||||
|
||||
@override final Option<WalletFailure> failureOption;
|
||||
@override@JsonKey() final bool isFetching;
|
||||
@override@JsonKey() final bool hasLoaded;
|
||||
|
||||
/// Create a copy of OutletLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$OutletLoaderStateCopyWith<_OutletLoaderState> get copyWith => __$OutletLoaderStateCopyWithImpl<_OutletLoaderState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _OutletLoaderState&&const DeepCollectionEquality().equals(other.outlets, _outlets)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isFetching, isFetching) || other.isFetching == isFetching)&&(identical(other.hasLoaded, hasLoaded) || other.hasLoaded == hasLoaded));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,const DeepCollectionEquality().hash(_outlets),failureOption,isFetching,hasLoaded);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'OutletLoaderState(outlets: $outlets, failureOption: $failureOption, isFetching: $isFetching, hasLoaded: $hasLoaded)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$OutletLoaderStateCopyWith<$Res> implements $OutletLoaderStateCopyWith<$Res> {
|
||||
factory _$OutletLoaderStateCopyWith(_OutletLoaderState value, $Res Function(_OutletLoaderState) _then) = __$OutletLoaderStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
List<Outlet> outlets, Option<WalletFailure> failureOption, bool isFetching, bool hasLoaded
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$OutletLoaderStateCopyWithImpl<$Res>
|
||||
implements _$OutletLoaderStateCopyWith<$Res> {
|
||||
__$OutletLoaderStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _OutletLoaderState _self;
|
||||
final $Res Function(_OutletLoaderState) _then;
|
||||
|
||||
/// Create a copy of OutletLoaderState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? outlets = null,Object? failureOption = null,Object? isFetching = null,Object? hasLoaded = null,}) {
|
||||
return _then(_OutletLoaderState(
|
||||
outlets: null == outlets ? _self._outlets : outlets // ignore: cast_nullable_to_non_nullable
|
||||
as List<Outlet>,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
|
||||
as bool,hasLoaded: null == hasLoaded ? _self.hasLoaded : hasLoaded // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,9 @@
|
||||
part of 'outlet_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class OutletLoaderEvent with _$OutletLoaderEvent {
|
||||
const factory OutletLoaderEvent.fetched() = _Fetched;
|
||||
|
||||
/// Dipanggil saat logout supaya outlet organisasi akun sebelumnya hilang.
|
||||
const factory OutletLoaderEvent.cleared() = _Cleared;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
part of 'outlet_loader_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class OutletLoaderState with _$OutletLoaderState {
|
||||
const factory OutletLoaderState({
|
||||
required List<Outlet> outlets,
|
||||
required Option<WalletFailure> failureOption,
|
||||
@Default(false) bool isFetching,
|
||||
@Default(false) bool hasLoaded,
|
||||
}) = _OutletLoaderState;
|
||||
|
||||
factory OutletLoaderState.initial() =>
|
||||
OutletLoaderState(outlets: const [], failureOption: none());
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'pin_change_form_event.dart';
|
||||
part 'pin_change_form_state.dart';
|
||||
part 'pin_change_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class PinChangeFormBloc extends Bloc<PinChangeFormEvent, PinChangeFormState> {
|
||||
final IPinRepository _repository;
|
||||
|
||||
PinChangeFormBloc(this._repository) : super(PinChangeFormState.initial()) {
|
||||
on<PinChangeFormEvent>(_onPinChangeFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onPinChangeFormEvent(
|
||||
PinChangeFormEvent event,
|
||||
Emitter<PinChangeFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
submitted: (e) async {
|
||||
emit(
|
||||
state.copyWith(isSubmitting: true, failureOrSuccessOption: none()),
|
||||
);
|
||||
|
||||
final result = await _repository.change(
|
||||
oldPin: e.oldPin,
|
||||
pin: e.pin,
|
||||
confirmPin: e.confirmPin,
|
||||
);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrSuccessOption: optionOf(result),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,552 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'pin_change_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$PinChangeFormEvent {
|
||||
|
||||
String get oldPin; String get pin; String get confirmPin;
|
||||
/// Create a copy of PinChangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$PinChangeFormEventCopyWith<PinChangeFormEvent> get copyWith => _$PinChangeFormEventCopyWithImpl<PinChangeFormEvent>(this as PinChangeFormEvent, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as PinChangeFormEvent;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is PinChangeFormEvent&&(identical(other.oldPin, _this.oldPin) || other.oldPin == _this.oldPin)&&(identical(other.pin, _this.pin) || other.pin == _this.pin)&&(identical(other.confirmPin, _this.confirmPin) || other.confirmPin == _this.confirmPin));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as PinChangeFormEvent;
|
||||
return Object.hash(runtimeType,_this.oldPin,_this.pin,_this.confirmPin);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as PinChangeFormEvent;
|
||||
return 'PinChangeFormEvent(oldPin: ${_this.oldPin}, pin: ${_this.pin}, confirmPin: ${_this.confirmPin})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $PinChangeFormEventCopyWith<$Res> {
|
||||
factory $PinChangeFormEventCopyWith(PinChangeFormEvent value, $Res Function(PinChangeFormEvent) _then) = _$PinChangeFormEventCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String oldPin, String pin, String confirmPin
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$PinChangeFormEventCopyWithImpl<$Res>
|
||||
implements $PinChangeFormEventCopyWith<$Res> {
|
||||
_$PinChangeFormEventCopyWithImpl(this._self, this._then);
|
||||
|
||||
final PinChangeFormEvent _self;
|
||||
final $Res Function(PinChangeFormEvent) _then;
|
||||
|
||||
/// Create a copy of PinChangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? oldPin = null,Object? pin = null,Object? confirmPin = null,}) {
|
||||
return _then(PinChangeFormEvent.submitted(
|
||||
oldPin: null == oldPin ? _self.oldPin : oldPin // ignore: cast_nullable_to_non_nullable
|
||||
as String,pin: null == pin ? _self.pin : pin // ignore: cast_nullable_to_non_nullable
|
||||
as String,confirmPin: null == confirmPin ? _self.confirmPin : confirmPin // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [PinChangeFormEvent].
|
||||
extension PinChangeFormEventPatterns on PinChangeFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String oldPin, String pin, String confirmPin)? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that.oldPin,_that.pin,_that.confirmPin);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String oldPin, String pin, String confirmPin) submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted():
|
||||
return submitted(_that.oldPin,_that.pin,_that.confirmPin);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String oldPin, String pin, String confirmPin)? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that.oldPin,_that.pin,_that.confirmPin);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements PinChangeFormEvent {
|
||||
const _Submitted({required this.oldPin, required this.pin, required this.confirmPin});
|
||||
|
||||
|
||||
@override final String oldPin;
|
||||
@override final String pin;
|
||||
@override final String confirmPin;
|
||||
|
||||
/// Create a copy of PinChangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SubmittedCopyWith<_Submitted> get copyWith => __$SubmittedCopyWithImpl<_Submitted>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted&&(identical(other.oldPin, oldPin) || other.oldPin == oldPin)&&(identical(other.pin, pin) || other.pin == pin)&&(identical(other.confirmPin, confirmPin) || other.confirmPin == confirmPin));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,oldPin,pin,confirmPin);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PinChangeFormEvent.submitted(oldPin: $oldPin, pin: $pin, confirmPin: $confirmPin)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SubmittedCopyWith<$Res> implements $PinChangeFormEventCopyWith<$Res> {
|
||||
factory _$SubmittedCopyWith(_Submitted value, $Res Function(_Submitted) _then) = __$SubmittedCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String oldPin, String pin, String confirmPin
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SubmittedCopyWithImpl<$Res>
|
||||
implements _$SubmittedCopyWith<$Res> {
|
||||
__$SubmittedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _Submitted _self;
|
||||
final $Res Function(_Submitted) _then;
|
||||
|
||||
/// Create a copy of PinChangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? oldPin = null,Object? pin = null,Object? confirmPin = null,}) {
|
||||
return _then(_Submitted(
|
||||
oldPin: null == oldPin ? _self.oldPin : oldPin // ignore: cast_nullable_to_non_nullable
|
||||
as String,pin: null == pin ? _self.pin : pin // ignore: cast_nullable_to_non_nullable
|
||||
as String,confirmPin: null == confirmPin ? _self.confirmPin : confirmPin // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$PinChangeFormState {
|
||||
|
||||
bool get isSubmitting; Option<Either<WalletFailure, Unit>> get failureOrSuccessOption;
|
||||
/// Create a copy of PinChangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$PinChangeFormStateCopyWith<PinChangeFormState> get copyWith => _$PinChangeFormStateCopyWithImpl<PinChangeFormState>(this as PinChangeFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as PinChangeFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is PinChangeFormState&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.failureOrSuccessOption, _this.failureOrSuccessOption) || other.failureOrSuccessOption == _this.failureOrSuccessOption));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as PinChangeFormState;
|
||||
return Object.hash(runtimeType,_this.isSubmitting,_this.failureOrSuccessOption);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as PinChangeFormState;
|
||||
return 'PinChangeFormState(isSubmitting: ${_this.isSubmitting}, failureOrSuccessOption: ${_this.failureOrSuccessOption})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $PinChangeFormStateCopyWith<$Res> {
|
||||
factory $PinChangeFormStateCopyWith(PinChangeFormState value, $Res Function(PinChangeFormState) _then) = _$PinChangeFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$PinChangeFormStateCopyWithImpl<$Res>
|
||||
implements $PinChangeFormStateCopyWith<$Res> {
|
||||
_$PinChangeFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final PinChangeFormState _self;
|
||||
final $Res Function(PinChangeFormState) _then;
|
||||
|
||||
/// Create a copy of PinChangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? isSubmitting = null,Object? failureOrSuccessOption = null,}) {
|
||||
return _then(PinChangeFormState(
|
||||
isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,failureOrSuccessOption: null == failureOrSuccessOption ? _self.failureOrSuccessOption : failureOrSuccessOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<WalletFailure, Unit>>,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [PinChangeFormState].
|
||||
extension PinChangeFormStatePatterns on PinChangeFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _PinChangeFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PinChangeFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _PinChangeFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PinChangeFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _PinChangeFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PinChangeFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PinChangeFormState() when $default != null:
|
||||
return $default(_that.isSubmitting,_that.failureOrSuccessOption);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PinChangeFormState():
|
||||
return $default(_that.isSubmitting,_that.failureOrSuccessOption);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PinChangeFormState() when $default != null:
|
||||
return $default(_that.isSubmitting,_that.failureOrSuccessOption);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PinChangeFormState implements PinChangeFormState {
|
||||
const _PinChangeFormState({this.isSubmitting = false, required this.failureOrSuccessOption});
|
||||
|
||||
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override final Option<Either<WalletFailure, Unit>> failureOrSuccessOption;
|
||||
|
||||
/// Create a copy of PinChangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PinChangeFormStateCopyWith<_PinChangeFormState> get copyWith => __$PinChangeFormStateCopyWithImpl<_PinChangeFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PinChangeFormState&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.failureOrSuccessOption, failureOrSuccessOption) || other.failureOrSuccessOption == failureOrSuccessOption));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,isSubmitting,failureOrSuccessOption);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PinChangeFormState(isSubmitting: $isSubmitting, failureOrSuccessOption: $failureOrSuccessOption)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PinChangeFormStateCopyWith<$Res> implements $PinChangeFormStateCopyWith<$Res> {
|
||||
factory _$PinChangeFormStateCopyWith(_PinChangeFormState value, $Res Function(_PinChangeFormState) _then) = __$PinChangeFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PinChangeFormStateCopyWithImpl<$Res>
|
||||
implements _$PinChangeFormStateCopyWith<$Res> {
|
||||
__$PinChangeFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PinChangeFormState _self;
|
||||
final $Res Function(_PinChangeFormState) _then;
|
||||
|
||||
/// Create a copy of PinChangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? isSubmitting = null,Object? failureOrSuccessOption = null,}) {
|
||||
return _then(_PinChangeFormState(
|
||||
isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,failureOrSuccessOption: null == failureOrSuccessOption ? _self.failureOrSuccessOption : failureOrSuccessOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<WalletFailure, Unit>>,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,11 @@
|
||||
part of 'pin_change_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class PinChangeFormEvent with _$PinChangeFormEvent {
|
||||
/// PIN hanya diteruskan ke API, tidak disimpan di state.
|
||||
const factory PinChangeFormEvent.submitted({
|
||||
required String oldPin,
|
||||
required String pin,
|
||||
required String confirmPin,
|
||||
}) = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
part of 'pin_change_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class PinChangeFormState with _$PinChangeFormState {
|
||||
const factory PinChangeFormState({
|
||||
@Default(false) bool isSubmitting,
|
||||
required Option<Either<WalletFailure, Unit>> failureOrSuccessOption,
|
||||
}) = _PinChangeFormState;
|
||||
|
||||
factory PinChangeFormState.initial() =>
|
||||
PinChangeFormState(failureOrSuccessOption: none());
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'pin_setup_form_event.dart';
|
||||
part 'pin_setup_form_state.dart';
|
||||
part 'pin_setup_form_bloc.freezed.dart';
|
||||
|
||||
/// Alur buat PIN (`pin_setup`) dan lupa PIN (`pin_reset`) lewat OTP WhatsApp.
|
||||
@injectable
|
||||
class PinSetupFormBloc extends Bloc<PinSetupFormEvent, PinSetupFormState> {
|
||||
final IPinRepository _repository;
|
||||
|
||||
PinSetupFormBloc(this._repository) : super(PinSetupFormState.initial()) {
|
||||
on<PinSetupFormEvent>(_onPinSetupFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onPinSetupFormEvent(
|
||||
PinSetupFormEvent event,
|
||||
Emitter<PinSetupFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
otpRequested: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
purpose: e.purpose,
|
||||
isRequestingOtp: true,
|
||||
otpFailureOption: none(),
|
||||
),
|
||||
);
|
||||
|
||||
final result = await _repository.requestOtp(e.purpose);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(
|
||||
otpFailureOption: optionOf(f),
|
||||
resendAvailableAt: f.maybeMap(
|
||||
tooManyRequests: (value) => DateTime.now().add(
|
||||
Duration(seconds: value.retryAfterSeconds),
|
||||
),
|
||||
orElse: () => state.resendAvailableAt,
|
||||
),
|
||||
),
|
||||
(otp) => state.copyWith(otp: otp),
|
||||
)
|
||||
.copyWith(isRequestingOtp: false),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
final otp = state.otp;
|
||||
if (otp == null) return;
|
||||
|
||||
emit(
|
||||
state.copyWith(isSubmitting: true, failureOrSuccessOption: none()),
|
||||
);
|
||||
|
||||
final Either<WalletFailure, Unit> result =
|
||||
state.purpose == PinOtpPurpose.setup
|
||||
? (await _repository.setup(
|
||||
otpToken: otp.otpToken,
|
||||
otpCode: e.otpCode,
|
||||
pin: e.pin,
|
||||
confirmPin: e.confirmPin,
|
||||
)).map((_) => unit)
|
||||
: await _repository.reset(
|
||||
otpToken: otp.otpToken,
|
||||
otpCode: e.otpCode,
|
||||
pin: e.pin,
|
||||
confirmPin: e.confirmPin,
|
||||
);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: false,
|
||||
failureOrSuccessOption: optionOf(result),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,631 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'pin_setup_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$PinSetupFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is PinSetupFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PinSetupFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $PinSetupFormEventCopyWith<$Res> {
|
||||
$PinSetupFormEventCopyWith(PinSetupFormEvent _, $Res Function(PinSetupFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [PinSetupFormEvent].
|
||||
extension PinSetupFormEventPatterns on PinSetupFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _OtpRequested value)? otpRequested,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OtpRequested() when otpRequested != null:
|
||||
return otpRequested(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _OtpRequested value) otpRequested,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OtpRequested():
|
||||
return otpRequested(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _OtpRequested value)? otpRequested,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _OtpRequested() when otpRequested != null:
|
||||
return otpRequested(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( PinOtpPurpose purpose)? otpRequested,TResult Function( String otpCode, String pin, String confirmPin)? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OtpRequested() when otpRequested != null:
|
||||
return otpRequested(_that.purpose);case _Submitted() when submitted != null:
|
||||
return submitted(_that.otpCode,_that.pin,_that.confirmPin);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( PinOtpPurpose purpose) otpRequested,required TResult Function( String otpCode, String pin, String confirmPin) submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OtpRequested():
|
||||
return otpRequested(_that.purpose);case _Submitted():
|
||||
return submitted(_that.otpCode,_that.pin,_that.confirmPin);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( PinOtpPurpose purpose)? otpRequested,TResult? Function( String otpCode, String pin, String confirmPin)? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _OtpRequested() when otpRequested != null:
|
||||
return otpRequested(_that.purpose);case _Submitted() when submitted != null:
|
||||
return submitted(_that.otpCode,_that.pin,_that.confirmPin);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _OtpRequested implements PinSetupFormEvent {
|
||||
const _OtpRequested(this.purpose);
|
||||
|
||||
|
||||
final PinOtpPurpose purpose;
|
||||
|
||||
/// Create a copy of PinSetupFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$OtpRequestedCopyWith<_OtpRequested> get copyWith => __$OtpRequestedCopyWithImpl<_OtpRequested>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _OtpRequested&&(identical(other.purpose, purpose) || other.purpose == purpose));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,purpose);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PinSetupFormEvent.otpRequested(purpose: $purpose)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$OtpRequestedCopyWith<$Res> implements $PinSetupFormEventCopyWith<$Res> {
|
||||
factory _$OtpRequestedCopyWith(_OtpRequested value, $Res Function(_OtpRequested) _then) = __$OtpRequestedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
PinOtpPurpose purpose
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$OtpRequestedCopyWithImpl<$Res>
|
||||
implements _$OtpRequestedCopyWith<$Res> {
|
||||
__$OtpRequestedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _OtpRequested _self;
|
||||
final $Res Function(_OtpRequested) _then;
|
||||
|
||||
/// Create a copy of PinSetupFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? purpose = null,}) {
|
||||
return _then(_OtpRequested(
|
||||
null == purpose ? _self.purpose : purpose // ignore: cast_nullable_to_non_nullable
|
||||
as PinOtpPurpose,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements PinSetupFormEvent {
|
||||
const _Submitted({required this.otpCode, required this.pin, required this.confirmPin});
|
||||
|
||||
|
||||
final String otpCode;
|
||||
final String pin;
|
||||
final String confirmPin;
|
||||
|
||||
/// Create a copy of PinSetupFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SubmittedCopyWith<_Submitted> get copyWith => __$SubmittedCopyWithImpl<_Submitted>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted&&(identical(other.otpCode, otpCode) || other.otpCode == otpCode)&&(identical(other.pin, pin) || other.pin == pin)&&(identical(other.confirmPin, confirmPin) || other.confirmPin == confirmPin));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,otpCode,pin,confirmPin);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PinSetupFormEvent.submitted(otpCode: $otpCode, pin: $pin, confirmPin: $confirmPin)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SubmittedCopyWith<$Res> implements $PinSetupFormEventCopyWith<$Res> {
|
||||
factory _$SubmittedCopyWith(_Submitted value, $Res Function(_Submitted) _then) = __$SubmittedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String otpCode, String pin, String confirmPin
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SubmittedCopyWithImpl<$Res>
|
||||
implements _$SubmittedCopyWith<$Res> {
|
||||
__$SubmittedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _Submitted _self;
|
||||
final $Res Function(_Submitted) _then;
|
||||
|
||||
/// Create a copy of PinSetupFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? otpCode = null,Object? pin = null,Object? confirmPin = null,}) {
|
||||
return _then(_Submitted(
|
||||
otpCode: null == otpCode ? _self.otpCode : otpCode // ignore: cast_nullable_to_non_nullable
|
||||
as String,pin: null == pin ? _self.pin : pin // ignore: cast_nullable_to_non_nullable
|
||||
as String,confirmPin: null == confirmPin ? _self.confirmPin : confirmPin // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$PinSetupFormState {
|
||||
|
||||
PinOtpPurpose get purpose; PinOtp? get otp; bool get isRequestingOtp; Option<WalletFailure> get otpFailureOption;/// Diisi saat server menjawab `429`; tombol kirim ulang menunggu sampai
|
||||
/// waktu ini.
|
||||
DateTime? get resendAvailableAt; bool get isSubmitting; Option<Either<WalletFailure, Unit>> get failureOrSuccessOption;
|
||||
/// Create a copy of PinSetupFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$PinSetupFormStateCopyWith<PinSetupFormState> get copyWith => _$PinSetupFormStateCopyWithImpl<PinSetupFormState>(this as PinSetupFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as PinSetupFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is PinSetupFormState&&(identical(other.purpose, _this.purpose) || other.purpose == _this.purpose)&&(identical(other.otp, _this.otp) || other.otp == _this.otp)&&(identical(other.isRequestingOtp, _this.isRequestingOtp) || other.isRequestingOtp == _this.isRequestingOtp)&&(identical(other.otpFailureOption, _this.otpFailureOption) || other.otpFailureOption == _this.otpFailureOption)&&(identical(other.resendAvailableAt, _this.resendAvailableAt) || other.resendAvailableAt == _this.resendAvailableAt)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.failureOrSuccessOption, _this.failureOrSuccessOption) || other.failureOrSuccessOption == _this.failureOrSuccessOption));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as PinSetupFormState;
|
||||
return Object.hash(runtimeType,_this.purpose,_this.otp,_this.isRequestingOtp,_this.otpFailureOption,_this.resendAvailableAt,_this.isSubmitting,_this.failureOrSuccessOption);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as PinSetupFormState;
|
||||
return 'PinSetupFormState(purpose: ${_this.purpose}, otp: ${_this.otp}, isRequestingOtp: ${_this.isRequestingOtp}, otpFailureOption: ${_this.otpFailureOption}, resendAvailableAt: ${_this.resendAvailableAt}, isSubmitting: ${_this.isSubmitting}, failureOrSuccessOption: ${_this.failureOrSuccessOption})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $PinSetupFormStateCopyWith<$Res> {
|
||||
factory $PinSetupFormStateCopyWith(PinSetupFormState value, $Res Function(PinSetupFormState) _then) = _$PinSetupFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
PinOtpPurpose purpose, PinOtp? otp, bool isRequestingOtp, Option<WalletFailure> otpFailureOption, DateTime? resendAvailableAt, bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption
|
||||
});
|
||||
|
||||
|
||||
$PinOtpCopyWith<$Res>? get otp;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$PinSetupFormStateCopyWithImpl<$Res>
|
||||
implements $PinSetupFormStateCopyWith<$Res> {
|
||||
_$PinSetupFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final PinSetupFormState _self;
|
||||
final $Res Function(PinSetupFormState) _then;
|
||||
|
||||
/// Create a copy of PinSetupFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? purpose = null,Object? otp = freezed,Object? isRequestingOtp = null,Object? otpFailureOption = null,Object? resendAvailableAt = freezed,Object? isSubmitting = null,Object? failureOrSuccessOption = null,}) {
|
||||
return _then(PinSetupFormState(
|
||||
purpose: null == purpose ? _self.purpose : purpose // ignore: cast_nullable_to_non_nullable
|
||||
as PinOtpPurpose,otp: freezed == otp ? _self.otp : otp // ignore: cast_nullable_to_non_nullable
|
||||
as PinOtp?,isRequestingOtp: null == isRequestingOtp ? _self.isRequestingOtp : isRequestingOtp // ignore: cast_nullable_to_non_nullable
|
||||
as bool,otpFailureOption: null == otpFailureOption ? _self.otpFailureOption : otpFailureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,resendAvailableAt: freezed == resendAvailableAt ? _self.resendAvailableAt : resendAvailableAt // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime?,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,failureOrSuccessOption: null == failureOrSuccessOption ? _self.failureOrSuccessOption : failureOrSuccessOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<WalletFailure, Unit>>,
|
||||
));
|
||||
}
|
||||
/// Create a copy of PinSetupFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$PinOtpCopyWith<$Res>? get otp {
|
||||
if (_self.otp == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $PinOtpCopyWith<$Res>(_self.otp!, (value) {
|
||||
return _then(_self.copyWith(otp: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [PinSetupFormState].
|
||||
extension PinSetupFormStatePatterns on PinSetupFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _PinSetupFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PinSetupFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _PinSetupFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PinSetupFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _PinSetupFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PinSetupFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( PinOtpPurpose purpose, PinOtp? otp, bool isRequestingOtp, Option<WalletFailure> otpFailureOption, DateTime? resendAvailableAt, bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PinSetupFormState() when $default != null:
|
||||
return $default(_that.purpose,_that.otp,_that.isRequestingOtp,_that.otpFailureOption,_that.resendAvailableAt,_that.isSubmitting,_that.failureOrSuccessOption);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( PinOtpPurpose purpose, PinOtp? otp, bool isRequestingOtp, Option<WalletFailure> otpFailureOption, DateTime? resendAvailableAt, bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PinSetupFormState():
|
||||
return $default(_that.purpose,_that.otp,_that.isRequestingOtp,_that.otpFailureOption,_that.resendAvailableAt,_that.isSubmitting,_that.failureOrSuccessOption);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( PinOtpPurpose purpose, PinOtp? otp, bool isRequestingOtp, Option<WalletFailure> otpFailureOption, DateTime? resendAvailableAt, bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PinSetupFormState() when $default != null:
|
||||
return $default(_that.purpose,_that.otp,_that.isRequestingOtp,_that.otpFailureOption,_that.resendAvailableAt,_that.isSubmitting,_that.failureOrSuccessOption);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PinSetupFormState implements PinSetupFormState {
|
||||
const _PinSetupFormState({required this.purpose, this.otp, this.isRequestingOtp = false, required this.otpFailureOption, this.resendAvailableAt, this.isSubmitting = false, required this.failureOrSuccessOption});
|
||||
|
||||
|
||||
@override final PinOtpPurpose purpose;
|
||||
@override final PinOtp? otp;
|
||||
@override@JsonKey() final bool isRequestingOtp;
|
||||
@override final Option<WalletFailure> otpFailureOption;
|
||||
/// Diisi saat server menjawab `429`; tombol kirim ulang menunggu sampai
|
||||
/// waktu ini.
|
||||
@override final DateTime? resendAvailableAt;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override final Option<Either<WalletFailure, Unit>> failureOrSuccessOption;
|
||||
|
||||
/// Create a copy of PinSetupFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PinSetupFormStateCopyWith<_PinSetupFormState> get copyWith => __$PinSetupFormStateCopyWithImpl<_PinSetupFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PinSetupFormState&&(identical(other.purpose, purpose) || other.purpose == purpose)&&(identical(other.otp, otp) || other.otp == otp)&&(identical(other.isRequestingOtp, isRequestingOtp) || other.isRequestingOtp == isRequestingOtp)&&(identical(other.otpFailureOption, otpFailureOption) || other.otpFailureOption == otpFailureOption)&&(identical(other.resendAvailableAt, resendAvailableAt) || other.resendAvailableAt == resendAvailableAt)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.failureOrSuccessOption, failureOrSuccessOption) || other.failureOrSuccessOption == failureOrSuccessOption));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,purpose,otp,isRequestingOtp,otpFailureOption,resendAvailableAt,isSubmitting,failureOrSuccessOption);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PinSetupFormState(purpose: $purpose, otp: $otp, isRequestingOtp: $isRequestingOtp, otpFailureOption: $otpFailureOption, resendAvailableAt: $resendAvailableAt, isSubmitting: $isSubmitting, failureOrSuccessOption: $failureOrSuccessOption)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PinSetupFormStateCopyWith<$Res> implements $PinSetupFormStateCopyWith<$Res> {
|
||||
factory _$PinSetupFormStateCopyWith(_PinSetupFormState value, $Res Function(_PinSetupFormState) _then) = __$PinSetupFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
PinOtpPurpose purpose, PinOtp? otp, bool isRequestingOtp, Option<WalletFailure> otpFailureOption, DateTime? resendAvailableAt, bool isSubmitting, Option<Either<WalletFailure, Unit>> failureOrSuccessOption
|
||||
});
|
||||
|
||||
|
||||
@override $PinOtpCopyWith<$Res>? get otp;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PinSetupFormStateCopyWithImpl<$Res>
|
||||
implements _$PinSetupFormStateCopyWith<$Res> {
|
||||
__$PinSetupFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PinSetupFormState _self;
|
||||
final $Res Function(_PinSetupFormState) _then;
|
||||
|
||||
/// Create a copy of PinSetupFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? purpose = null,Object? otp = freezed,Object? isRequestingOtp = null,Object? otpFailureOption = null,Object? resendAvailableAt = freezed,Object? isSubmitting = null,Object? failureOrSuccessOption = null,}) {
|
||||
return _then(_PinSetupFormState(
|
||||
purpose: null == purpose ? _self.purpose : purpose // ignore: cast_nullable_to_non_nullable
|
||||
as PinOtpPurpose,otp: freezed == otp ? _self.otp : otp // ignore: cast_nullable_to_non_nullable
|
||||
as PinOtp?,isRequestingOtp: null == isRequestingOtp ? _self.isRequestingOtp : isRequestingOtp // ignore: cast_nullable_to_non_nullable
|
||||
as bool,otpFailureOption: null == otpFailureOption ? _self.otpFailureOption : otpFailureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,resendAvailableAt: freezed == resendAvailableAt ? _self.resendAvailableAt : resendAvailableAt // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime?,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,failureOrSuccessOption: null == failureOrSuccessOption ? _self.failureOrSuccessOption : failureOrSuccessOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<Either<WalletFailure, Unit>>,
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of PinSetupFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$PinOtpCopyWith<$Res>? get otp {
|
||||
if (_self.otp == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $PinOtpCopyWith<$Res>(_self.otp!, (value) {
|
||||
return _then(_self.copyWith(otp: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,14 @@
|
||||
part of 'pin_setup_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class PinSetupFormEvent with _$PinSetupFormEvent {
|
||||
const factory PinSetupFormEvent.otpRequested(PinOtpPurpose purpose) =
|
||||
_OtpRequested;
|
||||
|
||||
/// PIN hanya diteruskan ke API, tidak disimpan di state.
|
||||
const factory PinSetupFormEvent.submitted({
|
||||
required String otpCode,
|
||||
required String pin,
|
||||
required String confirmPin,
|
||||
}) = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
part of 'pin_setup_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class PinSetupFormState with _$PinSetupFormState {
|
||||
const factory PinSetupFormState({
|
||||
required PinOtpPurpose purpose,
|
||||
PinOtp? otp,
|
||||
@Default(false) bool isRequestingOtp,
|
||||
required Option<WalletFailure> otpFailureOption,
|
||||
|
||||
/// Diisi saat server menjawab `429`; tombol kirim ulang menunggu sampai
|
||||
/// waktu ini.
|
||||
DateTime? resendAvailableAt,
|
||||
@Default(false) bool isSubmitting,
|
||||
required Option<Either<WalletFailure, Unit>> failureOrSuccessOption,
|
||||
}) = _PinSetupFormState;
|
||||
|
||||
factory PinSetupFormState.initial() => PinSetupFormState(
|
||||
purpose: PinOtpPurpose.setup,
|
||||
otpFailureOption: none(),
|
||||
failureOrSuccessOption: none(),
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../common/function/app_function.dart';
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'exchange_form_event.dart';
|
||||
part 'exchange_form_state.dart';
|
||||
part 'exchange_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class ExchangeFormBloc extends Bloc<ExchangeFormEvent, ExchangeFormState> {
|
||||
final IWalletRepository _repository;
|
||||
|
||||
ExchangeFormBloc(this._repository) : super(ExchangeFormState.initial()) {
|
||||
on<ExchangeFormEvent>(_onExchangeFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onExchangeFormEvent(
|
||||
ExchangeFormEvent event,
|
||||
Emitter<ExchangeFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
// UI men-debounce ketikan sebelum mengirim event ini.
|
||||
coinsChanged: (e) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
coins: e.coins,
|
||||
preview: null,
|
||||
previewFailureOption: none(),
|
||||
idempotencyKey: null,
|
||||
isPreviewing: e.coins > 0,
|
||||
),
|
||||
);
|
||||
if (e.coins <= 0) return;
|
||||
|
||||
final result = await _repository.previewExchange(coins: e.coins);
|
||||
// Customer sudah mengetik angka lain.
|
||||
if (state.coins != e.coins) return;
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(previewFailureOption: optionOf(f)),
|
||||
(preview) => state.copyWith(preview: preview),
|
||||
)
|
||||
.copyWith(isPreviewing: false),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
// Key baru untuk setiap konfirmasi, kecuali mengulang request yang
|
||||
// sebelumnya gagal karena jaringan.
|
||||
final key = state.idempotencyKey ?? generateUuidV4();
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: true,
|
||||
idempotencyKey: key,
|
||||
failureOption: none(),
|
||||
),
|
||||
);
|
||||
|
||||
final result = await _repository.exchange(
|
||||
coins: state.coins,
|
||||
pin: e.pin,
|
||||
idempotencyKey: key,
|
||||
);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(
|
||||
failureOption: optionOf(f),
|
||||
idempotencyKey: f.isNetworkError ? key : null,
|
||||
),
|
||||
(exchangeResult) => state.copyWith(
|
||||
result: exchangeResult,
|
||||
idempotencyKey: null,
|
||||
),
|
||||
)
|
||||
.copyWith(isSubmitting: false),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,650 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'exchange_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$ExchangeFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is ExchangeFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExchangeFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $ExchangeFormEventCopyWith<$Res> {
|
||||
$ExchangeFormEventCopyWith(ExchangeFormEvent _, $Res Function(ExchangeFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [ExchangeFormEvent].
|
||||
extension ExchangeFormEventPatterns on ExchangeFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _CoinsChanged value)? coinsChanged,TResult Function( _Submitted value)? submitted,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _CoinsChanged() when coinsChanged != null:
|
||||
return coinsChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _CoinsChanged value) coinsChanged,required TResult Function( _Submitted value) submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _CoinsChanged():
|
||||
return coinsChanged(_that);case _Submitted():
|
||||
return submitted(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _CoinsChanged value)? coinsChanged,TResult? Function( _Submitted value)? submitted,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _CoinsChanged() when coinsChanged != null:
|
||||
return coinsChanged(_that);case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( int coins)? coinsChanged,TResult Function( String pin)? submitted,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _CoinsChanged() when coinsChanged != null:
|
||||
return coinsChanged(_that.coins);case _Submitted() when submitted != null:
|
||||
return submitted(_that.pin);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( int coins) coinsChanged,required TResult Function( String pin) submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _CoinsChanged():
|
||||
return coinsChanged(_that.coins);case _Submitted():
|
||||
return submitted(_that.pin);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( int coins)? coinsChanged,TResult? Function( String pin)? submitted,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _CoinsChanged() when coinsChanged != null:
|
||||
return coinsChanged(_that.coins);case _Submitted() when submitted != null:
|
||||
return submitted(_that.pin);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _CoinsChanged implements ExchangeFormEvent {
|
||||
const _CoinsChanged(this.coins);
|
||||
|
||||
|
||||
final int coins;
|
||||
|
||||
/// Create a copy of ExchangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$CoinsChangedCopyWith<_CoinsChanged> get copyWith => __$CoinsChangedCopyWithImpl<_CoinsChanged>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _CoinsChanged&&(identical(other.coins, coins) || other.coins == coins));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,coins);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExchangeFormEvent.coinsChanged(coins: $coins)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$CoinsChangedCopyWith<$Res> implements $ExchangeFormEventCopyWith<$Res> {
|
||||
factory _$CoinsChangedCopyWith(_CoinsChanged value, $Res Function(_CoinsChanged) _then) = __$CoinsChangedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
int coins
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$CoinsChangedCopyWithImpl<$Res>
|
||||
implements _$CoinsChangedCopyWith<$Res> {
|
||||
__$CoinsChangedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _CoinsChanged _self;
|
||||
final $Res Function(_CoinsChanged) _then;
|
||||
|
||||
/// Create a copy of ExchangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? coins = null,}) {
|
||||
return _then(_CoinsChanged(
|
||||
null == coins ? _self.coins : coins // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements ExchangeFormEvent {
|
||||
const _Submitted(this.pin);
|
||||
|
||||
|
||||
final String pin;
|
||||
|
||||
/// Create a copy of ExchangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SubmittedCopyWith<_Submitted> get copyWith => __$SubmittedCopyWithImpl<_Submitted>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted&&(identical(other.pin, pin) || other.pin == pin));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,pin);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExchangeFormEvent.submitted(pin: $pin)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SubmittedCopyWith<$Res> implements $ExchangeFormEventCopyWith<$Res> {
|
||||
factory _$SubmittedCopyWith(_Submitted value, $Res Function(_Submitted) _then) = __$SubmittedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String pin
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SubmittedCopyWithImpl<$Res>
|
||||
implements _$SubmittedCopyWith<$Res> {
|
||||
__$SubmittedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _Submitted _self;
|
||||
final $Res Function(_Submitted) _then;
|
||||
|
||||
/// Create a copy of ExchangeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? pin = null,}) {
|
||||
return _then(_Submitted(
|
||||
null == pin ? _self.pin : pin // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ExchangeFormState {
|
||||
|
||||
int get coins; ExchangePreview? get preview; Option<WalletFailure> get previewFailureOption; bool get isPreviewing; ExchangeResult? get result; Option<WalletFailure> get failureOption; bool get isSubmitting; String? get idempotencyKey;
|
||||
/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$ExchangeFormStateCopyWith<ExchangeFormState> get copyWith => _$ExchangeFormStateCopyWithImpl<ExchangeFormState>(this as ExchangeFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as ExchangeFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is ExchangeFormState&&(identical(other.coins, _this.coins) || other.coins == _this.coins)&&(identical(other.preview, _this.preview) || other.preview == _this.preview)&&(identical(other.previewFailureOption, _this.previewFailureOption) || other.previewFailureOption == _this.previewFailureOption)&&(identical(other.isPreviewing, _this.isPreviewing) || other.isPreviewing == _this.isPreviewing)&&(identical(other.result, _this.result) || other.result == _this.result)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting)&&(identical(other.idempotencyKey, _this.idempotencyKey) || other.idempotencyKey == _this.idempotencyKey));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as ExchangeFormState;
|
||||
return Object.hash(runtimeType,_this.coins,_this.preview,_this.previewFailureOption,_this.isPreviewing,_this.result,_this.failureOption,_this.isSubmitting,_this.idempotencyKey);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as ExchangeFormState;
|
||||
return 'ExchangeFormState(coins: ${_this.coins}, preview: ${_this.preview}, previewFailureOption: ${_this.previewFailureOption}, isPreviewing: ${_this.isPreviewing}, result: ${_this.result}, failureOption: ${_this.failureOption}, isSubmitting: ${_this.isSubmitting}, idempotencyKey: ${_this.idempotencyKey})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $ExchangeFormStateCopyWith<$Res> {
|
||||
factory $ExchangeFormStateCopyWith(ExchangeFormState value, $Res Function(ExchangeFormState) _then) = _$ExchangeFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
int coins, ExchangePreview? preview, Option<WalletFailure> previewFailureOption, bool isPreviewing, ExchangeResult? result, Option<WalletFailure> failureOption, bool isSubmitting, String? idempotencyKey
|
||||
});
|
||||
|
||||
|
||||
$ExchangePreviewCopyWith<$Res>? get preview;$ExchangeResultCopyWith<$Res>? get result;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$ExchangeFormStateCopyWithImpl<$Res>
|
||||
implements $ExchangeFormStateCopyWith<$Res> {
|
||||
_$ExchangeFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final ExchangeFormState _self;
|
||||
final $Res Function(ExchangeFormState) _then;
|
||||
|
||||
/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? coins = null,Object? preview = freezed,Object? previewFailureOption = null,Object? isPreviewing = null,Object? result = freezed,Object? failureOption = null,Object? isSubmitting = null,Object? idempotencyKey = freezed,}) {
|
||||
return _then(ExchangeFormState(
|
||||
coins: null == coins ? _self.coins : coins // ignore: cast_nullable_to_non_nullable
|
||||
as int,preview: freezed == preview ? _self.preview : preview // ignore: cast_nullable_to_non_nullable
|
||||
as ExchangePreview?,previewFailureOption: null == previewFailureOption ? _self.previewFailureOption : previewFailureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isPreviewing: null == isPreviewing ? _self.isPreviewing : isPreviewing // ignore: cast_nullable_to_non_nullable
|
||||
as bool,result: freezed == result ? _self.result : result // ignore: cast_nullable_to_non_nullable
|
||||
as ExchangeResult?,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,idempotencyKey: freezed == idempotencyKey ? _self.idempotencyKey : idempotencyKey // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
));
|
||||
}
|
||||
/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ExchangePreviewCopyWith<$Res>? get preview {
|
||||
if (_self.preview == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $ExchangePreviewCopyWith<$Res>(_self.preview!, (value) {
|
||||
return _then(_self.copyWith(preview: value));
|
||||
});
|
||||
}/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ExchangeResultCopyWith<$Res>? get result {
|
||||
if (_self.result == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $ExchangeResultCopyWith<$Res>(_self.result!, (value) {
|
||||
return _then(_self.copyWith(result: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [ExchangeFormState].
|
||||
extension ExchangeFormStatePatterns on ExchangeFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _ExchangeFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _ExchangeFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _ExchangeFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _ExchangeFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _ExchangeFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _ExchangeFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( int coins, ExchangePreview? preview, Option<WalletFailure> previewFailureOption, bool isPreviewing, ExchangeResult? result, Option<WalletFailure> failureOption, bool isSubmitting, String? idempotencyKey)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _ExchangeFormState() when $default != null:
|
||||
return $default(_that.coins,_that.preview,_that.previewFailureOption,_that.isPreviewing,_that.result,_that.failureOption,_that.isSubmitting,_that.idempotencyKey);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( int coins, ExchangePreview? preview, Option<WalletFailure> previewFailureOption, bool isPreviewing, ExchangeResult? result, Option<WalletFailure> failureOption, bool isSubmitting, String? idempotencyKey) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _ExchangeFormState():
|
||||
return $default(_that.coins,_that.preview,_that.previewFailureOption,_that.isPreviewing,_that.result,_that.failureOption,_that.isSubmitting,_that.idempotencyKey);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( int coins, ExchangePreview? preview, Option<WalletFailure> previewFailureOption, bool isPreviewing, ExchangeResult? result, Option<WalletFailure> failureOption, bool isSubmitting, String? idempotencyKey)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _ExchangeFormState() when $default != null:
|
||||
return $default(_that.coins,_that.preview,_that.previewFailureOption,_that.isPreviewing,_that.result,_that.failureOption,_that.isSubmitting,_that.idempotencyKey);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _ExchangeFormState extends ExchangeFormState {
|
||||
const _ExchangeFormState({required this.coins, this.preview, required this.previewFailureOption, this.isPreviewing = false, this.result, required this.failureOption, this.isSubmitting = false, this.idempotencyKey}): super._();
|
||||
|
||||
|
||||
@override final int coins;
|
||||
@override final ExchangePreview? preview;
|
||||
@override final Option<WalletFailure> previewFailureOption;
|
||||
@override@JsonKey() final bool isPreviewing;
|
||||
@override final ExchangeResult? result;
|
||||
@override final Option<WalletFailure> failureOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
@override final String? idempotencyKey;
|
||||
|
||||
/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$ExchangeFormStateCopyWith<_ExchangeFormState> get copyWith => __$ExchangeFormStateCopyWithImpl<_ExchangeFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ExchangeFormState&&(identical(other.coins, coins) || other.coins == coins)&&(identical(other.preview, preview) || other.preview == preview)&&(identical(other.previewFailureOption, previewFailureOption) || other.previewFailureOption == previewFailureOption)&&(identical(other.isPreviewing, isPreviewing) || other.isPreviewing == isPreviewing)&&(identical(other.result, result) || other.result == result)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting)&&(identical(other.idempotencyKey, idempotencyKey) || other.idempotencyKey == idempotencyKey));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,coins,preview,previewFailureOption,isPreviewing,result,failureOption,isSubmitting,idempotencyKey);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ExchangeFormState(coins: $coins, preview: $preview, previewFailureOption: $previewFailureOption, isPreviewing: $isPreviewing, result: $result, failureOption: $failureOption, isSubmitting: $isSubmitting, idempotencyKey: $idempotencyKey)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$ExchangeFormStateCopyWith<$Res> implements $ExchangeFormStateCopyWith<$Res> {
|
||||
factory _$ExchangeFormStateCopyWith(_ExchangeFormState value, $Res Function(_ExchangeFormState) _then) = __$ExchangeFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
int coins, ExchangePreview? preview, Option<WalletFailure> previewFailureOption, bool isPreviewing, ExchangeResult? result, Option<WalletFailure> failureOption, bool isSubmitting, String? idempotencyKey
|
||||
});
|
||||
|
||||
|
||||
@override $ExchangePreviewCopyWith<$Res>? get preview;@override $ExchangeResultCopyWith<$Res>? get result;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$ExchangeFormStateCopyWithImpl<$Res>
|
||||
implements _$ExchangeFormStateCopyWith<$Res> {
|
||||
__$ExchangeFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _ExchangeFormState _self;
|
||||
final $Res Function(_ExchangeFormState) _then;
|
||||
|
||||
/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? coins = null,Object? preview = freezed,Object? previewFailureOption = null,Object? isPreviewing = null,Object? result = freezed,Object? failureOption = null,Object? isSubmitting = null,Object? idempotencyKey = freezed,}) {
|
||||
return _then(_ExchangeFormState(
|
||||
coins: null == coins ? _self.coins : coins // ignore: cast_nullable_to_non_nullable
|
||||
as int,preview: freezed == preview ? _self.preview : preview // ignore: cast_nullable_to_non_nullable
|
||||
as ExchangePreview?,previewFailureOption: null == previewFailureOption ? _self.previewFailureOption : previewFailureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isPreviewing: null == isPreviewing ? _self.isPreviewing : isPreviewing // ignore: cast_nullable_to_non_nullable
|
||||
as bool,result: freezed == result ? _self.result : result // ignore: cast_nullable_to_non_nullable
|
||||
as ExchangeResult?,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,idempotencyKey: freezed == idempotencyKey ? _self.idempotencyKey : idempotencyKey // ignore: cast_nullable_to_non_nullable
|
||||
as String?,
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ExchangePreviewCopyWith<$Res>? get preview {
|
||||
if (_self.preview == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $ExchangePreviewCopyWith<$Res>(_self.preview!, (value) {
|
||||
return _then(_self.copyWith(preview: value));
|
||||
});
|
||||
}/// Create a copy of ExchangeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ExchangeResultCopyWith<$Res>? get result {
|
||||
if (_self.result == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $ExchangeResultCopyWith<$Res>(_self.result!, (value) {
|
||||
return _then(_self.copyWith(result: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,9 @@
|
||||
part of 'exchange_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class ExchangeFormEvent with _$ExchangeFormEvent {
|
||||
const factory ExchangeFormEvent.coinsChanged(int coins) = _CoinsChanged;
|
||||
|
||||
/// [pin] hanya diteruskan ke API, tidak disimpan di state.
|
||||
const factory ExchangeFormEvent.submitted(String pin) = _Submitted;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
part of 'exchange_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class ExchangeFormState with _$ExchangeFormState {
|
||||
const ExchangeFormState._();
|
||||
|
||||
const factory ExchangeFormState({
|
||||
required int coins,
|
||||
ExchangePreview? preview,
|
||||
required Option<WalletFailure> previewFailureOption,
|
||||
@Default(false) bool isPreviewing,
|
||||
ExchangeResult? result,
|
||||
required Option<WalletFailure> failureOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
String? idempotencyKey,
|
||||
}) = _ExchangeFormState;
|
||||
|
||||
factory ExchangeFormState.initial() => ExchangeFormState(
|
||||
coins: 0,
|
||||
previewFailureOption: none(),
|
||||
failureOption: none(),
|
||||
);
|
||||
|
||||
bool get canSubmit =>
|
||||
!isPreviewing &&
|
||||
!isSubmitting &&
|
||||
preview != null &&
|
||||
preview!.valid &&
|
||||
preview!.coins == coins;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'payment_code_form_event.dart';
|
||||
part 'payment_code_form_state.dart';
|
||||
part 'payment_code_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class PaymentCodeFormBloc
|
||||
extends Bloc<PaymentCodeFormEvent, PaymentCodeFormState> {
|
||||
final IWalletRepository _repository;
|
||||
|
||||
PaymentCodeFormBloc(this._repository)
|
||||
: super(PaymentCodeFormState.initial()) {
|
||||
on<PaymentCodeFormEvent>(_onPaymentCodeFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onPaymentCodeFormEvent(
|
||||
PaymentCodeFormEvent event,
|
||||
Emitter<PaymentCodeFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
submitted: (e) async {
|
||||
emit(state.copyWith(isSubmitting: true, failureOption: none()));
|
||||
|
||||
final result = await _repository.createPaymentCode(pin: e.pin);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(failureOption: optionOf(f)),
|
||||
(code) => state.copyWith(paymentCode: code),
|
||||
)
|
||||
.copyWith(isSubmitting: false),
|
||||
);
|
||||
},
|
||||
expired: (e) async => emit(state.copyWith(paymentCode: null)),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,575 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'payment_code_form_bloc.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$PaymentCodeFormEvent {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is PaymentCodeFormEvent);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PaymentCodeFormEvent()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class $PaymentCodeFormEventCopyWith<$Res> {
|
||||
$PaymentCodeFormEventCopyWith(PaymentCodeFormEvent _, $Res Function(PaymentCodeFormEvent) __);
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [PaymentCodeFormEvent].
|
||||
extension PaymentCodeFormEventPatterns on PaymentCodeFormEvent {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Submitted value)? submitted,TResult Function( _Expired value)? expired,required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _Expired() when expired != null:
|
||||
return expired(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Submitted value) submitted,required TResult Function( _Expired value) expired,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted():
|
||||
return submitted(_that);case _Expired():
|
||||
return expired(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Submitted value)? submitted,TResult? Function( _Expired value)? expired,}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that);case _Expired() when expired != null:
|
||||
return expired(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String pin)? submitted,TResult Function()? expired,required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that.pin);case _Expired() when expired != null:
|
||||
return expired();case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String pin) submitted,required TResult Function() expired,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted():
|
||||
return submitted(_that.pin);case _Expired():
|
||||
return expired();case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String pin)? submitted,TResult? Function()? expired,}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _Submitted() when submitted != null:
|
||||
return submitted(_that.pin);case _Expired() when expired != null:
|
||||
return expired();case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Submitted implements PaymentCodeFormEvent {
|
||||
const _Submitted(this.pin);
|
||||
|
||||
|
||||
final String pin;
|
||||
|
||||
/// Create a copy of PaymentCodeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SubmittedCopyWith<_Submitted> get copyWith => __$SubmittedCopyWithImpl<_Submitted>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Submitted&&(identical(other.pin, pin) || other.pin == pin));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,pin);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PaymentCodeFormEvent.submitted(pin: $pin)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SubmittedCopyWith<$Res> implements $PaymentCodeFormEventCopyWith<$Res> {
|
||||
factory _$SubmittedCopyWith(_Submitted value, $Res Function(_Submitted) _then) = __$SubmittedCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String pin
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SubmittedCopyWithImpl<$Res>
|
||||
implements _$SubmittedCopyWith<$Res> {
|
||||
__$SubmittedCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _Submitted _self;
|
||||
final $Res Function(_Submitted) _then;
|
||||
|
||||
/// Create a copy of PaymentCodeFormEvent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') $Res call({Object? pin = null,}) {
|
||||
return _then(_Submitted(
|
||||
null == pin ? _self.pin : pin // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _Expired implements PaymentCodeFormEvent {
|
||||
const _Expired();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Expired);
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => runtimeType.hashCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PaymentCodeFormEvent.expired()';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$PaymentCodeFormState {
|
||||
|
||||
PaymentCode? get paymentCode; Option<WalletFailure> get failureOption; bool get isSubmitting;
|
||||
/// Create a copy of PaymentCodeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$PaymentCodeFormStateCopyWith<PaymentCodeFormState> get copyWith => _$PaymentCodeFormStateCopyWithImpl<PaymentCodeFormState>(this as PaymentCodeFormState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
final _this = this as PaymentCodeFormState;
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is PaymentCodeFormState&&(identical(other.paymentCode, _this.paymentCode) || other.paymentCode == _this.paymentCode)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isSubmitting, _this.isSubmitting) || other.isSubmitting == _this.isSubmitting));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
final _this = this as PaymentCodeFormState;
|
||||
return Object.hash(runtimeType,_this.paymentCode,_this.failureOption,_this.isSubmitting);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final _this = this as PaymentCodeFormState;
|
||||
return 'PaymentCodeFormState(paymentCode: ${_this.paymentCode}, failureOption: ${_this.failureOption}, isSubmitting: ${_this.isSubmitting})';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $PaymentCodeFormStateCopyWith<$Res> {
|
||||
factory $PaymentCodeFormStateCopyWith(PaymentCodeFormState value, $Res Function(PaymentCodeFormState) _then) = _$PaymentCodeFormStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
PaymentCode? paymentCode, Option<WalletFailure> failureOption, bool isSubmitting
|
||||
});
|
||||
|
||||
|
||||
$PaymentCodeCopyWith<$Res>? get paymentCode;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$PaymentCodeFormStateCopyWithImpl<$Res>
|
||||
implements $PaymentCodeFormStateCopyWith<$Res> {
|
||||
_$PaymentCodeFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final PaymentCodeFormState _self;
|
||||
final $Res Function(PaymentCodeFormState) _then;
|
||||
|
||||
/// Create a copy of PaymentCodeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? paymentCode = freezed,Object? failureOption = null,Object? isSubmitting = null,}) {
|
||||
return _then(PaymentCodeFormState(
|
||||
paymentCode: freezed == paymentCode ? _self.paymentCode : paymentCode // ignore: cast_nullable_to_non_nullable
|
||||
as PaymentCode?,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
/// Create a copy of PaymentCodeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$PaymentCodeCopyWith<$Res>? get paymentCode {
|
||||
if (_self.paymentCode == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $PaymentCodeCopyWith<$Res>(_self.paymentCode!, (value) {
|
||||
return _then(_self.copyWith(paymentCode: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [PaymentCodeFormState].
|
||||
extension PaymentCodeFormStatePatterns on PaymentCodeFormState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _PaymentCodeFormState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PaymentCodeFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _PaymentCodeFormState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PaymentCodeFormState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _PaymentCodeFormState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _PaymentCodeFormState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( PaymentCode? paymentCode, Option<WalletFailure> failureOption, bool isSubmitting)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PaymentCodeFormState() when $default != null:
|
||||
return $default(_that.paymentCode,_that.failureOption,_that.isSubmitting);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( PaymentCode? paymentCode, Option<WalletFailure> failureOption, bool isSubmitting) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PaymentCodeFormState():
|
||||
return $default(_that.paymentCode,_that.failureOption,_that.isSubmitting);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( PaymentCode? paymentCode, Option<WalletFailure> failureOption, bool isSubmitting)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PaymentCodeFormState() when $default != null:
|
||||
return $default(_that.paymentCode,_that.failureOption,_that.isSubmitting);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _PaymentCodeFormState implements PaymentCodeFormState {
|
||||
const _PaymentCodeFormState({this.paymentCode, required this.failureOption, this.isSubmitting = false});
|
||||
|
||||
|
||||
@override final PaymentCode? paymentCode;
|
||||
@override final Option<WalletFailure> failureOption;
|
||||
@override@JsonKey() final bool isSubmitting;
|
||||
|
||||
/// Create a copy of PaymentCodeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$PaymentCodeFormStateCopyWith<_PaymentCodeFormState> get copyWith => __$PaymentCodeFormStateCopyWithImpl<_PaymentCodeFormState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PaymentCodeFormState&&(identical(other.paymentCode, paymentCode) || other.paymentCode == paymentCode)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isSubmitting, isSubmitting) || other.isSubmitting == isSubmitting));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return Object.hash(runtimeType,paymentCode,failureOption,isSubmitting);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'PaymentCodeFormState(paymentCode: $paymentCode, failureOption: $failureOption, isSubmitting: $isSubmitting)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$PaymentCodeFormStateCopyWith<$Res> implements $PaymentCodeFormStateCopyWith<$Res> {
|
||||
factory _$PaymentCodeFormStateCopyWith(_PaymentCodeFormState value, $Res Function(_PaymentCodeFormState) _then) = __$PaymentCodeFormStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
PaymentCode? paymentCode, Option<WalletFailure> failureOption, bool isSubmitting
|
||||
});
|
||||
|
||||
|
||||
@override $PaymentCodeCopyWith<$Res>? get paymentCode;
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$PaymentCodeFormStateCopyWithImpl<$Res>
|
||||
implements _$PaymentCodeFormStateCopyWith<$Res> {
|
||||
__$PaymentCodeFormStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _PaymentCodeFormState _self;
|
||||
final $Res Function(_PaymentCodeFormState) _then;
|
||||
|
||||
/// Create a copy of PaymentCodeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? paymentCode = freezed,Object? failureOption = null,Object? isSubmitting = null,}) {
|
||||
return _then(_PaymentCodeFormState(
|
||||
paymentCode: freezed == paymentCode ? _self.paymentCode : paymentCode // ignore: cast_nullable_to_non_nullable
|
||||
as PaymentCode?,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
|
||||
as Option<WalletFailure>,isSubmitting: null == isSubmitting ? _self.isSubmitting : isSubmitting // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
/// Create a copy of PaymentCodeFormState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$PaymentCodeCopyWith<$Res>? get paymentCode {
|
||||
if (_self.paymentCode == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $PaymentCodeCopyWith<$Res>(_self.paymentCode!, (value) {
|
||||
return _then(_self.copyWith(paymentCode: value));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// dart format on
|
||||
@@ -0,0 +1,9 @@
|
||||
part of 'payment_code_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class PaymentCodeFormEvent with _$PaymentCodeFormEvent {
|
||||
/// [pin] hanya diteruskan ke API, tidak disimpan di state.
|
||||
const factory PaymentCodeFormEvent.submitted(String pin) = _Submitted;
|
||||
|
||||
const factory PaymentCodeFormEvent.expired() = _Expired;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
part of 'payment_code_form_bloc.dart';
|
||||
|
||||
@freezed
|
||||
abstract class PaymentCodeFormState with _$PaymentCodeFormState {
|
||||
const factory PaymentCodeFormState({
|
||||
PaymentCode? paymentCode,
|
||||
required Option<WalletFailure> failureOption,
|
||||
@Default(false) bool isSubmitting,
|
||||
}) = _PaymentCodeFormState;
|
||||
|
||||
factory PaymentCodeFormState.initial() =>
|
||||
PaymentCodeFormState(failureOption: none());
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
|
||||
import '../../../common/function/app_function.dart';
|
||||
import '../../../domain/wallet/wallet.dart';
|
||||
|
||||
part 'transfer_form_event.dart';
|
||||
part 'transfer_form_state.dart';
|
||||
part 'transfer_form_bloc.freezed.dart';
|
||||
|
||||
@injectable
|
||||
class TransferFormBloc extends Bloc<TransferFormEvent, TransferFormState> {
|
||||
final IWalletRepository _repository;
|
||||
|
||||
TransferFormBloc(this._repository) : super(TransferFormState.initial()) {
|
||||
on<TransferFormEvent>(_onTransferFormEvent);
|
||||
}
|
||||
|
||||
Future<void> _onTransferFormEvent(
|
||||
TransferFormEvent event,
|
||||
Emitter<TransferFormState> emit,
|
||||
) {
|
||||
return event.map(
|
||||
currencyChanged: (e) async => emit(
|
||||
state.copyWith(
|
||||
currency: e.currency,
|
||||
idempotencyKey: null,
|
||||
failureOption: none(),
|
||||
),
|
||||
),
|
||||
phoneChanged: (e) async => emit(
|
||||
state.copyWith(
|
||||
phone: e.phone,
|
||||
recipient: null,
|
||||
recipientFailureOption: none(),
|
||||
idempotencyKey: null,
|
||||
failureOption: none(),
|
||||
),
|
||||
),
|
||||
amountChanged: (e) async => emit(
|
||||
state.copyWith(
|
||||
amount: e.amount,
|
||||
idempotencyKey: null,
|
||||
failureOption: none(),
|
||||
),
|
||||
),
|
||||
recipientChecked: (e) async {
|
||||
final phone = state.phone;
|
||||
emit(
|
||||
state.copyWith(
|
||||
isCheckingRecipient: true,
|
||||
recipient: null,
|
||||
recipientFailureOption: none(),
|
||||
),
|
||||
);
|
||||
|
||||
final result = await _repository.checkRecipient(phone: phone);
|
||||
if (state.phone != phone) return;
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(recipientFailureOption: optionOf(f)),
|
||||
(recipient) => state.copyWith(recipient: recipient),
|
||||
)
|
||||
.copyWith(isCheckingRecipient: false),
|
||||
);
|
||||
},
|
||||
submitted: (e) async {
|
||||
// Key baru untuk setiap konfirmasi, kecuali mengulang request yang
|
||||
// sebelumnya gagal karena jaringan.
|
||||
final key = state.idempotencyKey ?? generateUuidV4();
|
||||
emit(
|
||||
state.copyWith(
|
||||
isSubmitting: true,
|
||||
idempotencyKey: key,
|
||||
failureOption: none(),
|
||||
),
|
||||
);
|
||||
|
||||
final result = await _repository.transfer(
|
||||
currency: state.currency,
|
||||
amount: state.amount,
|
||||
recipientPhone: state.phone,
|
||||
pin: e.pin,
|
||||
idempotencyKey: key,
|
||||
);
|
||||
|
||||
emit(
|
||||
result
|
||||
.fold(
|
||||
(f) => state.copyWith(
|
||||
failureOption: optionOf(f),
|
||||
idempotencyKey: f.isNetworkError ? key : null,
|
||||
),
|
||||
(transferResult) => state.copyWith(
|
||||
result: transferResult,
|
||||
idempotencyKey: null,
|
||||
),
|
||||
)
|
||||
.copyWith(isSubmitting: false),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||