Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5b0e66706 | ||
|
|
1ff144a1a2 | ||
|
|
eb031d4c2a | ||
|
|
7161f523c2 | ||
|
|
d097df1592 | ||
|
|
e8bbef03b0 | ||
|
|
b228538725 | ||
|
|
2ab20a1150 | ||
|
|
b9fcd79962 | ||
|
|
9a5f0c7415 | ||
|
|
d345294a2f | ||
|
|
beb86f6259 | ||
|
|
ea29c62af1 | ||
|
|
c8a84ffe5f | ||
|
|
539c70be17 | ||
|
|
c45848bcf2 | ||
|
|
6d9377f4ab | ||
|
|
56e720e253 | ||
|
|
c7ed45a374 | ||
|
|
a0610459bf | ||
|
|
842b7a5041 | ||
|
|
dc09aabbe8 | ||
|
|
cdc65f8f8f | ||
|
|
e7260ea0e2 | ||
|
|
b173654a9c | ||
|
|
699ca4cfb7 | ||
|
|
d790262fd4 | ||
|
|
60fec68a92 | ||
|
|
ab2d7d7be5 | ||
|
|
6ac88b92ae | ||
|
|
9e4e2ebbd1 | ||
|
|
3513c63259 | ||
|
|
46dfb7e44e | ||
|
|
a0db13feb4 | ||
|
|
f626b18d31 | ||
|
|
200f996d3e | ||
|
|
a739e1c29e | ||
|
|
4481d24375 | ||
|
|
59d8f06d75 | ||
|
|
e625bd3d2a | ||
|
|
5058f99fe0 | ||
|
|
f7cafeb583 | ||
|
|
37d747c0ba | ||
|
|
e3b9444a08 | ||
|
|
d8a28c084d | ||
|
|
d3974b8eda | ||
|
|
97313371c3 | ||
|
|
6fa45c8ac0 | ||
|
|
b2b2e2b111 | ||
|
|
0a8f8d93bb | ||
|
|
f5256fb33d | ||
|
|
c5673a147c | ||
|
|
af182b6f5a | ||
|
|
d78b6165c2 | ||
|
|
0886e8c912 | ||
|
|
93560b85cb | ||
|
|
4eece81eb1 | ||
|
|
873dd7e224 | ||
|
|
3e6dce93fb | ||
|
|
8923ce737d | ||
|
|
c0cf63a176 | ||
|
|
bf7a5708f5 | ||
|
|
896ea6c28c | ||
|
|
4ed7721bbe | ||
|
|
f12614cec9 | ||
|
|
98b152cbc2 | ||
|
|
1b24bae23a | ||
|
|
a87b62ca9f | ||
|
|
dca0f546f9 | ||
|
|
2a44ce023e | ||
|
|
13941d4881 | ||
|
|
07932d688f | ||
|
|
5a7892aa99 | ||
|
|
14c3c69ad6 | ||
|
|
3bb6bd653e | ||
|
|
b4a9cf31fc | ||
|
|
069c2296de | ||
|
|
ef23839761 | ||
|
|
d37a4993df | ||
|
|
2f155a2f8d | ||
|
|
d111025aa6 | ||
|
|
fecb4fb5c1 | ||
|
|
35f02e6b76 | ||
|
|
6b42cd86ff | ||
|
|
7961c9d8c5 | ||
|
|
8d9e622121 | ||
|
|
bf43c398d2 | ||
|
|
b335102677 | ||
|
|
adc90a90a0 | ||
|
|
0693411cf7 | ||
|
|
a514a8abdb | ||
|
|
a6e58a8cc0 | ||
|
|
59d4d4c0e5 | ||
|
|
137f3d9636 | ||
|
|
37f0008ec8 | ||
|
|
34555dd789 | ||
|
|
8bd61eb58e | ||
|
|
b8eefcbac0 | ||
|
|
9e5a6cc7ae | ||
|
|
3135dde317 | ||
|
|
e8fd683077 | ||
|
|
08bbfc393b | ||
|
|
8fec9c8cd0 | ||
|
|
0bffd92a08 | ||
|
|
5c683eda8d | ||
|
|
d5ed3f62ff | ||
|
|
634b331716 | ||
|
|
655902a659 | ||
|
|
0e83d213fc | ||
|
|
013f313e35 | ||
|
|
e85138f27e | ||
|
|
9c38d001d1 | ||
|
|
9243e0948b | ||
|
|
754048b565 | ||
|
|
7bcf54c555 | ||
|
|
79e109cfe4 |
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Dev",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"args": ["--dart-define=ENV=dev"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Prod",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"args": ["--dart-define=ENV=prod"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,16 +1,215 @@
|
|||||||
# apskel_pos_flutter_v2
|
# Apskel POS Flutter
|
||||||
|
|
||||||
A new Flutter project.
|
Aplikasi Point of Sale (POS) berbasis Flutter untuk manajemen kasir restoran. Mendukung manajemen order, produk, meja, pelanggan, pembayaran, printer bluetooth/network, analitik, dan push notification via FCM.
|
||||||
|
|
||||||
## Getting Started
|
---
|
||||||
|
|
||||||
This project is a starting point for a Flutter application.
|
## Fitur Utama
|
||||||
|
|
||||||
A few resources to get you started if this is your first Flutter project:
|
- **Autentikasi** — Login dengan email & password, logout, session management
|
||||||
|
- **Order Management** — Buat, kelola, dan proses order
|
||||||
|
- **Produk & Kategori** — Manajemen menu dan kategori produk
|
||||||
|
- **Meja** — Manajemen meja restoran
|
||||||
|
- **Pelanggan** — Data pelanggan dan riwayat transaksi
|
||||||
|
- **Checkout & Pembayaran** — Proses checkout dengan berbagai metode pembayaran
|
||||||
|
- **Split Bill** — Pembagian tagihan
|
||||||
|
- **Void & Refund** — Pembatalan dan pengembalian transaksi
|
||||||
|
- **Printer** — Cetak struk via Bluetooth dan Network printer
|
||||||
|
- **Analitik** — Dashboard, laporan penjualan, produk, kategori, payment method, profit/loss, inventory
|
||||||
|
- **Sinkronisasi** — Sinkronisasi data offline/online
|
||||||
|
- **Push Notification (FCM)** — Notifikasi real-time via Firebase Cloud Messaging
|
||||||
|
|
||||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
---
|
||||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
|
||||||
|
|
||||||
For help getting started with Flutter development, view the
|
## Tech Stack
|
||||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
|
||||||
samples, guidance on mobile development, and a full API reference.
|
| Kategori | Library |
|
||||||
|
|---|---|
|
||||||
|
| State Management | `flutter_bloc` + `bloc` |
|
||||||
|
| Dependency Injection | `get_it` + `injectable` |
|
||||||
|
| Navigation | `auto_route` |
|
||||||
|
| HTTP Client | `dio` |
|
||||||
|
| Local Database | `sqflite` |
|
||||||
|
| Local Storage | `shared_preferences` |
|
||||||
|
| Firebase | `firebase_core`, `firebase_crashlytics`, `firebase_messaging` |
|
||||||
|
| Push Notification | `flutter_local_notifications` |
|
||||||
|
| Device Info | `device_info_plus`, `package_info_plus` |
|
||||||
|
| Code Generation | `freezed`, `json_serializable` |
|
||||||
|
| Printer | `print_bluetooth_thermal`, `flutter_esc_pos_network` |
|
||||||
|
| Chart | `fl_chart` |
|
||||||
|
| Connectivity | `connectivity_plus` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Arsitektur
|
||||||
|
|
||||||
|
Project menggunakan **Clean Architecture** dengan 4 layer:
|
||||||
|
|
||||||
|
```
|
||||||
|
lib/
|
||||||
|
├── application/ # BLoC — state management per fitur
|
||||||
|
├── domain/ # Entity, repository interface, failure
|
||||||
|
├── infrastructure/ # Implementasi repository, DTO, datasource
|
||||||
|
├── presentation/ # UI — pages, components, router
|
||||||
|
└── common/ # Shared utilities, DI modules, service, theme
|
||||||
|
```
|
||||||
|
|
||||||
|
### Struktur per Fitur
|
||||||
|
|
||||||
|
```
|
||||||
|
feature/
|
||||||
|
├── application/
|
||||||
|
│ └── feature_bloc.dart # BLoC
|
||||||
|
├── domain/
|
||||||
|
│ ├── entities/ # Domain model (freezed)
|
||||||
|
│ ├── repositories/ # Interface repository
|
||||||
|
│ └── failures/ # Failure types
|
||||||
|
└── infrastructure/
|
||||||
|
├── datasources/
|
||||||
|
│ ├── remote_data_provider.dart
|
||||||
|
│ └── local_data_provider.dart
|
||||||
|
├── dtos/ # Data Transfer Object (json_serializable)
|
||||||
|
└── repositories/ # Implementasi repository
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Setup & Menjalankan
|
||||||
|
|
||||||
|
### Prasyarat
|
||||||
|
|
||||||
|
- Flutter SDK `^3.8.1`
|
||||||
|
- Dart SDK `^3.8.1`
|
||||||
|
- Android SDK / Xcode (untuk iOS)
|
||||||
|
- Firebase project yang sudah dikonfigurasi
|
||||||
|
|
||||||
|
### Instalasi
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone repository
|
||||||
|
git clone <repo-url>
|
||||||
|
cd apskel-pos-flutter-v2
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
flutter pub get
|
||||||
|
|
||||||
|
# Generate kode (freezed, injectable, auto_route, json_serializable)
|
||||||
|
dart run build_runner build --delete-conflicting-outputs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Menjalankan App
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Development
|
||||||
|
flutter run
|
||||||
|
|
||||||
|
# Release
|
||||||
|
flutter run --release
|
||||||
|
```
|
||||||
|
|
||||||
|
App otomatis menggunakan environment `dev` saat debug dan `prod` saat release.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
|
||||||
|
Konfigurasi environment ada di `lib/env.dart`:
|
||||||
|
|
||||||
|
| Environment | Base URL | Database |
|
||||||
|
|---|---|---|
|
||||||
|
| `dev` | `https://api-pos.apskel.id` | `apskel_pos_dev.db` |
|
||||||
|
| `prod` | `https://api-pos.apskel.id` | `apskel_pos_dev.db` |
|
||||||
|
|
||||||
|
Environment dipilih otomatis di `main.dart`:
|
||||||
|
|
||||||
|
```dart
|
||||||
|
await configureDependencies(
|
||||||
|
kReleaseMode ? Environment.prod : Environment.dev,
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependency Injection
|
||||||
|
|
||||||
|
DI menggunakan `get_it` + `injectable`. Semua service, repository, dan BLoC didaftarkan via annotation.
|
||||||
|
|
||||||
|
### Modul DI
|
||||||
|
|
||||||
|
| File | Isi |
|
||||||
|
|---|---|
|
||||||
|
| `di_firebase.dart` | `FirebaseMessaging`, `FlutterLocalNotificationsPlugin`, `DeviceInfoPlugin`, `PackageInfo` |
|
||||||
|
| `di_dio.dart` | `Dio` HTTP client |
|
||||||
|
| `di_shared_preferences.dart` | `SharedPreferences` |
|
||||||
|
| `di_database.dart` | `DatabaseHelper` (SQLite) |
|
||||||
|
| `di_auto_route.dart` | `AppRouter` |
|
||||||
|
| `di_connectivity.dart` | `Connectivity` |
|
||||||
|
|
||||||
|
Setelah menambah atau mengubah class yang menggunakan annotation injectable, jalankan:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dart run build_runner build --delete-conflicting-outputs
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Firebase & FCM
|
||||||
|
|
||||||
|
### Setup
|
||||||
|
|
||||||
|
Firebase sudah dikonfigurasi di `android/app/google-services.json`. Inisialisasi dilakukan di `main.dart` sebelum app berjalan.
|
||||||
|
|
||||||
|
### FCM Service
|
||||||
|
|
||||||
|
`FcmService` (`lib/common/service/fcm_service.dart`) menangani:
|
||||||
|
|
||||||
|
- Request permission notifikasi (Android 13+ / iOS)
|
||||||
|
- Ambil dan log FCM token
|
||||||
|
- Foreground notification via `flutter_local_notifications`
|
||||||
|
- Background & terminated message handler
|
||||||
|
- Subscribe/unsubscribe topic
|
||||||
|
|
||||||
|
FCM token dikirim ke server saat login bersama device info.
|
||||||
|
|
||||||
|
### Login Payload
|
||||||
|
|
||||||
|
Saat login, app mengirim data berikut ke API:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"email": "user@example.com",
|
||||||
|
"password": "secret",
|
||||||
|
"fcm_token": "dXj3k9...",
|
||||||
|
"device_id": "abc123",
|
||||||
|
"device_name": "Samsung Galaxy Tab S8",
|
||||||
|
"device_type": "tablet",
|
||||||
|
"platform": "android",
|
||||||
|
"app_version": "1.0.4+9",
|
||||||
|
"os_version": "Android 13 (SDK 33)"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Nilai valid: `device_type` → `mobile | tablet | desktop`, `platform` → `android | ios | web`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Printer
|
||||||
|
|
||||||
|
Mendukung dua jenis printer:
|
||||||
|
|
||||||
|
- **Bluetooth** — via `print_bluetooth_thermal`
|
||||||
|
- **Network (LAN)** — via `flutter_esc_pos_network`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Orientasi Layar
|
||||||
|
|
||||||
|
App dikunci ke mode **landscape** (kiri & kanan) karena didesain untuk tablet POS.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Catatan Development
|
||||||
|
|
||||||
|
- Jangan edit `injection.config.dart` dan file `*.freezed.dart` / `*.g.dart` secara manual — file tersebut di-generate otomatis
|
||||||
|
- Gunakan `log()` dari `dart:developer` untuk logging, bukan `print()`
|
||||||
|
- `print()` dinonaktifkan di release mode
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ linter:
|
|||||||
rules:
|
rules:
|
||||||
sort_pub_dependencies: false
|
sort_pub_dependencies: false
|
||||||
prefer_relative_imports: true
|
prefer_relative_imports: true
|
||||||
|
prefer_const_constructors: true
|
||||||
|
prefer_const_literals_to_create_immutables: true
|
||||||
|
prefer_const_declarations: true
|
||||||
|
|
||||||
analyzer:
|
analyzer:
|
||||||
errors:
|
errors:
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ android {
|
|||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
targetCompatibility = JavaVersion.VERSION_11
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
isCoreLibraryDesugaringEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
@@ -45,6 +46,8 @@ flutter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
|
||||||
|
|
||||||
// Import the Firebase BoM
|
// Import the Firebase BoM
|
||||||
implementation(platform("com.google.firebase:firebase-bom:34.4.0"))
|
implementation(platform("com.google.firebase:firebase-bom:34.4.0"))
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||||
<!-- Izin khusus untuk akses foto (media images) di Android 33 ke atas -->
|
<!-- Izin khusus untuk akses foto (media images) di Android 33 ke atas -->
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||||
|
<!-- Izin notifikasi untuk Android 13+ -->
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<application
|
<application
|
||||||
android:label="Apskel POS"
|
android:label="Apskel POS"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
@@ -41,6 +43,13 @@
|
|||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
|
<!-- FCM: default notification icon dan channel -->
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.messaging.default_notification_icon"
|
||||||
|
android:resource="@drawable/ic_notification" />
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||||
|
android:value="high_importance_channel" />
|
||||||
</application>
|
</application>
|
||||||
<!-- Required to query activities that can process text, see:
|
<!-- Required to query activities that can process text, see:
|
||||||
https://developer.android.com/training/package-visibility and
|
https://developer.android.com/training/package-visibility and
|
||||||
|
|||||||
|
After Width: | Height: | Size: 846 B |
|
After Width: | Height: | Size: 431 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
@@ -1,3 +1,7 @@
|
|||||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=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
|
||||||
|
|||||||
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 135 KiB |
@@ -0,0 +1,3 @@
|
|||||||
|
description: This file stores settings for Dart & Flutter DevTools.
|
||||||
|
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||||
|
extensions:
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'category_analytic_loader_event.dart';
|
||||||
|
part 'category_analytic_loader_state.dart';
|
||||||
|
part 'category_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class CategoryAnalyticLoaderBloc
|
||||||
|
extends Bloc<CategoryAnalyticLoaderEvent, CategoryAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
CategoryAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(CategoryAnalyticLoaderState.initial()) {
|
||||||
|
on<CategoryAnalyticLoaderEvent>(_onCategoryAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onCategoryAnalyticLoaderEvent(
|
||||||
|
CategoryAnalyticLoaderEvent event,
|
||||||
|
Emitter<CategoryAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getCategories(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(categories) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(isFetching: false, categoryAnalytic: categories),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,476 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'category_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$CategoryAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$CategoryAnalyticLoaderEventCopyWith<CategoryAnalyticLoaderEvent>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $CategoryAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $CategoryAnalyticLoaderEventCopyWith(
|
||||||
|
CategoryAnalyticLoaderEvent value,
|
||||||
|
$Res Function(CategoryAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$CategoryAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
CategoryAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$CategoryAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends CategoryAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $CategoryAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$CategoryAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $CategoryAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$CategoryAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CategoryAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements CategoryAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$CategoryAnalyticLoaderState {
|
||||||
|
CategoryAnalytic get categoryAnalytic => throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$CategoryAnalyticLoaderStateCopyWith<CategoryAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $CategoryAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $CategoryAnalyticLoaderStateCopyWith(
|
||||||
|
CategoryAnalyticLoaderState value,
|
||||||
|
$Res Function(CategoryAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$CategoryAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
CategoryAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
CategoryAnalytic categoryAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$CategoryAnalyticCopyWith<$Res> get categoryAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$CategoryAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends CategoryAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $CategoryAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$CategoryAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? categoryAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
categoryAnalytic: null == categoryAnalytic
|
||||||
|
? _value.categoryAnalytic
|
||||||
|
: categoryAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as CategoryAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$CategoryAnalyticCopyWith<$Res> get categoryAnalytic {
|
||||||
|
return $CategoryAnalyticCopyWith<$Res>(_value.categoryAnalytic, (value) {
|
||||||
|
return _then(_value.copyWith(categoryAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$CategoryAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $CategoryAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$CategoryAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$CategoryAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$CategoryAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$CategoryAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
CategoryAnalytic categoryAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$CategoryAnalyticCopyWith<$Res> get categoryAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$CategoryAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$CategoryAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$CategoryAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$CategoryAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$CategoryAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$CategoryAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$CategoryAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? categoryAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$CategoryAnalyticLoaderStateImpl(
|
||||||
|
categoryAnalytic: null == categoryAnalytic
|
||||||
|
? _value.categoryAnalytic
|
||||||
|
: categoryAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as CategoryAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$CategoryAnalyticLoaderStateImpl
|
||||||
|
implements _CategoryAnalyticLoaderState {
|
||||||
|
_$CategoryAnalyticLoaderStateImpl({
|
||||||
|
required this.categoryAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final CategoryAnalytic categoryAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CategoryAnalyticLoaderState(categoryAnalytic: $categoryAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$CategoryAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.categoryAnalytic, categoryAnalytic) ||
|
||||||
|
other.categoryAnalytic == categoryAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, categoryAnalytic, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$CategoryAnalyticLoaderStateImplCopyWith<_$CategoryAnalyticLoaderStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$CategoryAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$CategoryAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _CategoryAnalyticLoaderState
|
||||||
|
implements CategoryAnalyticLoaderState {
|
||||||
|
factory _CategoryAnalyticLoaderState({
|
||||||
|
required final CategoryAnalytic categoryAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$CategoryAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
CategoryAnalytic get categoryAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of CategoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$CategoryAnalyticLoaderStateImplCopyWith<_$CategoryAnalyticLoaderStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'category_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class CategoryAnalyticLoaderEvent with _$CategoryAnalyticLoaderEvent {
|
||||||
|
const factory CategoryAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
part of 'category_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class CategoryAnalyticLoaderState with _$CategoryAnalyticLoaderState {
|
||||||
|
factory CategoryAnalyticLoaderState({
|
||||||
|
required CategoryAnalytic categoryAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _CategoryAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory CategoryAnalyticLoaderState.initial() => CategoryAnalyticLoaderState(
|
||||||
|
categoryAnalytic: CategoryAnalytic.empty(),
|
||||||
|
failureOption: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'dashboard_analytic_loader_event.dart';
|
||||||
|
part 'dashboard_analytic_loader_state.dart';
|
||||||
|
part 'dashboard_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class DashboardAnalyticLoaderBloc
|
||||||
|
extends Bloc<DashboardAnalyticLoaderEvent, DashboardAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
|
||||||
|
DashboardAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(DashboardAnalyticLoaderState.initial()) {
|
||||||
|
on<DashboardAnalyticLoaderEvent>(_onDashboardAnalyticLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onDashboardAnalyticLoader(
|
||||||
|
DashboardAnalyticLoaderEvent event,
|
||||||
|
Emitter<DashboardAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getDashboard(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(dashboard) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(isFetching: false, dashboardAnalytic: dashboard),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,480 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'dashboard_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$DashboardAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$DashboardAnalyticLoaderEventCopyWith<DashboardAnalyticLoaderEvent>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $DashboardAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $DashboardAnalyticLoaderEventCopyWith(
|
||||||
|
DashboardAnalyticLoaderEvent value,
|
||||||
|
$Res Function(DashboardAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$DashboardAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
DashboardAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$DashboardAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends DashboardAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $DashboardAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$DashboardAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $DashboardAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$DashboardAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'DashboardAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements DashboardAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$DashboardAnalyticLoaderState {
|
||||||
|
DashboardAnalytic get dashboardAnalytic => throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$DashboardAnalyticLoaderStateCopyWith<DashboardAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $DashboardAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $DashboardAnalyticLoaderStateCopyWith(
|
||||||
|
DashboardAnalyticLoaderState value,
|
||||||
|
$Res Function(DashboardAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$DashboardAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
DashboardAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
DashboardAnalytic dashboardAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$DashboardAnalyticCopyWith<$Res> get dashboardAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$DashboardAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends DashboardAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $DashboardAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$DashboardAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? dashboardAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
dashboardAnalytic: null == dashboardAnalytic
|
||||||
|
? _value.dashboardAnalytic
|
||||||
|
: dashboardAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DashboardAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$DashboardAnalyticCopyWith<$Res> get dashboardAnalytic {
|
||||||
|
return $DashboardAnalyticCopyWith<$Res>(_value.dashboardAnalytic, (value) {
|
||||||
|
return _then(_value.copyWith(dashboardAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$DashboardAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $DashboardAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$DashboardAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$DashboardAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$DashboardAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$DashboardAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
DashboardAnalytic dashboardAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$DashboardAnalyticCopyWith<$Res> get dashboardAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$DashboardAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$DashboardAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$DashboardAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$DashboardAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$DashboardAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$DashboardAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$DashboardAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? dashboardAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$DashboardAnalyticLoaderStateImpl(
|
||||||
|
dashboardAnalytic: null == dashboardAnalytic
|
||||||
|
? _value.dashboardAnalytic
|
||||||
|
: dashboardAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DashboardAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$DashboardAnalyticLoaderStateImpl
|
||||||
|
implements _DashboardAnalyticLoaderState {
|
||||||
|
_$DashboardAnalyticLoaderStateImpl({
|
||||||
|
required this.dashboardAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DashboardAnalytic dashboardAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'DashboardAnalyticLoaderState(dashboardAnalytic: $dashboardAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$DashboardAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.dashboardAnalytic, dashboardAnalytic) ||
|
||||||
|
other.dashboardAnalytic == dashboardAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, dashboardAnalytic, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$DashboardAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$DashboardAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith =>
|
||||||
|
__$$DashboardAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$DashboardAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _DashboardAnalyticLoaderState
|
||||||
|
implements DashboardAnalyticLoaderState {
|
||||||
|
factory _DashboardAnalyticLoaderState({
|
||||||
|
required final DashboardAnalytic dashboardAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$DashboardAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DashboardAnalytic get dashboardAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of DashboardAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$DashboardAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$DashboardAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'dashboard_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class DashboardAnalyticLoaderEvent with _$DashboardAnalyticLoaderEvent {
|
||||||
|
const factory DashboardAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
part of 'dashboard_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class DashboardAnalyticLoaderState with _$DashboardAnalyticLoaderState {
|
||||||
|
factory DashboardAnalyticLoaderState({
|
||||||
|
required DashboardAnalytic dashboardAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _DashboardAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory DashboardAnalyticLoaderState.initial() =>
|
||||||
|
DashboardAnalyticLoaderState(
|
||||||
|
dashboardAnalytic: DashboardAnalytic.empty(),
|
||||||
|
failureOption: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'inventory_analytic_loader_event.dart';
|
||||||
|
part 'inventory_analytic_loader_state.dart';
|
||||||
|
part 'inventory_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class InventoryAnalyticLoaderBloc
|
||||||
|
extends Bloc<InventoryAnalyticLoaderEvent, InventoryAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
InventoryAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(InventoryAnalyticLoaderState.initial()) {
|
||||||
|
on<InventoryAnalyticLoaderEvent>(_onInventoryAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onInventoryAnalyticLoaderEvent(
|
||||||
|
InventoryAnalyticLoaderEvent event,
|
||||||
|
Emitter<InventoryAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getInventory(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
result.fold(
|
||||||
|
(l) => state.copyWith(isFetching: false, failureOption: some(l)),
|
||||||
|
(r) => state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: none(),
|
||||||
|
inventoryAnalytic: r,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,480 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'inventory_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$InventoryAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$InventoryAnalyticLoaderEventCopyWith<InventoryAnalyticLoaderEvent>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $InventoryAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $InventoryAnalyticLoaderEventCopyWith(
|
||||||
|
InventoryAnalyticLoaderEvent value,
|
||||||
|
$Res Function(InventoryAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$InventoryAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
InventoryAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$InventoryAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends InventoryAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $InventoryAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$InventoryAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $InventoryAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$InventoryAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'InventoryAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements InventoryAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$InventoryAnalyticLoaderState {
|
||||||
|
InventoryAnalytic get inventoryAnalytic => throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$InventoryAnalyticLoaderStateCopyWith<InventoryAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $InventoryAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $InventoryAnalyticLoaderStateCopyWith(
|
||||||
|
InventoryAnalyticLoaderState value,
|
||||||
|
$Res Function(InventoryAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$InventoryAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
InventoryAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
InventoryAnalytic inventoryAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$InventoryAnalyticCopyWith<$Res> get inventoryAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$InventoryAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends InventoryAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $InventoryAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$InventoryAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? inventoryAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
inventoryAnalytic: null == inventoryAnalytic
|
||||||
|
? _value.inventoryAnalytic
|
||||||
|
: inventoryAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as InventoryAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$InventoryAnalyticCopyWith<$Res> get inventoryAnalytic {
|
||||||
|
return $InventoryAnalyticCopyWith<$Res>(_value.inventoryAnalytic, (value) {
|
||||||
|
return _then(_value.copyWith(inventoryAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$InventoryAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $InventoryAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$InventoryAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$InventoryAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$InventoryAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$InventoryAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
InventoryAnalytic inventoryAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$InventoryAnalyticCopyWith<$Res> get inventoryAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$InventoryAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$InventoryAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$InventoryAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$InventoryAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$InventoryAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$InventoryAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$InventoryAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? inventoryAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$InventoryAnalyticLoaderStateImpl(
|
||||||
|
inventoryAnalytic: null == inventoryAnalytic
|
||||||
|
? _value.inventoryAnalytic
|
||||||
|
: inventoryAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as InventoryAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$InventoryAnalyticLoaderStateImpl
|
||||||
|
implements _InventoryAnalyticLoaderState {
|
||||||
|
_$InventoryAnalyticLoaderStateImpl({
|
||||||
|
required this.inventoryAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final InventoryAnalytic inventoryAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'InventoryAnalyticLoaderState(inventoryAnalytic: $inventoryAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$InventoryAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.inventoryAnalytic, inventoryAnalytic) ||
|
||||||
|
other.inventoryAnalytic == inventoryAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, inventoryAnalytic, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$InventoryAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$InventoryAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith =>
|
||||||
|
__$$InventoryAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$InventoryAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _InventoryAnalyticLoaderState
|
||||||
|
implements InventoryAnalyticLoaderState {
|
||||||
|
factory _InventoryAnalyticLoaderState({
|
||||||
|
required final InventoryAnalytic inventoryAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$InventoryAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
InventoryAnalytic get inventoryAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of InventoryAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$InventoryAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$InventoryAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'inventory_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class InventoryAnalyticLoaderEvent with _$InventoryAnalyticLoaderEvent {
|
||||||
|
const factory InventoryAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
part of 'inventory_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class InventoryAnalyticLoaderState with _$InventoryAnalyticLoaderState {
|
||||||
|
factory InventoryAnalyticLoaderState({
|
||||||
|
required InventoryAnalytic inventoryAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _InventoryAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory InventoryAnalyticLoaderState.initial() =>
|
||||||
|
InventoryAnalyticLoaderState(
|
||||||
|
inventoryAnalytic: InventoryAnalytic.empty(),
|
||||||
|
failureOption: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -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/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'payment_method_analytic_loader_event.dart';
|
||||||
|
part 'payment_method_analytic_loader_state.dart';
|
||||||
|
part 'payment_method_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PaymentMethodAnalyticLoaderBloc
|
||||||
|
extends
|
||||||
|
Bloc<
|
||||||
|
PaymentMethodAnalyticLoaderEvent,
|
||||||
|
PaymentMethodAnalyticLoaderState
|
||||||
|
> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
PaymentMethodAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(PaymentMethodAnalyticLoaderState.initial()) {
|
||||||
|
on<PaymentMethodAnalyticLoaderEvent>(_onPaymentMethodAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPaymentMethodAnalyticLoaderEvent(
|
||||||
|
PaymentMethodAnalyticLoaderEvent event,
|
||||||
|
Emitter<PaymentMethodAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getPaymentMethod(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(paymentMethod) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
paymentMethodAnalytic: paymentMethod,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,487 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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_method_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PaymentMethodAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PaymentMethodAnalyticLoaderEventCopyWith<PaymentMethodAnalyticLoaderEvent>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PaymentMethodAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $PaymentMethodAnalyticLoaderEventCopyWith(
|
||||||
|
PaymentMethodAnalyticLoaderEvent value,
|
||||||
|
$Res Function(PaymentMethodAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$PaymentMethodAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
PaymentMethodAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PaymentMethodAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends PaymentMethodAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $PaymentMethodAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$PaymentMethodAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $PaymentMethodAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$PaymentMethodAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PaymentMethodAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements PaymentMethodAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PaymentMethodAnalyticLoaderState {
|
||||||
|
PaymentMethodAnalytic get paymentMethodAnalytic =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PaymentMethodAnalyticLoaderStateCopyWith<PaymentMethodAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $PaymentMethodAnalyticLoaderStateCopyWith(
|
||||||
|
PaymentMethodAnalyticLoaderState value,
|
||||||
|
$Res Function(PaymentMethodAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
PaymentMethodAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends PaymentMethodAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$PaymentMethodAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? paymentMethodAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
paymentMethodAnalytic: null == paymentMethodAnalytic
|
||||||
|
? _value.paymentMethodAnalytic
|
||||||
|
: paymentMethodAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PaymentMethodAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic {
|
||||||
|
return $PaymentMethodAnalyticCopyWith<$Res>(_value.paymentMethodAnalytic, (
|
||||||
|
value,
|
||||||
|
) {
|
||||||
|
return _then(_value.copyWith(paymentMethodAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$PaymentMethodAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$PaymentMethodAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$PaymentMethodAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$PaymentMethodAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$PaymentMethodAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? paymentMethodAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl(
|
||||||
|
paymentMethodAnalytic: null == paymentMethodAnalytic
|
||||||
|
? _value.paymentMethodAnalytic
|
||||||
|
: paymentMethodAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PaymentMethodAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
implements _PaymentMethodAnalyticLoaderState {
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl({
|
||||||
|
required this.paymentMethodAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final PaymentMethodAnalytic paymentMethodAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PaymentMethodAnalyticLoaderState(paymentMethodAnalytic: $paymentMethodAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$PaymentMethodAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.paymentMethodAnalytic, paymentMethodAnalytic) ||
|
||||||
|
other.paymentMethodAnalytic == paymentMethodAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
paymentMethodAnalytic,
|
||||||
|
failureOption,
|
||||||
|
isFetching,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$PaymentMethodAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith =>
|
||||||
|
__$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _PaymentMethodAnalyticLoaderState
|
||||||
|
implements PaymentMethodAnalyticLoaderState {
|
||||||
|
factory _PaymentMethodAnalyticLoaderState({
|
||||||
|
required final PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$PaymentMethodAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
PaymentMethodAnalytic get paymentMethodAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$PaymentMethodAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'payment_method_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodAnalyticLoaderEvent with _$PaymentMethodAnalyticLoaderEvent {
|
||||||
|
const factory PaymentMethodAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
part of 'payment_method_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodAnalyticLoaderState with _$PaymentMethodAnalyticLoaderState {
|
||||||
|
factory PaymentMethodAnalyticLoaderState({
|
||||||
|
required PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _PaymentMethodAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory PaymentMethodAnalyticLoaderState.initial() =>
|
||||||
|
PaymentMethodAnalyticLoaderState(
|
||||||
|
paymentMethodAnalytic: PaymentMethodAnalytic.empty(),
|
||||||
|
failureOption: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'product_analytic_loader_event.dart';
|
||||||
|
part 'product_analytic_loader_state.dart';
|
||||||
|
part 'product_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class ProductAnalyticLoaderBloc
|
||||||
|
extends Bloc<ProductAnalyticLoaderEvent, ProductAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
ProductAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(ProductAnalyticLoaderState.initial()) {
|
||||||
|
on<ProductAnalyticLoaderEvent>(_onProductAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onProductAnalyticLoaderEvent(
|
||||||
|
ProductAnalyticLoaderEvent event,
|
||||||
|
Emitter<ProductAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getProducts(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(products) async {
|
||||||
|
emit(state.copyWith(isFetching: false, productAnalytic: products));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,475 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'product_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ProductAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$ProductAnalyticLoaderEventCopyWith<ProductAnalyticLoaderEvent>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ProductAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $ProductAnalyticLoaderEventCopyWith(
|
||||||
|
ProductAnalyticLoaderEvent value,
|
||||||
|
$Res Function(ProductAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$ProductAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
ProductAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ProductAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends ProductAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $ProductAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$ProductAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $ProductAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$ProductAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ProductAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements ProductAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ProductAnalyticLoaderState {
|
||||||
|
ProductAnalytic get productAnalytic => throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$ProductAnalyticLoaderStateCopyWith<ProductAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ProductAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $ProductAnalyticLoaderStateCopyWith(
|
||||||
|
ProductAnalyticLoaderState value,
|
||||||
|
$Res Function(ProductAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$ProductAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
ProductAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
ProductAnalytic productAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$ProductAnalyticCopyWith<$Res> get productAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ProductAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends ProductAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $ProductAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$ProductAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? productAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
productAnalytic: null == productAnalytic
|
||||||
|
? _value.productAnalytic
|
||||||
|
: productAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ProductAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$ProductAnalyticCopyWith<$Res> get productAnalytic {
|
||||||
|
return $ProductAnalyticCopyWith<$Res>(_value.productAnalytic, (value) {
|
||||||
|
return _then(_value.copyWith(productAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$ProductAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $ProductAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$ProductAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$ProductAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$ProductAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$ProductAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
ProductAnalytic productAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ProductAnalyticCopyWith<$Res> get productAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$ProductAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$ProductAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$ProductAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$ProductAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$ProductAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$ProductAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$ProductAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? productAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$ProductAnalyticLoaderStateImpl(
|
||||||
|
productAnalytic: null == productAnalytic
|
||||||
|
? _value.productAnalytic
|
||||||
|
: productAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ProductAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$ProductAnalyticLoaderStateImpl implements _ProductAnalyticLoaderState {
|
||||||
|
_$ProductAnalyticLoaderStateImpl({
|
||||||
|
required this.productAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final ProductAnalytic productAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ProductAnalyticLoaderState(productAnalytic: $productAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$ProductAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.productAnalytic, productAnalytic) ||
|
||||||
|
other.productAnalytic == productAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, productAnalytic, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$ProductAnalyticLoaderStateImplCopyWith<_$ProductAnalyticLoaderStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$ProductAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$ProductAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ProductAnalyticLoaderState
|
||||||
|
implements ProductAnalyticLoaderState {
|
||||||
|
factory _ProductAnalyticLoaderState({
|
||||||
|
required final ProductAnalytic productAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$ProductAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
ProductAnalytic get productAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$ProductAnalyticLoaderStateImplCopyWith<_$ProductAnalyticLoaderStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'product_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticLoaderEvent with _$ProductAnalyticLoaderEvent {
|
||||||
|
const factory ProductAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
part of 'product_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticLoaderState with _$ProductAnalyticLoaderState {
|
||||||
|
factory ProductAnalyticLoaderState({
|
||||||
|
required ProductAnalytic productAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _ProductAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory ProductAnalyticLoaderState.initial() => ProductAnalyticLoaderState(
|
||||||
|
productAnalytic: ProductAnalytic.empty(),
|
||||||
|
failureOption: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'profit_loss_analytic_loader_event.dart';
|
||||||
|
part 'profit_loss_analytic_loader_state.dart';
|
||||||
|
part 'profit_loss_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class ProfitLossAnalyticLoaderBloc
|
||||||
|
extends Bloc<ProfitLossAnalyticLoaderEvent, ProfitLossAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
ProfitLossAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(ProfitLossAnalyticLoaderState.initial()) {
|
||||||
|
on<ProfitLossAnalyticLoaderEvent>(_onProfitLossAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onProfitLossAnalyticLoaderEvent(
|
||||||
|
ProfitLossAnalyticLoaderEvent event,
|
||||||
|
Emitter<ProfitLossAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getProfitLoss(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(profitLoss) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(isFetching: false, profitLossAnalytic: profitLoss),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,483 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'profit_loss_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ProfitLossAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$ProfitLossAnalyticLoaderEventCopyWith<ProfitLossAnalyticLoaderEvent>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ProfitLossAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $ProfitLossAnalyticLoaderEventCopyWith(
|
||||||
|
ProfitLossAnalyticLoaderEvent value,
|
||||||
|
$Res Function(ProfitLossAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$ProfitLossAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
ProfitLossAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ProfitLossAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends ProfitLossAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $ProfitLossAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$ProfitLossAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $ProfitLossAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$ProfitLossAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ProfitLossAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements ProfitLossAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ProfitLossAnalyticLoaderState {
|
||||||
|
ProfitLossAnalytic get profitLossAnalytic =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$ProfitLossAnalyticLoaderStateCopyWith<ProfitLossAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ProfitLossAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $ProfitLossAnalyticLoaderStateCopyWith(
|
||||||
|
ProfitLossAnalyticLoaderState value,
|
||||||
|
$Res Function(ProfitLossAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$ProfitLossAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
ProfitLossAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
ProfitLossAnalytic profitLossAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$ProfitLossAnalyticCopyWith<$Res> get profitLossAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ProfitLossAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends ProfitLossAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $ProfitLossAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$ProfitLossAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? profitLossAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
profitLossAnalytic: null == profitLossAnalytic
|
||||||
|
? _value.profitLossAnalytic
|
||||||
|
: profitLossAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ProfitLossAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$ProfitLossAnalyticCopyWith<$Res> get profitLossAnalytic {
|
||||||
|
return $ProfitLossAnalyticCopyWith<$Res>(_value.profitLossAnalytic, (
|
||||||
|
value,
|
||||||
|
) {
|
||||||
|
return _then(_value.copyWith(profitLossAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$ProfitLossAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $ProfitLossAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$ProfitLossAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$ProfitLossAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$ProfitLossAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
ProfitLossAnalytic profitLossAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ProfitLossAnalyticCopyWith<$Res> get profitLossAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$ProfitLossAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$ProfitLossAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$ProfitLossAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$ProfitLossAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$ProfitLossAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? profitLossAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl(
|
||||||
|
profitLossAnalytic: null == profitLossAnalytic
|
||||||
|
? _value.profitLossAnalytic
|
||||||
|
: profitLossAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ProfitLossAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$ProfitLossAnalyticLoaderStateImpl
|
||||||
|
implements _ProfitLossAnalyticLoaderState {
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl({
|
||||||
|
required this.profitLossAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final ProfitLossAnalytic profitLossAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ProfitLossAnalyticLoaderState(profitLossAnalytic: $profitLossAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$ProfitLossAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.profitLossAnalytic, profitLossAnalytic) ||
|
||||||
|
other.profitLossAnalytic == profitLossAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, profitLossAnalytic, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$ProfitLossAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith =>
|
||||||
|
__$$ProfitLossAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ProfitLossAnalyticLoaderState
|
||||||
|
implements ProfitLossAnalyticLoaderState {
|
||||||
|
factory _ProfitLossAnalyticLoaderState({
|
||||||
|
required final ProfitLossAnalytic profitLossAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$ProfitLossAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
ProfitLossAnalytic get profitLossAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of ProfitLossAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$ProfitLossAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$ProfitLossAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'profit_loss_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProfitLossAnalyticLoaderEvent with _$ProfitLossAnalyticLoaderEvent {
|
||||||
|
const factory ProfitLossAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
part of 'profit_loss_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProfitLossAnalyticLoaderState with _$ProfitLossAnalyticLoaderState {
|
||||||
|
factory ProfitLossAnalyticLoaderState({
|
||||||
|
required ProfitLossAnalytic profitLossAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _ProfitLossAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory ProfitLossAnalyticLoaderState.initial() =>
|
||||||
|
ProfitLossAnalyticLoaderState(
|
||||||
|
profitLossAnalytic: ProfitLossAnalytic.empty(),
|
||||||
|
failureOption: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
|
||||||
|
part 'sales_analytic_loader_event.dart';
|
||||||
|
part 'sales_analytic_loader_state.dart';
|
||||||
|
part 'sales_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class SalesAnalyticLoaderBloc
|
||||||
|
extends Bloc<SalesAnalyticLoaderEvent, SalesAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _analyticRepository;
|
||||||
|
SalesAnalyticLoaderBloc(this._analyticRepository)
|
||||||
|
: super(SalesAnalyticLoaderState.initial()) {
|
||||||
|
on<SalesAnalyticLoaderEvent>(_onSalesAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onSalesAnalyticLoaderEvent(
|
||||||
|
SalesAnalyticLoaderEvent event,
|
||||||
|
Emitter<SalesAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _analyticRepository.getSales(
|
||||||
|
dateFrom: e.startDate,
|
||||||
|
dateTo: e.endDate,
|
||||||
|
);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(sales) async {
|
||||||
|
emit(state.copyWith(isFetching: false, salesAnalytic: sales));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,466 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'sales_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$SalesAnalyticLoaderEvent {
|
||||||
|
DateTime get startDate => throw _privateConstructorUsedError;
|
||||||
|
DateTime get endDate => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$SalesAnalyticLoaderEventCopyWith<SalesAnalyticLoaderEvent> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $SalesAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $SalesAnalyticLoaderEventCopyWith(
|
||||||
|
SalesAnalyticLoaderEvent value,
|
||||||
|
$Res Function(SalesAnalyticLoaderEvent) then,
|
||||||
|
) = _$SalesAnalyticLoaderEventCopyWithImpl<$Res, SalesAnalyticLoaderEvent>;
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SalesAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends SalesAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $SalesAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$SalesAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $SalesAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({DateTime startDate, DateTime endDate});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$SalesAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? startDate = null, Object? endDate = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
startDate: null == startDate
|
||||||
|
? _value.startDate
|
||||||
|
: startDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
endDate: null == endDate
|
||||||
|
? _value.endDate
|
||||||
|
: endDate // ignore: cast_nullable_to_non_nullable
|
||||||
|
as DateTime,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({required this.startDate, required this.endDate});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final DateTime startDate;
|
||||||
|
@override
|
||||||
|
final DateTime endDate;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'SalesAnalyticLoaderEvent.fetched(startDate: $startDate, endDate: $endDate)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.startDate, startDate) ||
|
||||||
|
other.startDate == startDate) &&
|
||||||
|
(identical(other.endDate, endDate) || other.endDate == endDate));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, startDate, endDate);
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(DateTime startDate, DateTime endDate) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(startDate, endDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(DateTime startDate, DateTime endDate)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(startDate, endDate);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements SalesAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched({
|
||||||
|
required final DateTime startDate,
|
||||||
|
required final DateTime endDate,
|
||||||
|
}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime get startDate;
|
||||||
|
@override
|
||||||
|
DateTime get endDate;
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$SalesAnalyticLoaderState {
|
||||||
|
SalesAnalytic get salesAnalytic => throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$SalesAnalyticLoaderStateCopyWith<SalesAnalyticLoaderState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $SalesAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $SalesAnalyticLoaderStateCopyWith(
|
||||||
|
SalesAnalyticLoaderState value,
|
||||||
|
$Res Function(SalesAnalyticLoaderState) then,
|
||||||
|
) = _$SalesAnalyticLoaderStateCopyWithImpl<$Res, SalesAnalyticLoaderState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
SalesAnalytic salesAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$SalesAnalyticCopyWith<$Res> get salesAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$SalesAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends SalesAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $SalesAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$SalesAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? salesAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
salesAnalytic: null == salesAnalytic
|
||||||
|
? _value.salesAnalytic
|
||||||
|
: salesAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as SalesAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$SalesAnalyticCopyWith<$Res> get salesAnalytic {
|
||||||
|
return $SalesAnalyticCopyWith<$Res>(_value.salesAnalytic, (value) {
|
||||||
|
return _then(_value.copyWith(salesAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$SalesAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $SalesAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$SalesAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$SalesAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$SalesAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$SalesAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
SalesAnalytic salesAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$SalesAnalyticCopyWith<$Res> get salesAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$SalesAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$SalesAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$SalesAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$SalesAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$SalesAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$SalesAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$SalesAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? salesAnalytic = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$SalesAnalyticLoaderStateImpl(
|
||||||
|
salesAnalytic: null == salesAnalytic
|
||||||
|
? _value.salesAnalytic
|
||||||
|
: salesAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as SalesAnalytic,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$SalesAnalyticLoaderStateImpl implements _SalesAnalyticLoaderState {
|
||||||
|
_$SalesAnalyticLoaderStateImpl({
|
||||||
|
required this.salesAnalytic,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final SalesAnalytic salesAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'SalesAnalyticLoaderState(salesAnalytic: $salesAnalytic, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$SalesAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.salesAnalytic, salesAnalytic) ||
|
||||||
|
other.salesAnalytic == salesAnalytic) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, salesAnalytic, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$SalesAnalyticLoaderStateImplCopyWith<_$SalesAnalyticLoaderStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$SalesAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$SalesAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _SalesAnalyticLoaderState implements SalesAnalyticLoaderState {
|
||||||
|
factory _SalesAnalyticLoaderState({
|
||||||
|
required final SalesAnalytic salesAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$SalesAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
SalesAnalytic get salesAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of SalesAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$SalesAnalyticLoaderStateImplCopyWith<_$SalesAnalyticLoaderStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'sales_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class SalesAnalyticLoaderEvent with _$SalesAnalyticLoaderEvent {
|
||||||
|
const factory SalesAnalyticLoaderEvent.fetched({
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
part of 'sales_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class SalesAnalyticLoaderState with _$SalesAnalyticLoaderState {
|
||||||
|
factory SalesAnalyticLoaderState({
|
||||||
|
required SalesAnalytic salesAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _SalesAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory SalesAnalyticLoaderState.initial() => SalesAnalyticLoaderState(
|
||||||
|
failureOption: none(),
|
||||||
|
salesAnalytic: SalesAnalytic.empty(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -33,16 +33,16 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
|
|||||||
state.copyWith(
|
state.copyWith(
|
||||||
failureOption: optionOf(f),
|
failureOption: optionOf(f),
|
||||||
status: token
|
status: token
|
||||||
? AuthStatus.authenticated()
|
? const AuthStatus.authenticated()
|
||||||
: AuthStatus.unauthenticated(),
|
: const AuthStatus.unauthenticated(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(user) => emit(
|
(user) => emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
user: user,
|
user: user,
|
||||||
status: token
|
status: token
|
||||||
? AuthStatus.authenticated()
|
? const AuthStatus.authenticated()
|
||||||
: AuthStatus.unauthenticated(),
|
: const AuthStatus.unauthenticated(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import 'package:dartz/dartz.dart';
|
|||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'package:injectable/injectable.dart';
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../common/service/device_info_service.dart';
|
||||||
|
import '../../../common/service/fcm_service.dart';
|
||||||
import '../../../domain/auth/auth.dart';
|
import '../../../domain/auth/auth.dart';
|
||||||
|
|
||||||
part 'login_form_event.dart';
|
part 'login_form_event.dart';
|
||||||
@@ -14,7 +16,14 @@ part 'login_form_bloc.freezed.dart';
|
|||||||
@injectable
|
@injectable
|
||||||
class LoginFormBloc extends Bloc<LoginFormEvent, LoginFormState> {
|
class LoginFormBloc extends Bloc<LoginFormEvent, LoginFormState> {
|
||||||
final IAuthRepository _authRepository;
|
final IAuthRepository _authRepository;
|
||||||
LoginFormBloc(this._authRepository) : super(LoginFormState.initial()) {
|
final FcmService _fcmService;
|
||||||
|
final DeviceInfoService _deviceInfoService;
|
||||||
|
|
||||||
|
LoginFormBloc(
|
||||||
|
this._authRepository,
|
||||||
|
this._fcmService,
|
||||||
|
this._deviceInfoService,
|
||||||
|
) : super(LoginFormState.initial()) {
|
||||||
on<LoginFormEvent>(_onLoginFormEvent);
|
on<LoginFormEvent>(_onLoginFormEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,9 +52,14 @@ class LoginFormBloc extends Bloc<LoginFormEvent, LoginFormState> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (emailValid && passwordValid) {
|
if (emailValid && passwordValid) {
|
||||||
|
final fcmToken = await _fcmService.getToken() ?? '';
|
||||||
|
final devicePayload = await _deviceInfoService.getDevicePayload();
|
||||||
|
|
||||||
failureOrLogin = await _authRepository.login(
|
failureOrLogin = await _authRepository.login(
|
||||||
email: state.email,
|
email: state.email,
|
||||||
password: state.password,
|
password: state.password,
|
||||||
|
fcmToken: fcmToken,
|
||||||
|
devicePayload: devicePayload,
|
||||||
);
|
);
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
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 'logout_event.dart';
|
||||||
|
part 'logout_state.dart';
|
||||||
|
part 'logout_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class LogoutBloc extends Bloc<LogoutEvent, LogoutState> {
|
||||||
|
final IAuthRepository _authRepository;
|
||||||
|
LogoutBloc(this._authRepository) : super(LogoutState.initial()) {
|
||||||
|
on<LogoutEvent>(_onLogoutEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onLogoutEvent(LogoutEvent event, Emitter<LogoutState> emit) {
|
||||||
|
return event.map(
|
||||||
|
logout: (e) async {
|
||||||
|
Either<AuthFailure, Unit>? failureOrSuccess;
|
||||||
|
emit(
|
||||||
|
state.copyWith(isLoggingOut: true, logoutFailureOrSuccess: none()),
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrSuccess = await _authRepository.logout();
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isLoggingOut: false,
|
||||||
|
logoutFailureOrSuccess: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,332 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$LogoutEvent {
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({required TResult Function() logout}) =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? logout}) =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? logout,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Logout value) logout,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Logout value)? logout,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Logout value)? logout,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $LogoutEventCopyWith<$Res> {
|
||||||
|
factory $LogoutEventCopyWith(
|
||||||
|
LogoutEvent value,
|
||||||
|
$Res Function(LogoutEvent) then,
|
||||||
|
) = _$LogoutEventCopyWithImpl<$Res, LogoutEvent>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$LogoutEventCopyWithImpl<$Res, $Val extends LogoutEvent>
|
||||||
|
implements $LogoutEventCopyWith<$Res> {
|
||||||
|
_$LogoutEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of LogoutEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$LogoutImplCopyWith<$Res> {
|
||||||
|
factory _$$LogoutImplCopyWith(
|
||||||
|
_$LogoutImpl value,
|
||||||
|
$Res Function(_$LogoutImpl) then,
|
||||||
|
) = __$$LogoutImplCopyWithImpl<$Res>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$LogoutImplCopyWithImpl<$Res>
|
||||||
|
extends _$LogoutEventCopyWithImpl<$Res, _$LogoutImpl>
|
||||||
|
implements _$$LogoutImplCopyWith<$Res> {
|
||||||
|
__$$LogoutImplCopyWithImpl(
|
||||||
|
_$LogoutImpl _value,
|
||||||
|
$Res Function(_$LogoutImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of LogoutEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$LogoutImpl implements _Logout {
|
||||||
|
const _$LogoutImpl();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'LogoutEvent.logout()';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType && other is _$LogoutImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => runtimeType.hashCode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({required TResult Function() logout}) {
|
||||||
|
return logout();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? logout}) {
|
||||||
|
return logout?.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? logout,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (logout != null) {
|
||||||
|
return logout();
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Logout value) logout,
|
||||||
|
}) {
|
||||||
|
return logout(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Logout value)? logout,
|
||||||
|
}) {
|
||||||
|
return logout?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Logout value)? logout,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (logout != null) {
|
||||||
|
return logout(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Logout implements LogoutEvent {
|
||||||
|
const factory _Logout() = _$LogoutImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$LogoutState {
|
||||||
|
Option<Either<AuthFailure, Unit>> get logoutFailureOrSuccess =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isLoggingOut => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of LogoutState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$LogoutStateCopyWith<LogoutState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $LogoutStateCopyWith<$Res> {
|
||||||
|
factory $LogoutStateCopyWith(
|
||||||
|
LogoutState value,
|
||||||
|
$Res Function(LogoutState) then,
|
||||||
|
) = _$LogoutStateCopyWithImpl<$Res, LogoutState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
Option<Either<AuthFailure, Unit>> logoutFailureOrSuccess,
|
||||||
|
bool isLoggingOut,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$LogoutStateCopyWithImpl<$Res, $Val extends LogoutState>
|
||||||
|
implements $LogoutStateCopyWith<$Res> {
|
||||||
|
_$LogoutStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of LogoutState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? logoutFailureOrSuccess = null,
|
||||||
|
Object? isLoggingOut = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
logoutFailureOrSuccess: null == logoutFailureOrSuccess
|
||||||
|
? _value.logoutFailureOrSuccess
|
||||||
|
: logoutFailureOrSuccess // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<Either<AuthFailure, Unit>>,
|
||||||
|
isLoggingOut: null == isLoggingOut
|
||||||
|
? _value.isLoggingOut
|
||||||
|
: isLoggingOut // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$LogoutStateImplCopyWith<$Res>
|
||||||
|
implements $LogoutStateCopyWith<$Res> {
|
||||||
|
factory _$$LogoutStateImplCopyWith(
|
||||||
|
_$LogoutStateImpl value,
|
||||||
|
$Res Function(_$LogoutStateImpl) then,
|
||||||
|
) = __$$LogoutStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
Option<Either<AuthFailure, Unit>> logoutFailureOrSuccess,
|
||||||
|
bool isLoggingOut,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$LogoutStateImplCopyWithImpl<$Res>
|
||||||
|
extends _$LogoutStateCopyWithImpl<$Res, _$LogoutStateImpl>
|
||||||
|
implements _$$LogoutStateImplCopyWith<$Res> {
|
||||||
|
__$$LogoutStateImplCopyWithImpl(
|
||||||
|
_$LogoutStateImpl _value,
|
||||||
|
$Res Function(_$LogoutStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of LogoutState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? logoutFailureOrSuccess = null,
|
||||||
|
Object? isLoggingOut = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$LogoutStateImpl(
|
||||||
|
logoutFailureOrSuccess: null == logoutFailureOrSuccess
|
||||||
|
? _value.logoutFailureOrSuccess
|
||||||
|
: logoutFailureOrSuccess // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<Either<AuthFailure, Unit>>,
|
||||||
|
isLoggingOut: null == isLoggingOut
|
||||||
|
? _value.isLoggingOut
|
||||||
|
: isLoggingOut // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$LogoutStateImpl implements _LogoutState {
|
||||||
|
_$LogoutStateImpl({
|
||||||
|
required this.logoutFailureOrSuccess,
|
||||||
|
this.isLoggingOut = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Option<Either<AuthFailure, Unit>> logoutFailureOrSuccess;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isLoggingOut;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'LogoutState(logoutFailureOrSuccess: $logoutFailureOrSuccess, isLoggingOut: $isLoggingOut)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$LogoutStateImpl &&
|
||||||
|
(identical(other.logoutFailureOrSuccess, logoutFailureOrSuccess) ||
|
||||||
|
other.logoutFailureOrSuccess == logoutFailureOrSuccess) &&
|
||||||
|
(identical(other.isLoggingOut, isLoggingOut) ||
|
||||||
|
other.isLoggingOut == isLoggingOut));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, logoutFailureOrSuccess, isLoggingOut);
|
||||||
|
|
||||||
|
/// Create a copy of LogoutState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$LogoutStateImplCopyWith<_$LogoutStateImpl> get copyWith =>
|
||||||
|
__$$LogoutStateImplCopyWithImpl<_$LogoutStateImpl>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _LogoutState implements LogoutState {
|
||||||
|
factory _LogoutState({
|
||||||
|
required final Option<Either<AuthFailure, Unit>> logoutFailureOrSuccess,
|
||||||
|
final bool isLoggingOut,
|
||||||
|
}) = _$LogoutStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Option<Either<AuthFailure, Unit>> get logoutFailureOrSuccess;
|
||||||
|
@override
|
||||||
|
bool get isLoggingOut;
|
||||||
|
|
||||||
|
/// Create a copy of LogoutState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$LogoutStateImplCopyWith<_$LogoutStateImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
part of 'logout_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class LogoutEvent with _$LogoutEvent {
|
||||||
|
const factory LogoutEvent.logout() = _Logout;
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
part of 'logout_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class LogoutState with _$LogoutState {
|
||||||
|
factory LogoutState({
|
||||||
|
required Option<Either<AuthFailure, Unit>> logoutFailureOrSuccess,
|
||||||
|
@Default(false) bool isLoggingOut,
|
||||||
|
}) = _LogoutState;
|
||||||
|
|
||||||
|
factory LogoutState.initial() => LogoutState(logoutFailureOrSuccess: none());
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'dart:developer';
|
|||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
import '../../../domain/category/category.dart';
|
import '../../../domain/category/category.dart';
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ part 'category_loader_event.dart';
|
|||||||
part 'category_loader_state.dart';
|
part 'category_loader_state.dart';
|
||||||
part 'category_loader_bloc.freezed.dart';
|
part 'category_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
class CategoryLoaderBloc
|
class CategoryLoaderBloc
|
||||||
extends Bloc<CategoryLoaderEvent, CategoryLoaderState> {
|
extends Bloc<CategoryLoaderEvent, CategoryLoaderState> {
|
||||||
final ICategoryRepository _categoryRepository;
|
final ICategoryRepository _categoryRepository;
|
||||||
@@ -173,7 +175,7 @@ class CategoryLoaderBloc
|
|||||||
_searchDebounce?.cancel();
|
_searchDebounce?.cancel();
|
||||||
|
|
||||||
// Debounce search for better UX
|
// Debounce search for better UX
|
||||||
_searchDebounce = Timer(Duration(milliseconds: 300), () async {
|
_searchDebounce = Timer(const Duration(milliseconds: 300), () async {
|
||||||
emit(state.copyWith(isLoadingMore: true));
|
emit(state.copyWith(isLoadingMore: true));
|
||||||
_isLoadingMore = false;
|
_isLoadingMore = false;
|
||||||
|
|
||||||
@@ -235,7 +237,7 @@ class CategoryLoaderBloc
|
|||||||
);
|
);
|
||||||
|
|
||||||
// After sync error, try to load local data
|
// After sync error, try to load local data
|
||||||
Timer(Duration(seconds: 2), () {
|
Timer(const Duration(seconds: 2), () {
|
||||||
add(const CategoryLoaderEvent.getCategories());
|
add(const CategoryLoaderEvent.getCategories());
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -249,7 +251,7 @@ class CategoryLoaderBloc
|
|||||||
);
|
);
|
||||||
|
|
||||||
// After successful sync, load the updated data
|
// After successful sync, load the updated data
|
||||||
Timer(Duration(seconds: 1), () {
|
Timer(const Duration(seconds: 1), () {
|
||||||
add(const CategoryLoaderEvent.getCategories());
|
add(const CategoryLoaderEvent.getCategories());
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,188 @@
|
|||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
|
||||||
|
import '../../../common/types/order_type.dart';
|
||||||
|
import '../../../domain/delivery/delivery.dart';
|
||||||
|
import '../../../domain/order/order.dart';
|
||||||
|
import '../../../domain/product/product.dart';
|
||||||
|
import '../../../domain/table/table.dart';
|
||||||
|
|
||||||
|
part 'checkout_form_event.dart';
|
||||||
|
part 'checkout_form_state.dart';
|
||||||
|
part 'checkout_form_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class CheckoutFormBloc extends Bloc<CheckoutFormEvent, CheckoutFormState> {
|
||||||
|
CheckoutFormBloc() : super(CheckoutFormState.initial()) {
|
||||||
|
on<CheckoutFormEvent>(_onCheckoutFormEvent);
|
||||||
|
}
|
||||||
|
Future<void> _onCheckoutFormEvent(
|
||||||
|
CheckoutFormEvent event,
|
||||||
|
Emitter<CheckoutFormState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
addItem: (e) async {
|
||||||
|
final currentState = state;
|
||||||
|
emit(currentState.copyWith(isLoading: true));
|
||||||
|
|
||||||
|
List<ProductQuantity> items = [...currentState.items];
|
||||||
|
|
||||||
|
final index = items.indexWhere(
|
||||||
|
(element) =>
|
||||||
|
element.product.id == e.product.id &&
|
||||||
|
element.variant?.id == e.variant?.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
// Jika sudah ada → tambah quantity
|
||||||
|
items[index] = items[index].copyWith(
|
||||||
|
quantity: items[index].quantity + 1,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Jika belum ada → tambahkan item baru
|
||||||
|
items.add(
|
||||||
|
ProductQuantity(
|
||||||
|
product: e.product,
|
||||||
|
quantity: 1,
|
||||||
|
variant: e.variant,
|
||||||
|
notes: '',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
log('đź›’ Items updated: ${items.length} items total ${items.toList()}');
|
||||||
|
|
||||||
|
final totalQuantity = items.fold<int>(
|
||||||
|
0,
|
||||||
|
(sum, item) => sum + item.quantity,
|
||||||
|
);
|
||||||
|
|
||||||
|
final totalPrice = state.items.isEmpty
|
||||||
|
? 0.0
|
||||||
|
: state.items
|
||||||
|
.map(
|
||||||
|
(e) =>
|
||||||
|
(e.product.price * e.quantity) +
|
||||||
|
(e.variant?.priceModifier ?? 0),
|
||||||
|
)
|
||||||
|
.reduce((value, element) => value + element);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
currentState.copyWith(
|
||||||
|
items: items,
|
||||||
|
totalQuantity: totalQuantity,
|
||||||
|
totalPrice: totalPrice.toInt(),
|
||||||
|
isLoading: false,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
removeItem: (e) async {
|
||||||
|
final currentState = state;
|
||||||
|
emit(currentState.copyWith(isLoading: true));
|
||||||
|
List<ProductQuantity> items = [...currentState.items];
|
||||||
|
|
||||||
|
final index = items.indexWhere(
|
||||||
|
(element) =>
|
||||||
|
element.product.id == e.product.id &&
|
||||||
|
element.variant?.id == e.variant?.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
final currentItem = items[index];
|
||||||
|
if (currentItem.quantity > 1) {
|
||||||
|
// Kurangi quantity
|
||||||
|
items[index] = currentItem.copyWith(
|
||||||
|
quantity: currentItem.quantity - 1,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// Hapus item kalau quantity = 1
|
||||||
|
items.removeAt(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final totalQuantity = items.fold<int>(
|
||||||
|
0,
|
||||||
|
(sum, item) => sum + item.quantity,
|
||||||
|
);
|
||||||
|
final totalPrice = items.fold<int>(
|
||||||
|
0,
|
||||||
|
(sum, item) =>
|
||||||
|
sum +
|
||||||
|
(item.quantity *
|
||||||
|
(item.variant?.priceModifier.toInt() ??
|
||||||
|
item.product.price.toInt())),
|
||||||
|
);
|
||||||
|
|
||||||
|
log(
|
||||||
|
'🗑️ Item removed. Total items: ${items.length}, totalQuantity: $totalQuantity, totalPrice: $totalPrice',
|
||||||
|
);
|
||||||
|
|
||||||
|
// Emit state baru
|
||||||
|
emit(
|
||||||
|
currentState.copyWith(
|
||||||
|
items: items,
|
||||||
|
totalQuantity: totalQuantity,
|
||||||
|
totalPrice: totalPrice,
|
||||||
|
isLoading: false,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
started: (e) async {
|
||||||
|
emit(CheckoutFormState.initial().copyWith(isLoading: true));
|
||||||
|
try {
|
||||||
|
emit(
|
||||||
|
CheckoutFormState.initial().copyWith(
|
||||||
|
items: e.items,
|
||||||
|
tax: 0,
|
||||||
|
serviceCharge: 0,
|
||||||
|
isLoading: false,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
// Kalau gagal, pakai default values
|
||||||
|
log('⚠️ Failed to load settings: $e');
|
||||||
|
emit(
|
||||||
|
CheckoutFormState.initial().copyWith(
|
||||||
|
tax: 10,
|
||||||
|
serviceCharge: 5,
|
||||||
|
isLoading: false,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updateItemNotes: (e) async {
|
||||||
|
final currentState = state;
|
||||||
|
|
||||||
|
// Clone list items agar tidak mutasi langsung
|
||||||
|
final items = [...currentState.items];
|
||||||
|
final index = items.indexWhere(
|
||||||
|
(element) => element.product.id == e.product.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
items[index] = items[index].copyWith(notes: e.notes);
|
||||||
|
}
|
||||||
|
|
||||||
|
emit(currentState.copyWith(items: items, isLoading: false));
|
||||||
|
},
|
||||||
|
updateOrderType: (e) async {
|
||||||
|
emit(state.copyWith(orderType: e.orderType));
|
||||||
|
},
|
||||||
|
updateDelivery: (e) async {
|
||||||
|
emit(state.copyWith(delivery: e.delivery));
|
||||||
|
},
|
||||||
|
updateTable: (e) async {
|
||||||
|
emit(state.copyWith(table: e.table));
|
||||||
|
},
|
||||||
|
orderAddedItems: (e) async {
|
||||||
|
emit(state.copyWith(orderAdded: e.order));
|
||||||
|
},
|
||||||
|
customerNameChanged: (e) async {
|
||||||
|
emit(state.copyWith(customerName: e.name,));
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
part of 'checkout_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class CheckoutFormEvent with _$CheckoutFormEvent {
|
||||||
|
const factory CheckoutFormEvent.started(List<ProductQuantity> items) =
|
||||||
|
_Started;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.addItem(
|
||||||
|
Product product,
|
||||||
|
ProductVariant? variant,
|
||||||
|
) = _AddItem;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.removeItem(
|
||||||
|
Product product,
|
||||||
|
ProductVariant? variant,
|
||||||
|
) = _RemoveItem;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.updateItemNotes(
|
||||||
|
Product product,
|
||||||
|
String notes,
|
||||||
|
) = _UpdateItemNotes;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.updateOrderType(OrderType orderType) =
|
||||||
|
_UpdateOrderType;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.updateDelivery(Delivery delivery) =
|
||||||
|
_UpdateDelivery;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.updateTable(Table? table) = _UpdateTable;
|
||||||
|
|
||||||
|
const factory CheckoutFormEvent.orderAddedItems(Order? order) =
|
||||||
|
_OrderAddedItems;
|
||||||
|
const factory CheckoutFormEvent.customerNameChanged(String name) =
|
||||||
|
_CustomerNameChanged;
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
part of 'checkout_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class CheckoutFormState with _$CheckoutFormState {
|
||||||
|
factory CheckoutFormState({
|
||||||
|
Order? orderAdded,
|
||||||
|
required List<ProductQuantity> items,
|
||||||
|
required int discount,
|
||||||
|
required int discountAmount,
|
||||||
|
required int tax,
|
||||||
|
required int serviceCharge,
|
||||||
|
required int totalQuantity,
|
||||||
|
required int totalPrice,
|
||||||
|
required String draftName,
|
||||||
|
required OrderType orderType,
|
||||||
|
required String customerName,
|
||||||
|
Delivery? delivery,
|
||||||
|
Table? table,
|
||||||
|
@Default(false) bool isLoading,
|
||||||
|
}) = _CheckoutFormState;
|
||||||
|
|
||||||
|
factory CheckoutFormState.initial() => CheckoutFormState(
|
||||||
|
items: [],
|
||||||
|
discount: 0,
|
||||||
|
discountAmount: 0,
|
||||||
|
tax: 0,
|
||||||
|
serviceCharge: 0,
|
||||||
|
totalQuantity: 0,
|
||||||
|
totalPrice: 0,
|
||||||
|
draftName: '',
|
||||||
|
customerName: '',
|
||||||
|
orderType: OrderType.dineIn,
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
import '../../../domain/customer/customer.dart';
|
||||||
|
|
||||||
|
part 'customer_loader_event.dart';
|
||||||
|
part 'customer_loader_state.dart';
|
||||||
|
part 'customer_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class CustomerLoaderBloc
|
||||||
|
extends Bloc<CustomerLoaderEvent, CustomerLoaderState> {
|
||||||
|
final ICustomerRepository _repository;
|
||||||
|
CustomerLoaderBloc(this._repository) : super(CustomerLoaderState.initial()) {
|
||||||
|
on<CustomerLoaderEvent>(_onCustomerLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onCustomerLoaderEvent(
|
||||||
|
CustomerLoaderEvent event,
|
||||||
|
Emitter<CustomerLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
var newState = state;
|
||||||
|
|
||||||
|
if (e.isRefresh) {
|
||||||
|
newState = newState.copyWith(isFetching: true);
|
||||||
|
emit(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
newState = await _mapFetchedToState(newState, isRefresh: e.isRefresh);
|
||||||
|
|
||||||
|
emit(newState);
|
||||||
|
},
|
||||||
|
setSelectedCustomer: (e) async {
|
||||||
|
emit(state.copyWith(selectedCustomer: e.customer));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<CustomerLoaderState> _mapFetchedToState(
|
||||||
|
CustomerLoaderState state, {
|
||||||
|
bool isRefresh = false,
|
||||||
|
}) async {
|
||||||
|
state = state.copyWith(isFetching: false);
|
||||||
|
|
||||||
|
if (state.hasReachedMax && state.customers.isNotEmpty && !isRefresh) {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRefresh) {
|
||||||
|
state = state.copyWith(
|
||||||
|
page: 1,
|
||||||
|
failureOrOption: none(),
|
||||||
|
hasReachedMax: false,
|
||||||
|
customers: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final failureOrCustomer = await _repository.getCustomer(page: state.page);
|
||||||
|
|
||||||
|
state = failureOrCustomer.fold(
|
||||||
|
(f) {
|
||||||
|
if (state.customers.isNotEmpty) {
|
||||||
|
return state.copyWith(hasReachedMax: true);
|
||||||
|
}
|
||||||
|
return state.copyWith(failureOrOption: optionOf(f));
|
||||||
|
},
|
||||||
|
(customers) {
|
||||||
|
return state.copyWith(
|
||||||
|
customers: List.from(state.customers)..addAll(customers.customers),
|
||||||
|
failureOrOption: none(),
|
||||||
|
page: state.page + 1,
|
||||||
|
hasReachedMax: customers.customers.length < 10,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,668 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'customer_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$CustomerLoaderEvent {
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(Customer customer) setSelectedCustomer,
|
||||||
|
required TResult Function(bool isRefresh) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(Customer customer)? setSelectedCustomer,
|
||||||
|
TResult? Function(bool isRefresh)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(Customer customer)? setSelectedCustomer,
|
||||||
|
TResult Function(bool isRefresh)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_SetSelectedCustomer value) setSelectedCustomer,
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_SetSelectedCustomer value)? setSelectedCustomer,
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_SetSelectedCustomer value)? setSelectedCustomer,
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $CustomerLoaderEventCopyWith<$Res> {
|
||||||
|
factory $CustomerLoaderEventCopyWith(
|
||||||
|
CustomerLoaderEvent value,
|
||||||
|
$Res Function(CustomerLoaderEvent) then,
|
||||||
|
) = _$CustomerLoaderEventCopyWithImpl<$Res, CustomerLoaderEvent>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$CustomerLoaderEventCopyWithImpl<$Res, $Val extends CustomerLoaderEvent>
|
||||||
|
implements $CustomerLoaderEventCopyWith<$Res> {
|
||||||
|
_$CustomerLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$SetSelectedCustomerImplCopyWith<$Res> {
|
||||||
|
factory _$$SetSelectedCustomerImplCopyWith(
|
||||||
|
_$SetSelectedCustomerImpl value,
|
||||||
|
$Res Function(_$SetSelectedCustomerImpl) then,
|
||||||
|
) = __$$SetSelectedCustomerImplCopyWithImpl<$Res>;
|
||||||
|
@useResult
|
||||||
|
$Res call({Customer customer});
|
||||||
|
|
||||||
|
$CustomerCopyWith<$Res> get customer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$SetSelectedCustomerImplCopyWithImpl<$Res>
|
||||||
|
extends _$CustomerLoaderEventCopyWithImpl<$Res, _$SetSelectedCustomerImpl>
|
||||||
|
implements _$$SetSelectedCustomerImplCopyWith<$Res> {
|
||||||
|
__$$SetSelectedCustomerImplCopyWithImpl(
|
||||||
|
_$SetSelectedCustomerImpl _value,
|
||||||
|
$Res Function(_$SetSelectedCustomerImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? customer = null}) {
|
||||||
|
return _then(
|
||||||
|
_$SetSelectedCustomerImpl(
|
||||||
|
null == customer
|
||||||
|
? _value.customer
|
||||||
|
: customer // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Customer,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$CustomerCopyWith<$Res> get customer {
|
||||||
|
return $CustomerCopyWith<$Res>(_value.customer, (value) {
|
||||||
|
return _then(_value.copyWith(customer: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$SetSelectedCustomerImpl implements _SetSelectedCustomer {
|
||||||
|
const _$SetSelectedCustomerImpl(this.customer);
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Customer customer;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CustomerLoaderEvent.setSelectedCustomer(customer: $customer)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$SetSelectedCustomerImpl &&
|
||||||
|
(identical(other.customer, customer) ||
|
||||||
|
other.customer == customer));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, customer);
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$SetSelectedCustomerImplCopyWith<_$SetSelectedCustomerImpl> get copyWith =>
|
||||||
|
__$$SetSelectedCustomerImplCopyWithImpl<_$SetSelectedCustomerImpl>(
|
||||||
|
this,
|
||||||
|
_$identity,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(Customer customer) setSelectedCustomer,
|
||||||
|
required TResult Function(bool isRefresh) fetched,
|
||||||
|
}) {
|
||||||
|
return setSelectedCustomer(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(Customer customer)? setSelectedCustomer,
|
||||||
|
TResult? Function(bool isRefresh)? fetched,
|
||||||
|
}) {
|
||||||
|
return setSelectedCustomer?.call(customer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(Customer customer)? setSelectedCustomer,
|
||||||
|
TResult Function(bool isRefresh)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (setSelectedCustomer != null) {
|
||||||
|
return setSelectedCustomer(customer);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_SetSelectedCustomer value) setSelectedCustomer,
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return setSelectedCustomer(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_SetSelectedCustomer value)? setSelectedCustomer,
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return setSelectedCustomer?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_SetSelectedCustomer value)? setSelectedCustomer,
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (setSelectedCustomer != null) {
|
||||||
|
return setSelectedCustomer(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _SetSelectedCustomer implements CustomerLoaderEvent {
|
||||||
|
const factory _SetSelectedCustomer(final Customer customer) =
|
||||||
|
_$SetSelectedCustomerImpl;
|
||||||
|
|
||||||
|
Customer get customer;
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$SetSelectedCustomerImplCopyWith<_$SetSelectedCustomerImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@useResult
|
||||||
|
$Res call({bool isRefresh});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$CustomerLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? isRefresh = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
isRefresh: null == isRefresh
|
||||||
|
? _value.isRefresh
|
||||||
|
: isRefresh // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({this.isRefresh = false});
|
||||||
|
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isRefresh;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CustomerLoaderEvent.fetched(isRefresh: $isRefresh)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.isRefresh, isRefresh) ||
|
||||||
|
other.isRefresh == isRefresh));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, isRefresh);
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(Customer customer) setSelectedCustomer,
|
||||||
|
required TResult Function(bool isRefresh) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(isRefresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(Customer customer)? setSelectedCustomer,
|
||||||
|
TResult? Function(bool isRefresh)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(isRefresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(Customer customer)? setSelectedCustomer,
|
||||||
|
TResult Function(bool isRefresh)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(isRefresh);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_SetSelectedCustomer value) setSelectedCustomer,
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_SetSelectedCustomer value)? setSelectedCustomer,
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_SetSelectedCustomer value)? setSelectedCustomer,
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements CustomerLoaderEvent {
|
||||||
|
const factory _Fetched({final bool isRefresh}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
bool get isRefresh;
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$CustomerLoaderState {
|
||||||
|
List<Customer> get customers => throw _privateConstructorUsedError;
|
||||||
|
Option<CustomerFailure> get failureOrOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
Customer? get selectedCustomer => throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
bool get hasReachedMax => throw _privateConstructorUsedError;
|
||||||
|
int get page => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$CustomerLoaderStateCopyWith<CustomerLoaderState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $CustomerLoaderStateCopyWith<$Res> {
|
||||||
|
factory $CustomerLoaderStateCopyWith(
|
||||||
|
CustomerLoaderState value,
|
||||||
|
$Res Function(CustomerLoaderState) then,
|
||||||
|
) = _$CustomerLoaderStateCopyWithImpl<$Res, CustomerLoaderState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
List<Customer> customers,
|
||||||
|
Option<CustomerFailure> failureOrOption,
|
||||||
|
Customer? selectedCustomer,
|
||||||
|
bool isFetching,
|
||||||
|
bool hasReachedMax,
|
||||||
|
int page,
|
||||||
|
});
|
||||||
|
|
||||||
|
$CustomerCopyWith<$Res>? get selectedCustomer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$CustomerLoaderStateCopyWithImpl<$Res, $Val extends CustomerLoaderState>
|
||||||
|
implements $CustomerLoaderStateCopyWith<$Res> {
|
||||||
|
_$CustomerLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? customers = null,
|
||||||
|
Object? failureOrOption = null,
|
||||||
|
Object? selectedCustomer = freezed,
|
||||||
|
Object? isFetching = null,
|
||||||
|
Object? hasReachedMax = null,
|
||||||
|
Object? page = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
customers: null == customers
|
||||||
|
? _value.customers
|
||||||
|
: customers // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<Customer>,
|
||||||
|
failureOrOption: null == failureOrOption
|
||||||
|
? _value.failureOrOption
|
||||||
|
: failureOrOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<CustomerFailure>,
|
||||||
|
selectedCustomer: freezed == selectedCustomer
|
||||||
|
? _value.selectedCustomer
|
||||||
|
: selectedCustomer // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Customer?,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
hasReachedMax: null == hasReachedMax
|
||||||
|
? _value.hasReachedMax
|
||||||
|
: hasReachedMax // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
page: null == page
|
||||||
|
? _value.page
|
||||||
|
: page // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$CustomerCopyWith<$Res>? get selectedCustomer {
|
||||||
|
if (_value.selectedCustomer == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $CustomerCopyWith<$Res>(_value.selectedCustomer!, (value) {
|
||||||
|
return _then(_value.copyWith(selectedCustomer: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$CustomerLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $CustomerLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$CustomerLoaderStateImplCopyWith(
|
||||||
|
_$CustomerLoaderStateImpl value,
|
||||||
|
$Res Function(_$CustomerLoaderStateImpl) then,
|
||||||
|
) = __$$CustomerLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
List<Customer> customers,
|
||||||
|
Option<CustomerFailure> failureOrOption,
|
||||||
|
Customer? selectedCustomer,
|
||||||
|
bool isFetching,
|
||||||
|
bool hasReachedMax,
|
||||||
|
int page,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$CustomerCopyWith<$Res>? get selectedCustomer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$CustomerLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends _$CustomerLoaderStateCopyWithImpl<$Res, _$CustomerLoaderStateImpl>
|
||||||
|
implements _$$CustomerLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$CustomerLoaderStateImplCopyWithImpl(
|
||||||
|
_$CustomerLoaderStateImpl _value,
|
||||||
|
$Res Function(_$CustomerLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? customers = null,
|
||||||
|
Object? failureOrOption = null,
|
||||||
|
Object? selectedCustomer = freezed,
|
||||||
|
Object? isFetching = null,
|
||||||
|
Object? hasReachedMax = null,
|
||||||
|
Object? page = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$CustomerLoaderStateImpl(
|
||||||
|
customers: null == customers
|
||||||
|
? _value._customers
|
||||||
|
: customers // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<Customer>,
|
||||||
|
failureOrOption: null == failureOrOption
|
||||||
|
? _value.failureOrOption
|
||||||
|
: failureOrOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<CustomerFailure>,
|
||||||
|
selectedCustomer: freezed == selectedCustomer
|
||||||
|
? _value.selectedCustomer
|
||||||
|
: selectedCustomer // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Customer?,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
hasReachedMax: null == hasReachedMax
|
||||||
|
? _value.hasReachedMax
|
||||||
|
: hasReachedMax // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
page: null == page
|
||||||
|
? _value.page
|
||||||
|
: page // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$CustomerLoaderStateImpl implements _CustomerLoaderState {
|
||||||
|
_$CustomerLoaderStateImpl({
|
||||||
|
required final List<Customer> customers,
|
||||||
|
required this.failureOrOption,
|
||||||
|
this.selectedCustomer,
|
||||||
|
this.isFetching = false,
|
||||||
|
this.hasReachedMax = false,
|
||||||
|
this.page = 1,
|
||||||
|
}) : _customers = customers;
|
||||||
|
|
||||||
|
final List<Customer> _customers;
|
||||||
|
@override
|
||||||
|
List<Customer> get customers {
|
||||||
|
if (_customers is EqualUnmodifiableListView) return _customers;
|
||||||
|
// ignore: implicit_dynamic_type
|
||||||
|
return EqualUnmodifiableListView(_customers);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Option<CustomerFailure> failureOrOption;
|
||||||
|
@override
|
||||||
|
final Customer? selectedCustomer;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool hasReachedMax;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final int page;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'CustomerLoaderState(customers: $customers, failureOrOption: $failureOrOption, selectedCustomer: $selectedCustomer, isFetching: $isFetching, hasReachedMax: $hasReachedMax, page: $page)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$CustomerLoaderStateImpl &&
|
||||||
|
const DeepCollectionEquality().equals(
|
||||||
|
other._customers,
|
||||||
|
_customers,
|
||||||
|
) &&
|
||||||
|
(identical(other.failureOrOption, failureOrOption) ||
|
||||||
|
other.failureOrOption == failureOrOption) &&
|
||||||
|
(identical(other.selectedCustomer, selectedCustomer) ||
|
||||||
|
other.selectedCustomer == selectedCustomer) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching) &&
|
||||||
|
(identical(other.hasReachedMax, hasReachedMax) ||
|
||||||
|
other.hasReachedMax == hasReachedMax) &&
|
||||||
|
(identical(other.page, page) || other.page == page));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
const DeepCollectionEquality().hash(_customers),
|
||||||
|
failureOrOption,
|
||||||
|
selectedCustomer,
|
||||||
|
isFetching,
|
||||||
|
hasReachedMax,
|
||||||
|
page,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$CustomerLoaderStateImplCopyWith<_$CustomerLoaderStateImpl> get copyWith =>
|
||||||
|
__$$CustomerLoaderStateImplCopyWithImpl<_$CustomerLoaderStateImpl>(
|
||||||
|
this,
|
||||||
|
_$identity,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _CustomerLoaderState implements CustomerLoaderState {
|
||||||
|
factory _CustomerLoaderState({
|
||||||
|
required final List<Customer> customers,
|
||||||
|
required final Option<CustomerFailure> failureOrOption,
|
||||||
|
final Customer? selectedCustomer,
|
||||||
|
final bool isFetching,
|
||||||
|
final bool hasReachedMax,
|
||||||
|
final int page,
|
||||||
|
}) = _$CustomerLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Customer> get customers;
|
||||||
|
@override
|
||||||
|
Option<CustomerFailure> get failureOrOption;
|
||||||
|
@override
|
||||||
|
Customer? get selectedCustomer;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
@override
|
||||||
|
bool get hasReachedMax;
|
||||||
|
@override
|
||||||
|
int get page;
|
||||||
|
|
||||||
|
/// Create a copy of CustomerLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$CustomerLoaderStateImplCopyWith<_$CustomerLoaderStateImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
part of 'customer_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class CustomerLoaderEvent with _$CustomerLoaderEvent {
|
||||||
|
const factory CustomerLoaderEvent.setSelectedCustomer(Customer customer) =
|
||||||
|
_SetSelectedCustomer;
|
||||||
|
const factory CustomerLoaderEvent.fetched({@Default(false) bool isRefresh}) =
|
||||||
|
_Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
part of 'customer_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class CustomerLoaderState with _$CustomerLoaderState {
|
||||||
|
factory CustomerLoaderState({
|
||||||
|
required List<Customer> customers,
|
||||||
|
required Option<CustomerFailure> failureOrOption,
|
||||||
|
Customer? selectedCustomer,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
@Default(false) bool hasReachedMax,
|
||||||
|
@Default(1) int page,
|
||||||
|
}) = _CustomerLoaderState;
|
||||||
|
|
||||||
|
factory CustomerLoaderState.initial() =>
|
||||||
|
CustomerLoaderState(customers: [], failureOrOption: none());
|
||||||
|
}
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart' hide Order;
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
|
import '../../../common/types/order_type.dart';
|
||||||
|
import '../../../domain/customer/customer.dart';
|
||||||
|
import '../../../domain/order/order.dart';
|
||||||
|
import '../../../domain/outlet/outlet.dart';
|
||||||
|
import '../../../domain/payment_method/payment_method.dart';
|
||||||
|
import '../../../domain/product/product.dart';
|
||||||
|
import '../../../domain/table/table.dart';
|
||||||
|
part 'order_form_event.dart';
|
||||||
|
part 'order_form_state.dart';
|
||||||
|
part 'order_form_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class OrderFormBloc extends Bloc<OrderFormEvent, OrderFormState> {
|
||||||
|
final IOrderRepository _repository;
|
||||||
|
final IOutletRepository _outletRepository;
|
||||||
|
OrderFormBloc(this._repository, this._outletRepository)
|
||||||
|
: super(OrderFormState.initial()) {
|
||||||
|
on<OrderFormEvent>(_onOrderFormBloc);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onOrderFormBloc(
|
||||||
|
OrderFormEvent event,
|
||||||
|
Emitter<OrderFormState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
customerNameChanged: (e) async {
|
||||||
|
emit(state.copyWith(customerName: e.customerName));
|
||||||
|
},
|
||||||
|
paymentMethodChanged: (e) async {
|
||||||
|
emit(state.copyWith(paymentMethod: e.payment));
|
||||||
|
},
|
||||||
|
customerChanged: (e) async {
|
||||||
|
emit(state.copyWith(customer: e.customer));
|
||||||
|
},
|
||||||
|
createOrderWithPayment: (e) async {
|
||||||
|
Either<OrderFailure, Order> failureOrOrder;
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isCreatingWithPayment: true,
|
||||||
|
failureOrCreateOrderWithPayment: none(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final outlet = await _outletRepository.currentOutlet();
|
||||||
|
|
||||||
|
final request = OrderRequest(
|
||||||
|
outletId: outlet.id,
|
||||||
|
customerId: state.customer?.id ?? '',
|
||||||
|
tableNumber: e.table?.tableName ?? '',
|
||||||
|
tableId: e.table?.id ?? '',
|
||||||
|
orderType: e.orderType.name,
|
||||||
|
notes: '',
|
||||||
|
customerName: state.customerName ?? "",
|
||||||
|
orderItems: e.items
|
||||||
|
.map(
|
||||||
|
(item) => OrderItemRequest(
|
||||||
|
productId: item.product.id,
|
||||||
|
productVariantId: item.variant?.id ?? "",
|
||||||
|
quantity: item.quantity,
|
||||||
|
unitPrice: item.product.price.toInt(),
|
||||||
|
notes: item.notes,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrOrder = await _repository.createOrderWithPayment(
|
||||||
|
request: request,
|
||||||
|
paymentMethodId: state.paymentMethod?.id ?? '',
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isCreatingWithPayment: false,
|
||||||
|
failureOrCreateOrderWithPayment: optionOf(failureOrOrder),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
createOrder: (e) async {
|
||||||
|
Either<OrderFailure, Order> failureOrOrder;
|
||||||
|
|
||||||
|
emit(state.copyWith(isCreating: true, failureOrCreateOrder: none()));
|
||||||
|
|
||||||
|
final outlet = await _outletRepository.currentOutlet();
|
||||||
|
|
||||||
|
final request = OrderRequest(
|
||||||
|
outletId: outlet.id,
|
||||||
|
customerId: state.customer?.id ?? '',
|
||||||
|
tableNumber: e.table?.tableName ?? '',
|
||||||
|
tableId: e.table?.id ?? '',
|
||||||
|
orderType: e.orderType.name,
|
||||||
|
notes: '',
|
||||||
|
customerName: state.customerName ?? "",
|
||||||
|
orderItems: e.items
|
||||||
|
.map(
|
||||||
|
(item) => OrderItemRequest(
|
||||||
|
productId: item.product.id,
|
||||||
|
productVariantId: item.variant?.id ?? "",
|
||||||
|
quantity: item.quantity,
|
||||||
|
unitPrice: item.product.price.toInt(),
|
||||||
|
notes: item.notes,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrOrder = await _repository.createOrder(request: request);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isCreating: false,
|
||||||
|
failureOrCreateOrder: optionOf(failureOrOrder),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
addItemOrder: (e) async {
|
||||||
|
Either<OrderFailure, Order> failureOrAddItemOrder;
|
||||||
|
|
||||||
|
// Generate new idempotency key saat user intent (tap Add Items)
|
||||||
|
// Kalau sedang retry, pakai key yang sama
|
||||||
|
final idempotencyKey = state.addItemIdempotencyKey ?? const Uuid().v4();
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isAddingItemOrder: true,
|
||||||
|
failureOrAddItemOrder: none(),
|
||||||
|
addItemIdempotencyKey: idempotencyKey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final request = e.items
|
||||||
|
.map(
|
||||||
|
(item) => AddItemOrderRequest(
|
||||||
|
productId: item.product.id,
|
||||||
|
productVariantId: item.variant?.id ?? '',
|
||||||
|
quantity: item.quantity,
|
||||||
|
unitPrice: item.product.price.toInt(),
|
||||||
|
notes: item.notes,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
failureOrAddItemOrder = await _repository.addItemOrder(
|
||||||
|
id: e.orderId,
|
||||||
|
request: request,
|
||||||
|
idempotencyKey: idempotencyKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isAddingItemOrder: false,
|
||||||
|
failureOrAddItemOrder: optionOf(failureOrAddItemOrder),
|
||||||
|
// Clear key on success, keep on failure for retry
|
||||||
|
addItemIdempotencyKey:
|
||||||
|
failureOrAddItemOrder.isRight() ? null : idempotencyKey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
part of 'order_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class OrderFormEvent with _$OrderFormEvent {
|
||||||
|
const factory OrderFormEvent.customerNameChanged(String customerName) =
|
||||||
|
_CustomerNameChanged;
|
||||||
|
const factory OrderFormEvent.paymentMethodChanged(PaymentMethod payment) =
|
||||||
|
_PaymentMethodChanged;
|
||||||
|
const factory OrderFormEvent.customerChanged(Customer? customer) =
|
||||||
|
_CustomerChanged;
|
||||||
|
const factory OrderFormEvent.createOrderWithPayment({
|
||||||
|
required List<ProductQuantity> items,
|
||||||
|
required OrderType orderType,
|
||||||
|
Table? table,
|
||||||
|
}) = _CreateOrderWithPayment;
|
||||||
|
|
||||||
|
const factory OrderFormEvent.createOrder({
|
||||||
|
required List<ProductQuantity> items,
|
||||||
|
required OrderType orderType,
|
||||||
|
Table? table,
|
||||||
|
}) = _CreateOrder;
|
||||||
|
|
||||||
|
const factory OrderFormEvent.addItemOrder({
|
||||||
|
required String orderId,
|
||||||
|
required List<ProductQuantity> items,
|
||||||
|
}) = _AddItemOrder;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
part of 'order_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class OrderFormState with _$OrderFormState {
|
||||||
|
factory OrderFormState({
|
||||||
|
PaymentMethod? paymentMethod,
|
||||||
|
String? customerName,
|
||||||
|
Customer? customer,
|
||||||
|
required Option<Either<OrderFailure, Order>> failureOrCreateOrder,
|
||||||
|
required Option<Either<OrderFailure, Order>>
|
||||||
|
failureOrCreateOrderWithPayment,
|
||||||
|
required Option<Either<OrderFailure, Order>> failureOrAddItemOrder,
|
||||||
|
@Default(false) bool isCreating,
|
||||||
|
@Default(false) bool isCreatingWithPayment,
|
||||||
|
@Default(false) bool isAddingItemOrder,
|
||||||
|
/// Idempotency key untuk add item order.
|
||||||
|
/// Di-generate saat user tap "Add Items", dipakai ulang saat retry,
|
||||||
|
/// di-clear setelah sukses.
|
||||||
|
String? addItemIdempotencyKey,
|
||||||
|
}) = _OrderFormState;
|
||||||
|
|
||||||
|
factory OrderFormState.initial() => OrderFormState(
|
||||||
|
failureOrCreateOrder: none(),
|
||||||
|
failureOrCreateOrderWithPayment: none(),
|
||||||
|
failureOrAddItemOrder: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart' hide Order;
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
|
||||||
|
import '../../../domain/order/order.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;
|
||||||
|
OrderLoaderBloc(this._repository) : super(OrderLoaderState.initial()) {
|
||||||
|
on<OrderLoaderEvent>(_onOrderLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onOrderLoaderEvent(
|
||||||
|
OrderLoaderEvent event,
|
||||||
|
Emitter<OrderLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
setSelectedOrder: (e) async {
|
||||||
|
emit(state.copyWith(selectedOrder: e.order));
|
||||||
|
},
|
||||||
|
dateTimeRangeChange: (e) async {
|
||||||
|
emit(state.copyWith(startDate: e.startDate, endDate: e.endDate));
|
||||||
|
},
|
||||||
|
searchChange: (e) async {
|
||||||
|
emit(state.copyWith(search: e.search));
|
||||||
|
},
|
||||||
|
fetched: (e) async {
|
||||||
|
var newState = state;
|
||||||
|
|
||||||
|
if (e.isRefresh) {
|
||||||
|
newState = newState.copyWith(isFetching: true);
|
||||||
|
emit(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
newState = await _mapFetchedToState(
|
||||||
|
newState,
|
||||||
|
isRefresh: e.isRefresh,
|
||||||
|
status: e.status,
|
||||||
|
);
|
||||||
|
emit(newState);
|
||||||
|
},
|
||||||
|
getById: (e) async {
|
||||||
|
emit(state.copyWith(isFetchingById: true, failureOption: none()));
|
||||||
|
|
||||||
|
final failureOrOrder = await _repository.getOrderById(e.id);
|
||||||
|
failureOrOrder.fold(
|
||||||
|
(f) => emit(
|
||||||
|
state.copyWith(failureOption: optionOf(f), isFetching: false),
|
||||||
|
),
|
||||||
|
(order) => emit(
|
||||||
|
state.copyWith(
|
||||||
|
order: order,
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: none(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(state.copyWith(isFetchingById: false));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<OrderLoaderState> _mapFetchedToState(
|
||||||
|
OrderLoaderState state, {
|
||||||
|
bool isRefresh = false,
|
||||||
|
String status = 'completed',
|
||||||
|
}) async {
|
||||||
|
state = state.copyWith(isFetching: false);
|
||||||
|
|
||||||
|
if (state.hasReachedMax && state.orders.isNotEmpty && !isRefresh) {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRefresh) {
|
||||||
|
state = state.copyWith(
|
||||||
|
page: 1,
|
||||||
|
failureOption: none(),
|
||||||
|
hasReachedMax: false,
|
||||||
|
orders: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final failureOrTable = await _repository.getOrders(
|
||||||
|
page: state.page,
|
||||||
|
status: status,
|
||||||
|
startDate: state.startDate,
|
||||||
|
endDate: state.endDate,
|
||||||
|
search: state.search,
|
||||||
|
);
|
||||||
|
|
||||||
|
state = failureOrTable.fold(
|
||||||
|
(f) {
|
||||||
|
if (state.orders.isNotEmpty) {
|
||||||
|
return state.copyWith(hasReachedMax: true);
|
||||||
|
}
|
||||||
|
return state.copyWith(failureOption: optionOf(f));
|
||||||
|
},
|
||||||
|
(orders) {
|
||||||
|
return state.copyWith(
|
||||||
|
orders: List.from(state.orders)..addAll(orders.orders),
|
||||||
|
failureOption: none(),
|
||||||
|
page: state.page + 1,
|
||||||
|
hasReachedMax: orders.orders.length < 10,
|
||||||
|
totalOrder: orders.totalCount,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
part of 'order_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class OrderLoaderEvent with _$OrderLoaderEvent {
|
||||||
|
const factory OrderLoaderEvent.dateTimeRangeChange(
|
||||||
|
DateTime startDate,
|
||||||
|
DateTime endDate,
|
||||||
|
) = _DateTimeRangeChange;
|
||||||
|
const factory OrderLoaderEvent.searchChange(String search) = _SearchChange;
|
||||||
|
const factory OrderLoaderEvent.setSelectedOrder(Order order) =
|
||||||
|
_SetSelectedOrder;
|
||||||
|
const factory OrderLoaderEvent.getById(String id) = _GetById;
|
||||||
|
const factory OrderLoaderEvent.fetched({
|
||||||
|
@Default(false) bool isRefresh,
|
||||||
|
required String status,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
part of 'order_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class OrderLoaderState with _$OrderLoaderState {
|
||||||
|
factory OrderLoaderState({
|
||||||
|
required List<Order> orders,
|
||||||
|
required Option<OrderFailure> failureOption,
|
||||||
|
required Option<OrderFailure> failureOptionGetById,
|
||||||
|
required Order order,
|
||||||
|
Order? selectedOrder,
|
||||||
|
String? search,
|
||||||
|
required DateTime startDate,
|
||||||
|
required DateTime endDate,
|
||||||
|
@Default(0) int totalOrder,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
@Default(false) bool isFetchingById,
|
||||||
|
@Default(false) bool hasReachedMax,
|
||||||
|
@Default(1) int page,
|
||||||
|
}) = _OrderLoaderState;
|
||||||
|
|
||||||
|
factory OrderLoaderState.initial() => OrderLoaderState(
|
||||||
|
orders: [],
|
||||||
|
failureOption: none(),
|
||||||
|
startDate: DateTime.now(),
|
||||||
|
endDate: DateTime.now(),
|
||||||
|
failureOptionGetById: none(),
|
||||||
|
order: Order.empty(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart' hide Order;
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
|
import '../../../common/types/split_type.dart';
|
||||||
|
import '../../../domain/order/order.dart';
|
||||||
|
import '../../../domain/payment_method/payment_method.dart';
|
||||||
|
|
||||||
|
part 'payment_form_event.dart';
|
||||||
|
part 'payment_form_state.dart';
|
||||||
|
part 'payment_form_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PaymentFormBloc extends Bloc<PaymentFormEvent, PaymentFormState> {
|
||||||
|
final IOrderRepository _repository;
|
||||||
|
PaymentFormBloc(this._repository) : super(PaymentFormState.initial()) {
|
||||||
|
on<PaymentFormEvent>(_onPaymentFormEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPaymentFormEvent(
|
||||||
|
PaymentFormEvent event,
|
||||||
|
Emitter<PaymentFormState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
setOrder: (e) async {
|
||||||
|
List<OrderItem> pendingItems = e.order.orderItems
|
||||||
|
.where((item) => item.status == 'pending')
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
emit(state.copyWith(order: e.order, pendingItems: pendingItems));
|
||||||
|
},
|
||||||
|
setPaymentMethod: (e) async {
|
||||||
|
emit(state.copyWith(paymentMethod: e.paymentMethod));
|
||||||
|
},
|
||||||
|
submitted: (e) async {
|
||||||
|
Either<OrderFailure, Payment> failureOrPayment;
|
||||||
|
|
||||||
|
// Generate new idempotency key saat user intent (tap Bayar)
|
||||||
|
// Kalau sedang retry (isSubmitting sebelumnya gagal), pakai key yang sama
|
||||||
|
final idempotencyKey = state.idempotencyKey ?? const Uuid().v4();
|
||||||
|
|
||||||
|
emit(state.copyWith(
|
||||||
|
isSubmitting: true,
|
||||||
|
failureOrPayment: none(),
|
||||||
|
idempotencyKey: idempotencyKey,
|
||||||
|
));
|
||||||
|
|
||||||
|
final request = PaymentRequest(
|
||||||
|
orderId: state.order.id,
|
||||||
|
paymentMethodId: state.paymentMethod?.id ?? '',
|
||||||
|
amount: state.order.totalAmount,
|
||||||
|
transactionId: '',
|
||||||
|
splitNumber: 1,
|
||||||
|
splitTotal: 1,
|
||||||
|
splitDescription: '',
|
||||||
|
paymentOrderItems: state.pendingItems
|
||||||
|
.map(
|
||||||
|
(item) => PaymentItemRequest(
|
||||||
|
orderItemId: item.id,
|
||||||
|
amount: item.totalPrice,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrPayment = await _repository.createPayment(
|
||||||
|
request: request,
|
||||||
|
idempotencyKey: idempotencyKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isSubmitting: false,
|
||||||
|
failureOrPayment: optionOf(failureOrPayment),
|
||||||
|
// Clear key on success, keep on failure for retry
|
||||||
|
idempotencyKey: failureOrPayment.isRight() ? null : idempotencyKey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
submittedSplitBill: (e) async {
|
||||||
|
Either<OrderFailure, Payment> failureOrPayment;
|
||||||
|
|
||||||
|
// Generate new idempotency key untuk split bill
|
||||||
|
final idempotencyKey = state.splitBillIdempotencyKey ?? const Uuid().v4();
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isSubmitting: true,
|
||||||
|
failureOrPaymentSplitBill: none(),
|
||||||
|
splitBillIdempotencyKey: idempotencyKey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final request = PaymentSplitBillRequest(
|
||||||
|
orderId: state.order.id,
|
||||||
|
paymentMethodId: state.paymentMethod?.id ?? '',
|
||||||
|
amount: state.order.totalAmount,
|
||||||
|
customerId: e.customerId ?? '',
|
||||||
|
type: e.splitType ?? SplitType.unknown,
|
||||||
|
customerName: e.customerName ?? '',
|
||||||
|
items: state.pendingItems
|
||||||
|
.map(
|
||||||
|
(item) => PaymentItemSplitBillRequest(
|
||||||
|
orderItemId: item.id,
|
||||||
|
quantity: item.quantity,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
log(request.toString());
|
||||||
|
|
||||||
|
failureOrPayment = await _repository.createSplitBill(
|
||||||
|
request,
|
||||||
|
idempotencyKey: idempotencyKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isSubmitting: false,
|
||||||
|
failureOrPaymentSplitBill: optionOf(failureOrPayment),
|
||||||
|
// Clear key on success, keep on failure for retry
|
||||||
|
splitBillIdempotencyKey:
|
||||||
|
failureOrPayment.isRight() ? null : idempotencyKey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
part of 'payment_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentFormEvent with _$PaymentFormEvent {
|
||||||
|
const factory PaymentFormEvent.setOrder(Order order) = _SetOrder;
|
||||||
|
const factory PaymentFormEvent.setPaymentMethod(PaymentMethod paymentMethod) =
|
||||||
|
_SetPayment;
|
||||||
|
const factory PaymentFormEvent.submitted() = _Submitted;
|
||||||
|
const factory PaymentFormEvent.submittedSplitBill({
|
||||||
|
SplitType? splitType,
|
||||||
|
String? customerId,
|
||||||
|
String? customerName,
|
||||||
|
}) = _SubmittedSplitBill;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
part of 'payment_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentFormState with _$PaymentFormState {
|
||||||
|
factory PaymentFormState({
|
||||||
|
required Order order,
|
||||||
|
required List<OrderItem> pendingItems,
|
||||||
|
required Option<Either<OrderFailure, Payment>> failureOrPayment,
|
||||||
|
required Option<Either<OrderFailure, Payment>> failureOrPaymentSplitBill,
|
||||||
|
PaymentMethod? paymentMethod,
|
||||||
|
@Default(false) bool isSubmitting,
|
||||||
|
/// Idempotency key untuk payment submission.
|
||||||
|
/// Di-generate saat user tap "Bayar", dipakai ulang saat retry,
|
||||||
|
/// di-clear setelah sukses.
|
||||||
|
String? idempotencyKey,
|
||||||
|
/// Idempotency key untuk split bill submission.
|
||||||
|
String? splitBillIdempotencyKey,
|
||||||
|
}) = _PaymentFormState;
|
||||||
|
|
||||||
|
factory PaymentFormState.initial() => PaymentFormState(
|
||||||
|
order: Order.empty(),
|
||||||
|
pendingItems: [],
|
||||||
|
failureOrPayment: none(),
|
||||||
|
failureOrPaymentSplitBill: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/payment_method/payment_method.dart';
|
||||||
|
|
||||||
|
part 'payment_method_loader_event.dart';
|
||||||
|
part 'payment_method_loader_state.dart';
|
||||||
|
part 'payment_method_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PaymentMethodLoaderBloc
|
||||||
|
extends Bloc<PaymentMethodLoaderEvent, PaymentMethodLoaderState> {
|
||||||
|
final IPaymentMethodRepository _repository;
|
||||||
|
PaymentMethodLoaderBloc(this._repository)
|
||||||
|
: super(PaymentMethodLoaderState.initial()) {
|
||||||
|
on<PaymentMethodLoaderEvent>(_onPaymentMethodLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPaymentMethodLoaderEvent(
|
||||||
|
PaymentMethodLoaderEvent event,
|
||||||
|
Emitter<PaymentMethodLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
var newState = state;
|
||||||
|
|
||||||
|
if (e.isRefresh) {
|
||||||
|
newState = newState.copyWith(isFetching: true);
|
||||||
|
emit(newState);
|
||||||
|
}
|
||||||
|
|
||||||
|
newState = await _mapFetchedToState(newState, isRefresh: e.isRefresh);
|
||||||
|
emit(newState);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<PaymentMethodLoaderState> _mapFetchedToState(
|
||||||
|
PaymentMethodLoaderState state, {
|
||||||
|
bool isRefresh = false,
|
||||||
|
}) async {
|
||||||
|
state = state.copyWith(isFetching: false);
|
||||||
|
|
||||||
|
if (state.hasReachedMax && state.paymentMethods.isNotEmpty && !isRefresh) {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRefresh) {
|
||||||
|
state = state.copyWith(
|
||||||
|
page: 1,
|
||||||
|
failureOption: none(),
|
||||||
|
hasReachedMax: false,
|
||||||
|
paymentMethods: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final failureOrTable = await _repository.getPaymentMethods(
|
||||||
|
page: state.page,
|
||||||
|
);
|
||||||
|
|
||||||
|
state = failureOrTable.fold(
|
||||||
|
(f) {
|
||||||
|
if (state.paymentMethods.isNotEmpty) {
|
||||||
|
return state.copyWith(hasReachedMax: true);
|
||||||
|
}
|
||||||
|
return state.copyWith(failureOption: optionOf(f));
|
||||||
|
},
|
||||||
|
(paymentMethods) {
|
||||||
|
return state.copyWith(
|
||||||
|
paymentMethods: List.from(state.paymentMethods)
|
||||||
|
..addAll(paymentMethods.paymentMethods),
|
||||||
|
failureOption: none(),
|
||||||
|
page: state.page + 1,
|
||||||
|
hasReachedMax: paymentMethods.paymentMethods.length < 10,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,492 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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_method_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PaymentMethodLoaderEvent {
|
||||||
|
bool get isRefresh => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(bool isRefresh) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(bool isRefresh)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(bool isRefresh)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PaymentMethodLoaderEventCopyWith<PaymentMethodLoaderEvent> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PaymentMethodLoaderEventCopyWith<$Res> {
|
||||||
|
factory $PaymentMethodLoaderEventCopyWith(
|
||||||
|
PaymentMethodLoaderEvent value,
|
||||||
|
$Res Function(PaymentMethodLoaderEvent) then,
|
||||||
|
) = _$PaymentMethodLoaderEventCopyWithImpl<$Res, PaymentMethodLoaderEvent>;
|
||||||
|
@useResult
|
||||||
|
$Res call({bool isRefresh});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PaymentMethodLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends PaymentMethodLoaderEvent
|
||||||
|
>
|
||||||
|
implements $PaymentMethodLoaderEventCopyWith<$Res> {
|
||||||
|
_$PaymentMethodLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? isRefresh = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
isRefresh: null == isRefresh
|
||||||
|
? _value.isRefresh
|
||||||
|
: isRefresh // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res>
|
||||||
|
implements $PaymentMethodLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({bool isRefresh});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$PaymentMethodLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? isRefresh = null}) {
|
||||||
|
return _then(
|
||||||
|
_$FetchedImpl(
|
||||||
|
isRefresh: null == isRefresh
|
||||||
|
? _value.isRefresh
|
||||||
|
: isRefresh // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl({this.isRefresh = false});
|
||||||
|
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isRefresh;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PaymentMethodLoaderEvent.fetched(isRefresh: $isRefresh)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$FetchedImpl &&
|
||||||
|
(identical(other.isRefresh, isRefresh) ||
|
||||||
|
other.isRefresh == isRefresh));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, isRefresh);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
__$$FetchedImplCopyWithImpl<_$FetchedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(bool isRefresh) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(isRefresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(bool isRefresh)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(isRefresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(bool isRefresh)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(isRefresh);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements PaymentMethodLoaderEvent {
|
||||||
|
const factory _Fetched({final bool isRefresh}) = _$FetchedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isRefresh;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$FetchedImplCopyWith<_$FetchedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PaymentMethodLoaderState {
|
||||||
|
List<PaymentMethod> get paymentMethods => throw _privateConstructorUsedError;
|
||||||
|
Option<PaymentMethodFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get hasReachedMax => throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
int get page => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PaymentMethodLoaderStateCopyWith<PaymentMethodLoaderState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PaymentMethodLoaderStateCopyWith<$Res> {
|
||||||
|
factory $PaymentMethodLoaderStateCopyWith(
|
||||||
|
PaymentMethodLoaderState value,
|
||||||
|
$Res Function(PaymentMethodLoaderState) then,
|
||||||
|
) = _$PaymentMethodLoaderStateCopyWithImpl<$Res, PaymentMethodLoaderState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
List<PaymentMethod> paymentMethods,
|
||||||
|
Option<PaymentMethodFailure> failureOption,
|
||||||
|
bool hasReachedMax,
|
||||||
|
bool isFetching,
|
||||||
|
int page,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PaymentMethodLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends PaymentMethodLoaderState
|
||||||
|
>
|
||||||
|
implements $PaymentMethodLoaderStateCopyWith<$Res> {
|
||||||
|
_$PaymentMethodLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? paymentMethods = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? hasReachedMax = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
Object? page = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
paymentMethods: null == paymentMethods
|
||||||
|
? _value.paymentMethods
|
||||||
|
: paymentMethods // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<PaymentMethod>,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<PaymentMethodFailure>,
|
||||||
|
hasReachedMax: null == hasReachedMax
|
||||||
|
? _value.hasReachedMax
|
||||||
|
: hasReachedMax // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
page: null == page
|
||||||
|
? _value.page
|
||||||
|
: page // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$PaymentMethodLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $PaymentMethodLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$PaymentMethodLoaderStateImplCopyWith(
|
||||||
|
_$PaymentMethodLoaderStateImpl value,
|
||||||
|
$Res Function(_$PaymentMethodLoaderStateImpl) then,
|
||||||
|
) = __$$PaymentMethodLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
List<PaymentMethod> paymentMethods,
|
||||||
|
Option<PaymentMethodFailure> failureOption,
|
||||||
|
bool hasReachedMax,
|
||||||
|
bool isFetching,
|
||||||
|
int page,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$PaymentMethodLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$PaymentMethodLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$PaymentMethodLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$PaymentMethodLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$PaymentMethodLoaderStateImplCopyWithImpl(
|
||||||
|
_$PaymentMethodLoaderStateImpl _value,
|
||||||
|
$Res Function(_$PaymentMethodLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? paymentMethods = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? hasReachedMax = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
Object? page = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$PaymentMethodLoaderStateImpl(
|
||||||
|
paymentMethods: null == paymentMethods
|
||||||
|
? _value._paymentMethods
|
||||||
|
: paymentMethods // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<PaymentMethod>,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<PaymentMethodFailure>,
|
||||||
|
hasReachedMax: null == hasReachedMax
|
||||||
|
? _value.hasReachedMax
|
||||||
|
: hasReachedMax // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
page: null == page
|
||||||
|
? _value.page
|
||||||
|
: page // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$PaymentMethodLoaderStateImpl implements _PaymentMethodLoaderState {
|
||||||
|
_$PaymentMethodLoaderStateImpl({
|
||||||
|
required final List<PaymentMethod> paymentMethods,
|
||||||
|
required this.failureOption,
|
||||||
|
this.hasReachedMax = false,
|
||||||
|
this.isFetching = false,
|
||||||
|
this.page = 1,
|
||||||
|
}) : _paymentMethods = paymentMethods;
|
||||||
|
|
||||||
|
final List<PaymentMethod> _paymentMethods;
|
||||||
|
@override
|
||||||
|
List<PaymentMethod> get paymentMethods {
|
||||||
|
if (_paymentMethods is EqualUnmodifiableListView) return _paymentMethods;
|
||||||
|
// ignore: implicit_dynamic_type
|
||||||
|
return EqualUnmodifiableListView(_paymentMethods);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Option<PaymentMethodFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool hasReachedMax;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final int page;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PaymentMethodLoaderState(paymentMethods: $paymentMethods, failureOption: $failureOption, hasReachedMax: $hasReachedMax, isFetching: $isFetching, page: $page)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$PaymentMethodLoaderStateImpl &&
|
||||||
|
const DeepCollectionEquality().equals(
|
||||||
|
other._paymentMethods,
|
||||||
|
_paymentMethods,
|
||||||
|
) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.hasReachedMax, hasReachedMax) ||
|
||||||
|
other.hasReachedMax == hasReachedMax) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching) &&
|
||||||
|
(identical(other.page, page) || other.page == page));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
const DeepCollectionEquality().hash(_paymentMethods),
|
||||||
|
failureOption,
|
||||||
|
hasReachedMax,
|
||||||
|
isFetching,
|
||||||
|
page,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$PaymentMethodLoaderStateImplCopyWith<_$PaymentMethodLoaderStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$PaymentMethodLoaderStateImplCopyWithImpl<
|
||||||
|
_$PaymentMethodLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _PaymentMethodLoaderState implements PaymentMethodLoaderState {
|
||||||
|
factory _PaymentMethodLoaderState({
|
||||||
|
required final List<PaymentMethod> paymentMethods,
|
||||||
|
required final Option<PaymentMethodFailure> failureOption,
|
||||||
|
final bool hasReachedMax,
|
||||||
|
final bool isFetching,
|
||||||
|
final int page,
|
||||||
|
}) = _$PaymentMethodLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<PaymentMethod> get paymentMethods;
|
||||||
|
@override
|
||||||
|
Option<PaymentMethodFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get hasReachedMax;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
@override
|
||||||
|
int get page;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$PaymentMethodLoaderStateImplCopyWith<_$PaymentMethodLoaderStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
part of 'payment_method_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodLoaderEvent with _$PaymentMethodLoaderEvent {
|
||||||
|
const factory PaymentMethodLoaderEvent.fetched({
|
||||||
|
@Default(false) bool isRefresh,
|
||||||
|
}) = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
part of 'payment_method_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodLoaderState with _$PaymentMethodLoaderState {
|
||||||
|
factory PaymentMethodLoaderState({
|
||||||
|
required List<PaymentMethod> paymentMethods,
|
||||||
|
required Option<PaymentMethodFailure> failureOption,
|
||||||
|
@Default(false) bool hasReachedMax,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
@Default(1) int page,
|
||||||
|
}) = _PaymentMethodLoaderState;
|
||||||
|
factory PaymentMethodLoaderState.initial() =>
|
||||||
|
PaymentMethodLoaderState(paymentMethods: [], failureOption: none());
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../../domain/printer/printer.dart';
|
||||||
|
|
||||||
|
part 'bluetooth_connect_event.dart';
|
||||||
|
part 'bluetooth_connect_state.dart';
|
||||||
|
part 'bluetooth_connect_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class BluetoothConnectBloc
|
||||||
|
extends Bloc<BluetoothConnectEvent, BluetoothConnectState> {
|
||||||
|
final IPrinterRepository _printerRepository;
|
||||||
|
BluetoothConnectBloc(this._printerRepository)
|
||||||
|
: super(BluetoothConnectState.initial()) {
|
||||||
|
on<BluetoothConnectEvent>(_onBluetoothConnectEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onBluetoothConnectEvent(
|
||||||
|
BluetoothConnectEvent event,
|
||||||
|
Emitter<BluetoothConnectState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
connect: (e) async {
|
||||||
|
emit(state.copyWith(isConnecting: true, failureOrSuccee: none()));
|
||||||
|
|
||||||
|
final result = await _printerRepository.connectBluetooth(e.macAddress);
|
||||||
|
|
||||||
|
result.fold(
|
||||||
|
(failure) => emit(state.copyWith(isConnecting: false)),
|
||||||
|
(success) => emit(state.copyWith(isConnecting: false)),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,404 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'bluetooth_connect_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$BluetoothConnectEvent {
|
||||||
|
String get macAddress => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(String macAddress) connect,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(String macAddress)? connect,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(String macAddress)? connect,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Connect value) connect,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Connect value)? connect,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Connect value)? connect,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$BluetoothConnectEventCopyWith<BluetoothConnectEvent> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $BluetoothConnectEventCopyWith<$Res> {
|
||||||
|
factory $BluetoothConnectEventCopyWith(
|
||||||
|
BluetoothConnectEvent value,
|
||||||
|
$Res Function(BluetoothConnectEvent) then,
|
||||||
|
) = _$BluetoothConnectEventCopyWithImpl<$Res, BluetoothConnectEvent>;
|
||||||
|
@useResult
|
||||||
|
$Res call({String macAddress});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$BluetoothConnectEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends BluetoothConnectEvent
|
||||||
|
>
|
||||||
|
implements $BluetoothConnectEventCopyWith<$Res> {
|
||||||
|
_$BluetoothConnectEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? macAddress = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
macAddress: null == macAddress
|
||||||
|
? _value.macAddress
|
||||||
|
: macAddress // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$ConnectImplCopyWith<$Res>
|
||||||
|
implements $BluetoothConnectEventCopyWith<$Res> {
|
||||||
|
factory _$$ConnectImplCopyWith(
|
||||||
|
_$ConnectImpl value,
|
||||||
|
$Res Function(_$ConnectImpl) then,
|
||||||
|
) = __$$ConnectImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({String macAddress});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$ConnectImplCopyWithImpl<$Res>
|
||||||
|
extends _$BluetoothConnectEventCopyWithImpl<$Res, _$ConnectImpl>
|
||||||
|
implements _$$ConnectImplCopyWith<$Res> {
|
||||||
|
__$$ConnectImplCopyWithImpl(
|
||||||
|
_$ConnectImpl _value,
|
||||||
|
$Res Function(_$ConnectImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? macAddress = null}) {
|
||||||
|
return _then(
|
||||||
|
_$ConnectImpl(
|
||||||
|
null == macAddress
|
||||||
|
? _value.macAddress
|
||||||
|
: macAddress // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$ConnectImpl implements _Connect {
|
||||||
|
const _$ConnectImpl(this.macAddress);
|
||||||
|
|
||||||
|
@override
|
||||||
|
final String macAddress;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'BluetoothConnectEvent.connect(macAddress: $macAddress)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$ConnectImpl &&
|
||||||
|
(identical(other.macAddress, macAddress) ||
|
||||||
|
other.macAddress == macAddress));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, macAddress);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$ConnectImplCopyWith<_$ConnectImpl> get copyWith =>
|
||||||
|
__$$ConnectImplCopyWithImpl<_$ConnectImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(String macAddress) connect,
|
||||||
|
}) {
|
||||||
|
return connect(macAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(String macAddress)? connect,
|
||||||
|
}) {
|
||||||
|
return connect?.call(macAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(String macAddress)? connect,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (connect != null) {
|
||||||
|
return connect(macAddress);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Connect value) connect,
|
||||||
|
}) {
|
||||||
|
return connect(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Connect value)? connect,
|
||||||
|
}) {
|
||||||
|
return connect?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Connect value)? connect,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (connect != null) {
|
||||||
|
return connect(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Connect implements BluetoothConnectEvent {
|
||||||
|
const factory _Connect(final String macAddress) = _$ConnectImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get macAddress;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$ConnectImplCopyWith<_$ConnectImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$BluetoothConnectState {
|
||||||
|
Option<Either<PrinterFailure, bool>> get failureOrSuccee =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isConnecting => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$BluetoothConnectStateCopyWith<BluetoothConnectState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $BluetoothConnectStateCopyWith<$Res> {
|
||||||
|
factory $BluetoothConnectStateCopyWith(
|
||||||
|
BluetoothConnectState value,
|
||||||
|
$Res Function(BluetoothConnectState) then,
|
||||||
|
) = _$BluetoothConnectStateCopyWithImpl<$Res, BluetoothConnectState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
Option<Either<PrinterFailure, bool>> failureOrSuccee,
|
||||||
|
bool isConnecting,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$BluetoothConnectStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends BluetoothConnectState
|
||||||
|
>
|
||||||
|
implements $BluetoothConnectStateCopyWith<$Res> {
|
||||||
|
_$BluetoothConnectStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? failureOrSuccee = null, Object? isConnecting = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
failureOrSuccee: null == failureOrSuccee
|
||||||
|
? _value.failureOrSuccee
|
||||||
|
: failureOrSuccee // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<Either<PrinterFailure, bool>>,
|
||||||
|
isConnecting: null == isConnecting
|
||||||
|
? _value.isConnecting
|
||||||
|
: isConnecting // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$BluetoothConnectStateImplCopyWith<$Res>
|
||||||
|
implements $BluetoothConnectStateCopyWith<$Res> {
|
||||||
|
factory _$$BluetoothConnectStateImplCopyWith(
|
||||||
|
_$BluetoothConnectStateImpl value,
|
||||||
|
$Res Function(_$BluetoothConnectStateImpl) then,
|
||||||
|
) = __$$BluetoothConnectStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
Option<Either<PrinterFailure, bool>> failureOrSuccee,
|
||||||
|
bool isConnecting,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$BluetoothConnectStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$BluetoothConnectStateCopyWithImpl<$Res, _$BluetoothConnectStateImpl>
|
||||||
|
implements _$$BluetoothConnectStateImplCopyWith<$Res> {
|
||||||
|
__$$BluetoothConnectStateImplCopyWithImpl(
|
||||||
|
_$BluetoothConnectStateImpl _value,
|
||||||
|
$Res Function(_$BluetoothConnectStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? failureOrSuccee = null, Object? isConnecting = null}) {
|
||||||
|
return _then(
|
||||||
|
_$BluetoothConnectStateImpl(
|
||||||
|
failureOrSuccee: null == failureOrSuccee
|
||||||
|
? _value.failureOrSuccee
|
||||||
|
: failureOrSuccee // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<Either<PrinterFailure, bool>>,
|
||||||
|
isConnecting: null == isConnecting
|
||||||
|
? _value.isConnecting
|
||||||
|
: isConnecting // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$BluetoothConnectStateImpl implements _BluetoothConnectState {
|
||||||
|
_$BluetoothConnectStateImpl({
|
||||||
|
required this.failureOrSuccee,
|
||||||
|
this.isConnecting = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Option<Either<PrinterFailure, bool>> failureOrSuccee;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isConnecting;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'BluetoothConnectState(failureOrSuccee: $failureOrSuccee, isConnecting: $isConnecting)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$BluetoothConnectStateImpl &&
|
||||||
|
(identical(other.failureOrSuccee, failureOrSuccee) ||
|
||||||
|
other.failureOrSuccee == failureOrSuccee) &&
|
||||||
|
(identical(other.isConnecting, isConnecting) ||
|
||||||
|
other.isConnecting == isConnecting));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, failureOrSuccee, isConnecting);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$BluetoothConnectStateImplCopyWith<_$BluetoothConnectStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$BluetoothConnectStateImplCopyWithImpl<_$BluetoothConnectStateImpl>(
|
||||||
|
this,
|
||||||
|
_$identity,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _BluetoothConnectState implements BluetoothConnectState {
|
||||||
|
factory _BluetoothConnectState({
|
||||||
|
required final Option<Either<PrinterFailure, bool>> failureOrSuccee,
|
||||||
|
final bool isConnecting,
|
||||||
|
}) = _$BluetoothConnectStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Option<Either<PrinterFailure, bool>> get failureOrSuccee;
|
||||||
|
@override
|
||||||
|
bool get isConnecting;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothConnectState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$BluetoothConnectStateImplCopyWith<_$BluetoothConnectStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
part of 'bluetooth_connect_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class BluetoothConnectEvent with _$BluetoothConnectEvent {
|
||||||
|
const factory BluetoothConnectEvent.connect(String macAddress) = _Connect;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
part of 'bluetooth_connect_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class BluetoothConnectState with _$BluetoothConnectState {
|
||||||
|
factory BluetoothConnectState({
|
||||||
|
required Option<Either<PrinterFailure, bool>> failureOrSuccee,
|
||||||
|
@Default(false) bool isConnecting,
|
||||||
|
}) = _BluetoothConnectState;
|
||||||
|
|
||||||
|
factory BluetoothConnectState.initial() =>
|
||||||
|
BluetoothConnectState(failureOrSuccee: none());
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
import 'package:print_bluetooth_thermal/print_bluetooth_thermal.dart';
|
||||||
|
|
||||||
|
import '../../../../domain/printer/printer.dart';
|
||||||
|
|
||||||
|
part 'bluetooth_loader_event.dart';
|
||||||
|
part 'bluetooth_loader_state.dart';
|
||||||
|
part 'bluetooth_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class BluetoothLoaderBloc
|
||||||
|
extends Bloc<BluetoothLoaderEvent, BluetoothLoaderState> {
|
||||||
|
final IPrinterRepository _printerRepository;
|
||||||
|
BluetoothLoaderBloc(this._printerRepository)
|
||||||
|
: super(BluetoothLoaderState.initial()) {
|
||||||
|
on<BluetoothLoaderEvent>(_onBluetoothLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onBluetoothLoaderEvent(
|
||||||
|
BluetoothLoaderEvent event,
|
||||||
|
Emitter<BluetoothLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _printerRepository.getPairedBluetoothDevices();
|
||||||
|
|
||||||
|
result.fold(
|
||||||
|
(failure) => emit(
|
||||||
|
state.copyWith(failureOption: optionOf(failure), isFetching: false),
|
||||||
|
),
|
||||||
|
(devices) => emit(
|
||||||
|
state.copyWith(
|
||||||
|
bluetoothDevices: devices,
|
||||||
|
failureOption: none(),
|
||||||
|
isFetching: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,379 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'bluetooth_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$BluetoothLoaderEvent {
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function() fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function()? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $BluetoothLoaderEventCopyWith<$Res> {
|
||||||
|
factory $BluetoothLoaderEventCopyWith(
|
||||||
|
BluetoothLoaderEvent value,
|
||||||
|
$Res Function(BluetoothLoaderEvent) then,
|
||||||
|
) = _$BluetoothLoaderEventCopyWithImpl<$Res, BluetoothLoaderEvent>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$BluetoothLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends BluetoothLoaderEvent
|
||||||
|
>
|
||||||
|
implements $BluetoothLoaderEventCopyWith<$Res> {
|
||||||
|
_$BluetoothLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$BluetoothLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'BluetoothLoaderEvent.fetched()';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType && other is _$FetchedImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => runtimeType.hashCode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({required TResult Function() fetched}) {
|
||||||
|
return fetched();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched}) {
|
||||||
|
return fetched?.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched();
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements BluetoothLoaderEvent {
|
||||||
|
const factory _Fetched() = _$FetchedImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$BluetoothLoaderState {
|
||||||
|
List<BluetoothInfo> get bluetoothDevices =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
Option<PrinterFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$BluetoothLoaderStateCopyWith<BluetoothLoaderState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $BluetoothLoaderStateCopyWith<$Res> {
|
||||||
|
factory $BluetoothLoaderStateCopyWith(
|
||||||
|
BluetoothLoaderState value,
|
||||||
|
$Res Function(BluetoothLoaderState) then,
|
||||||
|
) = _$BluetoothLoaderStateCopyWithImpl<$Res, BluetoothLoaderState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
List<BluetoothInfo> bluetoothDevices,
|
||||||
|
Option<PrinterFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$BluetoothLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends BluetoothLoaderState
|
||||||
|
>
|
||||||
|
implements $BluetoothLoaderStateCopyWith<$Res> {
|
||||||
|
_$BluetoothLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? bluetoothDevices = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
bluetoothDevices: null == bluetoothDevices
|
||||||
|
? _value.bluetoothDevices
|
||||||
|
: bluetoothDevices // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<BluetoothInfo>,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<PrinterFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$BluetoothLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $BluetoothLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$BluetoothLoaderStateImplCopyWith(
|
||||||
|
_$BluetoothLoaderStateImpl value,
|
||||||
|
$Res Function(_$BluetoothLoaderStateImpl) then,
|
||||||
|
) = __$$BluetoothLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
List<BluetoothInfo> bluetoothDevices,
|
||||||
|
Option<PrinterFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$BluetoothLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends _$BluetoothLoaderStateCopyWithImpl<$Res, _$BluetoothLoaderStateImpl>
|
||||||
|
implements _$$BluetoothLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$BluetoothLoaderStateImplCopyWithImpl(
|
||||||
|
_$BluetoothLoaderStateImpl _value,
|
||||||
|
$Res Function(_$BluetoothLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? bluetoothDevices = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$BluetoothLoaderStateImpl(
|
||||||
|
bluetoothDevices: null == bluetoothDevices
|
||||||
|
? _value._bluetoothDevices
|
||||||
|
: bluetoothDevices // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<BluetoothInfo>,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<PrinterFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$BluetoothLoaderStateImpl implements _BluetoothLoaderState {
|
||||||
|
_$BluetoothLoaderStateImpl({
|
||||||
|
required final List<BluetoothInfo> bluetoothDevices,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
}) : _bluetoothDevices = bluetoothDevices;
|
||||||
|
|
||||||
|
final List<BluetoothInfo> _bluetoothDevices;
|
||||||
|
@override
|
||||||
|
List<BluetoothInfo> get bluetoothDevices {
|
||||||
|
if (_bluetoothDevices is EqualUnmodifiableListView)
|
||||||
|
return _bluetoothDevices;
|
||||||
|
// ignore: implicit_dynamic_type
|
||||||
|
return EqualUnmodifiableListView(_bluetoothDevices);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Option<PrinterFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'BluetoothLoaderState(bluetoothDevices: $bluetoothDevices, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$BluetoothLoaderStateImpl &&
|
||||||
|
const DeepCollectionEquality().equals(
|
||||||
|
other._bluetoothDevices,
|
||||||
|
_bluetoothDevices,
|
||||||
|
) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
const DeepCollectionEquality().hash(_bluetoothDevices),
|
||||||
|
failureOption,
|
||||||
|
isFetching,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$BluetoothLoaderStateImplCopyWith<_$BluetoothLoaderStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$BluetoothLoaderStateImplCopyWithImpl<_$BluetoothLoaderStateImpl>(
|
||||||
|
this,
|
||||||
|
_$identity,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _BluetoothLoaderState implements BluetoothLoaderState {
|
||||||
|
factory _BluetoothLoaderState({
|
||||||
|
required final List<BluetoothInfo> bluetoothDevices,
|
||||||
|
required final Option<PrinterFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$BluetoothLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<BluetoothInfo> get bluetoothDevices;
|
||||||
|
@override
|
||||||
|
Option<PrinterFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of BluetoothLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$BluetoothLoaderStateImplCopyWith<_$BluetoothLoaderStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
part of 'bluetooth_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class BluetoothLoaderEvent with _$BluetoothLoaderEvent {
|
||||||
|
const factory BluetoothLoaderEvent.fetched() = _Fetched;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
part of 'bluetooth_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class BluetoothLoaderState with _$BluetoothLoaderState {
|
||||||
|
factory BluetoothLoaderState({
|
||||||
|
required List<BluetoothInfo> bluetoothDevices,
|
||||||
|
required Option<PrinterFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _BluetoothLoaderState;
|
||||||
|
|
||||||
|
factory BluetoothLoaderState.initial() =>
|
||||||
|
BluetoothLoaderState(bluetoothDevices: [], failureOption: none());
|
||||||
|
}
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart' hide Order;
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
|
||||||
|
import '../../../domain/order/order.dart';
|
||||||
|
import '../../../domain/printer/printer.dart';
|
||||||
|
|
||||||
|
part 'print_struck_event.dart';
|
||||||
|
part 'print_struck_state.dart';
|
||||||
|
part 'print_struck_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PrintStruckBloc extends Bloc<PrintStruckEvent, PrintStruckState> {
|
||||||
|
final IPrinterRepository _printerRepository;
|
||||||
|
|
||||||
|
PrintStruckBloc(this._printerRepository) : super(PrintStruckState.initial()) {
|
||||||
|
on<PrintStruckEvent>(_onPrintStruckEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPrintStruckEvent(
|
||||||
|
PrintStruckEvent event,
|
||||||
|
Emitter<PrintStruckState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
order: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckOrder(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
cashier: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckCashier(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
payment: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckPayment(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
voided: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckVoid(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
splitBill: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckSplitBill(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
kitchen: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckKitchen(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
bar: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckBar(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
checker: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrSuccess;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none()));
|
||||||
|
|
||||||
|
failureOrSuccess = await _printerRepository.printStruckChecker(
|
||||||
|
order: e.order,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintStruck: optionOf(failureOrSuccess),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
part of 'print_struck_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrintStruckEvent with _$PrintStruckEvent {
|
||||||
|
const factory PrintStruckEvent.order(Order order) = _Order;
|
||||||
|
const factory PrintStruckEvent.cashier(Order order) = _Cashier;
|
||||||
|
const factory PrintStruckEvent.payment(Order order) = _Payment;
|
||||||
|
const factory PrintStruckEvent.voided(Order order) = _Voided;
|
||||||
|
const factory PrintStruckEvent.checker(Order order) = _Checker;
|
||||||
|
const factory PrintStruckEvent.kitchen(Order order) = _Kitchen;
|
||||||
|
const factory PrintStruckEvent.bar(Order order) = _Bar;
|
||||||
|
const factory PrintStruckEvent.splitBill(Order order) = _SplitBill;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
part of 'print_struck_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrintStruckState with _$PrintStruckState {
|
||||||
|
factory PrintStruckState({
|
||||||
|
required Option<Either<PrinterFailure, Unit>> failureOrPrintStruck,
|
||||||
|
@Default(false) bool isPrinting,
|
||||||
|
}) = _PrintStruckState;
|
||||||
|
|
||||||
|
factory PrintStruckState.initial() =>
|
||||||
|
PrintStruckState(failureOrPrintStruck: none());
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
part 'printer_event.dart';
|
||||||
|
part 'printer_state.dart';
|
||||||
|
part 'printer_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PrinterBloc extends Bloc<PrinterEvent, PrinterState> {
|
||||||
|
PrinterBloc() : super(PrinterState.initial()) {
|
||||||
|
on<PrinterEvent>(_onPrinterEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPrinterEvent(PrinterEvent event, Emitter<PrinterState> emit) {
|
||||||
|
return event.map(
|
||||||
|
indexChanged: (e) async {
|
||||||
|
emit(state.copyWith(index: e.index));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,363 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'printer_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PrinterEvent {
|
||||||
|
int get index => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(int index) indexChanged,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(int index)? indexChanged,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(int index)? indexChanged,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_IndexChanged value) indexChanged,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_IndexChanged value)? indexChanged,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_IndexChanged value)? indexChanged,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PrinterEventCopyWith<PrinterEvent> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PrinterEventCopyWith<$Res> {
|
||||||
|
factory $PrinterEventCopyWith(
|
||||||
|
PrinterEvent value,
|
||||||
|
$Res Function(PrinterEvent) then,
|
||||||
|
) = _$PrinterEventCopyWithImpl<$Res, PrinterEvent>;
|
||||||
|
@useResult
|
||||||
|
$Res call({int index});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PrinterEventCopyWithImpl<$Res, $Val extends PrinterEvent>
|
||||||
|
implements $PrinterEventCopyWith<$Res> {
|
||||||
|
_$PrinterEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? index = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
index: null == index
|
||||||
|
? _value.index
|
||||||
|
: index // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$IndexChangedImplCopyWith<$Res>
|
||||||
|
implements $PrinterEventCopyWith<$Res> {
|
||||||
|
factory _$$IndexChangedImplCopyWith(
|
||||||
|
_$IndexChangedImpl value,
|
||||||
|
$Res Function(_$IndexChangedImpl) then,
|
||||||
|
) = __$$IndexChangedImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({int index});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$IndexChangedImplCopyWithImpl<$Res>
|
||||||
|
extends _$PrinterEventCopyWithImpl<$Res, _$IndexChangedImpl>
|
||||||
|
implements _$$IndexChangedImplCopyWith<$Res> {
|
||||||
|
__$$IndexChangedImplCopyWithImpl(
|
||||||
|
_$IndexChangedImpl _value,
|
||||||
|
$Res Function(_$IndexChangedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? index = null}) {
|
||||||
|
return _then(
|
||||||
|
_$IndexChangedImpl(
|
||||||
|
null == index
|
||||||
|
? _value.index
|
||||||
|
: index // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$IndexChangedImpl implements _IndexChanged {
|
||||||
|
const _$IndexChangedImpl(this.index);
|
||||||
|
|
||||||
|
@override
|
||||||
|
final int index;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PrinterEvent.indexChanged(index: $index)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$IndexChangedImpl &&
|
||||||
|
(identical(other.index, index) || other.index == index));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, index);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$IndexChangedImplCopyWith<_$IndexChangedImpl> get copyWith =>
|
||||||
|
__$$IndexChangedImplCopyWithImpl<_$IndexChangedImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(int index) indexChanged,
|
||||||
|
}) {
|
||||||
|
return indexChanged(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(int index)? indexChanged,
|
||||||
|
}) {
|
||||||
|
return indexChanged?.call(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(int index)? indexChanged,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (indexChanged != null) {
|
||||||
|
return indexChanged(index);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_IndexChanged value) indexChanged,
|
||||||
|
}) {
|
||||||
|
return indexChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_IndexChanged value)? indexChanged,
|
||||||
|
}) {
|
||||||
|
return indexChanged?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_IndexChanged value)? indexChanged,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (indexChanged != null) {
|
||||||
|
return indexChanged(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _IndexChanged implements PrinterEvent {
|
||||||
|
const factory _IndexChanged(final int index) = _$IndexChangedImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get index;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$IndexChangedImplCopyWith<_$IndexChangedImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PrinterState {
|
||||||
|
int get index => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PrinterStateCopyWith<PrinterState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PrinterStateCopyWith<$Res> {
|
||||||
|
factory $PrinterStateCopyWith(
|
||||||
|
PrinterState value,
|
||||||
|
$Res Function(PrinterState) then,
|
||||||
|
) = _$PrinterStateCopyWithImpl<$Res, PrinterState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({int index});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PrinterStateCopyWithImpl<$Res, $Val extends PrinterState>
|
||||||
|
implements $PrinterStateCopyWith<$Res> {
|
||||||
|
_$PrinterStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? index = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
index: null == index
|
||||||
|
? _value.index
|
||||||
|
: index // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$PrinterStateImplCopyWith<$Res>
|
||||||
|
implements $PrinterStateCopyWith<$Res> {
|
||||||
|
factory _$$PrinterStateImplCopyWith(
|
||||||
|
_$PrinterStateImpl value,
|
||||||
|
$Res Function(_$PrinterStateImpl) then,
|
||||||
|
) = __$$PrinterStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({int index});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$PrinterStateImplCopyWithImpl<$Res>
|
||||||
|
extends _$PrinterStateCopyWithImpl<$Res, _$PrinterStateImpl>
|
||||||
|
implements _$$PrinterStateImplCopyWith<$Res> {
|
||||||
|
__$$PrinterStateImplCopyWithImpl(
|
||||||
|
_$PrinterStateImpl _value,
|
||||||
|
$Res Function(_$PrinterStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? index = null}) {
|
||||||
|
return _then(
|
||||||
|
_$PrinterStateImpl(
|
||||||
|
index: null == index
|
||||||
|
? _value.index
|
||||||
|
: index // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$PrinterStateImpl implements _PrinterState {
|
||||||
|
_$PrinterStateImpl({this.index = 0});
|
||||||
|
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final int index;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PrinterState(index: $index)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$PrinterStateImpl &&
|
||||||
|
(identical(other.index, index) || other.index == index));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, index);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$PrinterStateImplCopyWith<_$PrinterStateImpl> get copyWith =>
|
||||||
|
__$$PrinterStateImplCopyWithImpl<_$PrinterStateImpl>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _PrinterState implements PrinterState {
|
||||||
|
factory _PrinterState({final int index}) = _$PrinterStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get index;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$PrinterStateImplCopyWith<_$PrinterStateImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
part of 'printer_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrinterEvent with _$PrinterEvent {
|
||||||
|
const factory PrinterEvent.indexChanged(int index) = _IndexChanged;
|
||||||
|
}
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart' hide Order;
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
|
||||||
|
import '../../../common/function/app_function.dart';
|
||||||
|
import '../../../domain/order/order.dart';
|
||||||
|
import '../../../domain/outlet/outlet.dart';
|
||||||
|
import '../../../domain/printer/printer.dart';
|
||||||
|
import '../../../presentation/components/print/print_ui.dart';
|
||||||
|
|
||||||
|
part 'printer_form_event.dart';
|
||||||
|
part 'printer_form_state.dart';
|
||||||
|
part 'printer_form_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PrinterFormBloc extends Bloc<PrinterFormEvent, PrinterFormState> {
|
||||||
|
final IPrinterRepository _printerRepository;
|
||||||
|
final IOutletRepository _outletRepository;
|
||||||
|
|
||||||
|
PrinterFormBloc(this._printerRepository, this._outletRepository)
|
||||||
|
: super(PrinterFormState.initial()) {
|
||||||
|
on<PrinterFormEvent>(_onPrinterFormEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPrinterFormEvent(
|
||||||
|
PrinterFormEvent event,
|
||||||
|
Emitter<PrinterFormState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
codeChanged: (e) async {
|
||||||
|
emit(state.copyWith(code: e.code));
|
||||||
|
},
|
||||||
|
nameChanged: (e) async {
|
||||||
|
emit(state.copyWith(name: e.name));
|
||||||
|
},
|
||||||
|
addressChanged: (e) async {
|
||||||
|
emit(state.copyWith(address: e.address));
|
||||||
|
},
|
||||||
|
typeChanged: (e) async {
|
||||||
|
emit(state.copyWith(type: e.type));
|
||||||
|
},
|
||||||
|
paperChanged: (e) async {
|
||||||
|
emit(state.copyWith(paper: e.paper));
|
||||||
|
},
|
||||||
|
created: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrPrinter;
|
||||||
|
|
||||||
|
emit(state.copyWith(isCreating: true, failureOrCreateSuccess: none()));
|
||||||
|
|
||||||
|
final request = Printer(
|
||||||
|
id: generateRandomNumber(),
|
||||||
|
code: state.code,
|
||||||
|
name: state.name,
|
||||||
|
address: state.address,
|
||||||
|
paper: state.paper,
|
||||||
|
type: state.type,
|
||||||
|
createdAt: DateTime.now(),
|
||||||
|
updatedAt: DateTime.now(),
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrPrinter = await _printerRepository.createPrinter(request);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isCreating: false,
|
||||||
|
failureOrCreateSuccess: optionOf(failureOrPrinter),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
updated: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrPrinter;
|
||||||
|
|
||||||
|
emit(state.copyWith(isUpdate: true, failureOrUpdateSuccess: none()));
|
||||||
|
|
||||||
|
final request = Printer(
|
||||||
|
id: generateRandomNumber(),
|
||||||
|
code: state.code,
|
||||||
|
name: state.name,
|
||||||
|
address: state.address,
|
||||||
|
paper: state.paper,
|
||||||
|
type: state.type,
|
||||||
|
createdAt: DateTime.now(),
|
||||||
|
updatedAt: DateTime.now(),
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrPrinter = await _printerRepository.updatePrinter(
|
||||||
|
request,
|
||||||
|
e.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isUpdate: false,
|
||||||
|
failureOrUpdateSuccess: optionOf(failureOrPrinter),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
deleted: (e) async {
|
||||||
|
Either<PrinterFailure, Unit> failureOrPrinter;
|
||||||
|
|
||||||
|
emit(state.copyWith(isDeleting: true, failureOrDeleteSuccess: none()));
|
||||||
|
|
||||||
|
failureOrPrinter = await _printerRepository.deletePrinter(e.id);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isDeleting: false,
|
||||||
|
failureOrDeleteSuccess: optionOf(failureOrPrinter),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
printTest: (e) async {
|
||||||
|
Either<PrinterFailure, bool> failureOrPrinter;
|
||||||
|
|
||||||
|
emit(state.copyWith(isPrinting: true, failureOrPrintTest: none()));
|
||||||
|
|
||||||
|
final currentOutlet = await _outletRepository.currentOutlet();
|
||||||
|
|
||||||
|
// Ambil paper size dari DB, fallback ke state.paper jika belum tersimpan
|
||||||
|
final savedPrinter = await _printerRepository.getPrinterByCode(e.code);
|
||||||
|
final paper = savedPrinter.fold(
|
||||||
|
(_) => int.tryParse(state.paper) ?? 58,
|
||||||
|
(p) => int.tryParse(p.paper) ?? 58,
|
||||||
|
);
|
||||||
|
|
||||||
|
List<int> printValue = [];
|
||||||
|
|
||||||
|
if (e.code == "receipt") {
|
||||||
|
printValue = await PrintUi().printOrder(
|
||||||
|
order: Order.mockOrder(),
|
||||||
|
outlet: currentOutlet,
|
||||||
|
cashierName: 'Kasir Test',
|
||||||
|
paper: paper,
|
||||||
|
);
|
||||||
|
} else if (e.code == "checker") {
|
||||||
|
printValue = await PrintUi().printChecker(
|
||||||
|
order: Order.mockOrder(),
|
||||||
|
outlet: currentOutlet,
|
||||||
|
cashierName: 'Kasir Test',
|
||||||
|
paper: paper,
|
||||||
|
);
|
||||||
|
} else if (e.code == 'kitchen') {
|
||||||
|
printValue = await PrintUi().printKitchen(
|
||||||
|
order: Order.mockOrder(),
|
||||||
|
outlet: currentOutlet,
|
||||||
|
cashierName: 'Kasir Test',
|
||||||
|
paper: paper,
|
||||||
|
);
|
||||||
|
} else if (e.code == 'bar') {
|
||||||
|
printValue = await PrintUi().printBar(
|
||||||
|
order: Order.mockOrder(),
|
||||||
|
outlet: currentOutlet,
|
||||||
|
cashierName: 'Kasir Test',
|
||||||
|
paper: paper,
|
||||||
|
);
|
||||||
|
} else if (e.code == 'ticket') {
|
||||||
|
printValue = await PrintUi().printTicket(
|
||||||
|
order: Order.mockOrder(),
|
||||||
|
outlet: currentOutlet,
|
||||||
|
paper: paper,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final printer = Printer.fromTest(
|
||||||
|
code: e.code,
|
||||||
|
name: state.name,
|
||||||
|
address: e.macAccdress,
|
||||||
|
paper: paper.toString(),
|
||||||
|
type: state.type,
|
||||||
|
);
|
||||||
|
|
||||||
|
failureOrPrinter = await _printerRepository.printStruct(
|
||||||
|
printer,
|
||||||
|
printValue,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isPrinting: false,
|
||||||
|
failureOrPrintTest: optionOf(failureOrPrinter),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
part of 'printer_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrinterFormEvent with _$PrinterFormEvent {
|
||||||
|
const factory PrinterFormEvent.codeChanged(String code) = _CodeChanged;
|
||||||
|
const factory PrinterFormEvent.nameChanged(String name) = _NameChanged;
|
||||||
|
const factory PrinterFormEvent.addressChanged(String address) =
|
||||||
|
_AddressChanged;
|
||||||
|
const factory PrinterFormEvent.typeChanged(String type) = _TypeChanged;
|
||||||
|
const factory PrinterFormEvent.paperChanged(String paper) = _PaperChanged;
|
||||||
|
const factory PrinterFormEvent.created() = _Created;
|
||||||
|
const factory PrinterFormEvent.updated(int id) = _Updated;
|
||||||
|
const factory PrinterFormEvent.deleted(int id) = _Deleted;
|
||||||
|
const factory PrinterFormEvent.printTest({
|
||||||
|
required String code,
|
||||||
|
required String macAccdress,
|
||||||
|
}) = _PrintTest;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
part of 'printer_form_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrinterFormState with _$PrinterFormState {
|
||||||
|
factory PrinterFormState({
|
||||||
|
required String code,
|
||||||
|
required String name,
|
||||||
|
required String address,
|
||||||
|
required String paper,
|
||||||
|
required String type,
|
||||||
|
required Option<Either<PrinterFailure, Unit>> failureOrCreateSuccess,
|
||||||
|
required Option<Either<PrinterFailure, Unit>> failureOrUpdateSuccess,
|
||||||
|
required Option<Either<PrinterFailure, Unit>> failureOrDeleteSuccess,
|
||||||
|
required Option<Either<PrinterFailure, bool>> failureOrPrintTest,
|
||||||
|
@Default(false) isCreating,
|
||||||
|
@Default(false) isUpdate,
|
||||||
|
@Default(false) isDeleting,
|
||||||
|
@Default(false) isPrinting,
|
||||||
|
}) = _PrinterFormState;
|
||||||
|
|
||||||
|
factory PrinterFormState.initial() => PrinterFormState(
|
||||||
|
code: '',
|
||||||
|
name: '',
|
||||||
|
address: '',
|
||||||
|
paper: '58',
|
||||||
|
type: 'Bluetooth',
|
||||||
|
failureOrCreateSuccess: none(),
|
||||||
|
failureOrUpdateSuccess: none(),
|
||||||
|
failureOrDeleteSuccess: none(),
|
||||||
|
failureOrPrintTest: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/printer/printer.dart';
|
||||||
|
|
||||||
|
part 'printer_loader_event.dart';
|
||||||
|
part 'printer_loader_state.dart';
|
||||||
|
part 'printer_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PrinterLoaderBloc extends Bloc<PrinterLoaderEvent, PrinterLoaderState> {
|
||||||
|
final IPrinterRepository _printerRepository;
|
||||||
|
PrinterLoaderBloc(this._printerRepository)
|
||||||
|
: super(PrinterLoaderState.initial()) {
|
||||||
|
on<PrinterLoaderEvent>(_onPrinterLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPrinterLoaderEvent(
|
||||||
|
PrinterLoaderEvent event,
|
||||||
|
Emitter<PrinterLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
getByCode: (e) async {
|
||||||
|
emit(state.copyWith(isFetching: true, failureOption: none()));
|
||||||
|
|
||||||
|
final result = await _printerRepository.getPrinterByCode(e.code);
|
||||||
|
|
||||||
|
await result.fold(
|
||||||
|
(failure) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: false,
|
||||||
|
failureOption: optionOf(failure),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
(printer) async {
|
||||||
|
emit(state.copyWith(isFetching: false, printer: printer));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,437 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// 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 'printer_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PrinterLoaderEvent {
|
||||||
|
String get code => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(String code) getByCode,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(String code)? getByCode,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(String code)? getByCode,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_GetByCode value) getByCode,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_GetByCode value)? getByCode,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_GetByCode value)? getByCode,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PrinterLoaderEventCopyWith<PrinterLoaderEvent> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PrinterLoaderEventCopyWith<$Res> {
|
||||||
|
factory $PrinterLoaderEventCopyWith(
|
||||||
|
PrinterLoaderEvent value,
|
||||||
|
$Res Function(PrinterLoaderEvent) then,
|
||||||
|
) = _$PrinterLoaderEventCopyWithImpl<$Res, PrinterLoaderEvent>;
|
||||||
|
@useResult
|
||||||
|
$Res call({String code});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PrinterLoaderEventCopyWithImpl<$Res, $Val extends PrinterLoaderEvent>
|
||||||
|
implements $PrinterLoaderEventCopyWith<$Res> {
|
||||||
|
_$PrinterLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? code = null}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
code: null == code
|
||||||
|
? _value.code
|
||||||
|
: code // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$GetByCodeImplCopyWith<$Res>
|
||||||
|
implements $PrinterLoaderEventCopyWith<$Res> {
|
||||||
|
factory _$$GetByCodeImplCopyWith(
|
||||||
|
_$GetByCodeImpl value,
|
||||||
|
$Res Function(_$GetByCodeImpl) then,
|
||||||
|
) = __$$GetByCodeImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({String code});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$GetByCodeImplCopyWithImpl<$Res>
|
||||||
|
extends _$PrinterLoaderEventCopyWithImpl<$Res, _$GetByCodeImpl>
|
||||||
|
implements _$$GetByCodeImplCopyWith<$Res> {
|
||||||
|
__$$GetByCodeImplCopyWithImpl(
|
||||||
|
_$GetByCodeImpl _value,
|
||||||
|
$Res Function(_$GetByCodeImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({Object? code = null}) {
|
||||||
|
return _then(
|
||||||
|
_$GetByCodeImpl(
|
||||||
|
null == code
|
||||||
|
? _value.code
|
||||||
|
: code // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$GetByCodeImpl implements _GetByCode {
|
||||||
|
const _$GetByCodeImpl(this.code);
|
||||||
|
|
||||||
|
@override
|
||||||
|
final String code;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PrinterLoaderEvent.getByCode(code: $code)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$GetByCodeImpl &&
|
||||||
|
(identical(other.code, code) || other.code == code));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType, code);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$GetByCodeImplCopyWith<_$GetByCodeImpl> get copyWith =>
|
||||||
|
__$$GetByCodeImplCopyWithImpl<_$GetByCodeImpl>(this, _$identity);
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function(String code) getByCode,
|
||||||
|
}) {
|
||||||
|
return getByCode(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(String code)? getByCode,
|
||||||
|
}) {
|
||||||
|
return getByCode?.call(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function(String code)? getByCode,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (getByCode != null) {
|
||||||
|
return getByCode(code);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_GetByCode value) getByCode,
|
||||||
|
}) {
|
||||||
|
return getByCode(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_GetByCode value)? getByCode,
|
||||||
|
}) {
|
||||||
|
return getByCode?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_GetByCode value)? getByCode,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (getByCode != null) {
|
||||||
|
return getByCode(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _GetByCode implements PrinterLoaderEvent {
|
||||||
|
const factory _GetByCode(final String code) = _$GetByCodeImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get code;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$GetByCodeImplCopyWith<_$GetByCodeImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PrinterLoaderState {
|
||||||
|
Printer get printer => throw _privateConstructorUsedError;
|
||||||
|
Option<PrinterFailure> get failureOption =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PrinterLoaderStateCopyWith<PrinterLoaderState> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PrinterLoaderStateCopyWith<$Res> {
|
||||||
|
factory $PrinterLoaderStateCopyWith(
|
||||||
|
PrinterLoaderState value,
|
||||||
|
$Res Function(PrinterLoaderState) then,
|
||||||
|
) = _$PrinterLoaderStateCopyWithImpl<$Res, PrinterLoaderState>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
Printer printer,
|
||||||
|
Option<PrinterFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$PrinterCopyWith<$Res> get printer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PrinterLoaderStateCopyWithImpl<$Res, $Val extends PrinterLoaderState>
|
||||||
|
implements $PrinterLoaderStateCopyWith<$Res> {
|
||||||
|
_$PrinterLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? printer = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
printer: null == printer
|
||||||
|
? _value.printer
|
||||||
|
: printer // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Printer,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<PrinterFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PrinterCopyWith<$Res> get printer {
|
||||||
|
return $PrinterCopyWith<$Res>(_value.printer, (value) {
|
||||||
|
return _then(_value.copyWith(printer: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$PrinterLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $PrinterLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$PrinterLoaderStateImplCopyWith(
|
||||||
|
_$PrinterLoaderStateImpl value,
|
||||||
|
$Res Function(_$PrinterLoaderStateImpl) then,
|
||||||
|
) = __$$PrinterLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
Printer printer,
|
||||||
|
Option<PrinterFailure> failureOption,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PrinterCopyWith<$Res> get printer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$PrinterLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends _$PrinterLoaderStateCopyWithImpl<$Res, _$PrinterLoaderStateImpl>
|
||||||
|
implements _$$PrinterLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$PrinterLoaderStateImplCopyWithImpl(
|
||||||
|
_$PrinterLoaderStateImpl _value,
|
||||||
|
$Res Function(_$PrinterLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? printer = null,
|
||||||
|
Object? failureOption = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$PrinterLoaderStateImpl(
|
||||||
|
printer: null == printer
|
||||||
|
? _value.printer
|
||||||
|
: printer // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Printer,
|
||||||
|
failureOption: null == failureOption
|
||||||
|
? _value.failureOption
|
||||||
|
: failureOption // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<PrinterFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$PrinterLoaderStateImpl implements _PrinterLoaderState {
|
||||||
|
_$PrinterLoaderStateImpl({
|
||||||
|
required this.printer,
|
||||||
|
required this.failureOption,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final Printer printer;
|
||||||
|
@override
|
||||||
|
final Option<PrinterFailure> failureOption;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PrinterLoaderState(printer: $printer, failureOption: $failureOption, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$PrinterLoaderStateImpl &&
|
||||||
|
(identical(other.printer, printer) || other.printer == printer) &&
|
||||||
|
(identical(other.failureOption, failureOption) ||
|
||||||
|
other.failureOption == failureOption) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
Object.hash(runtimeType, printer, failureOption, isFetching);
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$PrinterLoaderStateImplCopyWith<_$PrinterLoaderStateImpl> get copyWith =>
|
||||||
|
__$$PrinterLoaderStateImplCopyWithImpl<_$PrinterLoaderStateImpl>(
|
||||||
|
this,
|
||||||
|
_$identity,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _PrinterLoaderState implements PrinterLoaderState {
|
||||||
|
factory _PrinterLoaderState({
|
||||||
|
required final Printer printer,
|
||||||
|
required final Option<PrinterFailure> failureOption,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$PrinterLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Printer get printer;
|
||||||
|
@override
|
||||||
|
Option<PrinterFailure> get failureOption;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of PrinterLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$PrinterLoaderStateImplCopyWith<_$PrinterLoaderStateImpl> get copyWith =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
part of 'printer_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrinterLoaderEvent with _$PrinterLoaderEvent {
|
||||||
|
const factory PrinterLoaderEvent.getByCode(String code) = _GetByCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
part of 'printer_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrinterLoaderState with _$PrinterLoaderState {
|
||||||
|
factory PrinterLoaderState({
|
||||||
|
required Printer printer,
|
||||||
|
required Option<PrinterFailure> failureOption,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _PrinterLoaderState;
|
||||||
|
|
||||||
|
factory PrinterLoaderState.initial() =>
|
||||||
|
PrinterLoaderState(printer: Printer.empty(), failureOption: none());
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
part of 'printer_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PrinterState with _$PrinterState {
|
||||||
|
factory PrinterState({@Default(0) int index}) = _PrinterState;
|
||||||
|
factory PrinterState.initial() => PrinterState();
|
||||||
|
}
|
||||||
@@ -43,7 +43,7 @@ class ProductLoaderBloc extends Bloc<ProductLoaderEvent, ProductLoaderState> {
|
|||||||
state.copyWith(
|
state.copyWith(
|
||||||
isLoadingMore: false,
|
isLoadingMore: false,
|
||||||
failureOptionProduct: optionOf(
|
failureOptionProduct: optionOf(
|
||||||
ProductFailure.dynamicErrorMessage(
|
const ProductFailure.dynamicErrorMessage(
|
||||||
'Database lokal belum siap. Silakan lakukan sinkronisasi data terlebih dahulu.',
|
'Database lokal belum siap. Silakan lakukan sinkronisasi data terlebih dahulu.',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:dartz/dartz.dart' hide Order;
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart' hide Order;
|
||||||
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
|
import '../../../common/data/refund_data.dart';
|
||||||
|
import '../../../domain/order/order.dart';
|
||||||
|
|
||||||
|
part 'refund_form_event.dart';
|
||||||
|
part 'refund_form_state.dart';
|
||||||
|
part 'refund_form_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class RefundFormBloc extends Bloc<RefundFormEvent, RefundFormState> {
|
||||||
|
final IOrderRepository _repository;
|
||||||
|
RefundFormBloc(this._repository) : super(RefundFormState.initial()) {
|
||||||
|
on<RefundFormEvent>(_onRefundFormEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onRefundFormEvent(
|
||||||
|
RefundFormEvent event,
|
||||||
|
Emitter<RefundFormState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
setOrder: (e) async {
|
||||||
|
emit(state.copyWith(order: e.order));
|
||||||
|
},
|
||||||
|
reasonChanged: (e) async {
|
||||||
|
emit(state.copyWith(reason: e.reason));
|
||||||
|
},
|
||||||
|
refundReasonChanged: (e) async {
|
||||||
|
emit(state.copyWith(refundReason: e.refundReason));
|
||||||
|
},
|
||||||
|
submitted: (e) async {
|
||||||
|
Either<OrderFailure, Unit>? failureOrRefund;
|
||||||
|
|
||||||
|
// Generate new idempotency key saat user intent (tap Refund)
|
||||||
|
// Kalau sedang retry, pakai key yang sama
|
||||||
|
final idempotencyKey = state.idempotencyKey ?? const Uuid().v4();
|
||||||
|
|
||||||
|
emit(state.copyWith(
|
||||||
|
isSubmitting: true,
|
||||||
|
failureOrRefund: none(),
|
||||||
|
idempotencyKey: idempotencyKey,
|
||||||
|
));
|
||||||
|
|
||||||
|
failureOrRefund = await _repository.refundOrder(
|
||||||
|
id: state.order.id,
|
||||||
|
reason: state.refundReason?.value == 'Lainnya'
|
||||||
|
? state.reason
|
||||||
|
: state.refundReason?.value ?? '',
|
||||||
|
refundAmount: state.order.totalAmount,
|
||||||
|
idempotencyKey: idempotencyKey,
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isSubmitting: false,
|
||||||
|
failureOrRefund: optionOf(failureOrRefund),
|
||||||
|
// Clear key on success, keep on failure for retry
|
||||||
|
idempotencyKey: failureOrRefund.isRight() ? null : idempotencyKey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||