Compare commits

..
91 Commits
Author SHA1 Message Date
Efril f5b0e66706 config: update version 2026-07-22 14:57:06 +07:00
Efril 1ff144a1a2 feat: sort order printer 2026-07-22 14:56:38 +07:00
Efril eb031d4c2a config: prod and dev 2026-07-09 23:08:50 +07:00
Efril 7161f523c2 feat: update api url 2026-07-03 16:04:08 +07:00
Efril d097df1592 update 2026-06-04 07:22:58 +07:00
Efril e8bbef03b0 config: update version 2026-06-04 00:50:34 +07:00
Efril b228538725 feat: implement idempotency key for critical API endpoints 2026-06-04 00:48:50 +07:00
Efril 2ab20a1150 add printer checker checks 2026-05-28 18:11:02 +07:00
Efril b9fcd79962 update version 2026-05-27 19:52:47 +07:00
Efril 9a5f0c7415 fix printer 2026-05-27 19:51:43 +07:00
Efril d345294a2f update printer bar and kitchen 2026-05-27 16:19:11 +07:00
Efril beb86f6259 update printer checker 2026-05-27 16:13:12 +07:00
efrilm ea29c62af1 update build number 2026-05-26 12:14:30 +07:00
efrilm c8a84ffe5f update kitchen printer 2026-05-26 12:14:02 +07:00
Efril 539c70be17 update 2026-05-25 23:35:24 +07:00
Efril c45848bcf2 update printer 2026-05-25 23:33:49 +07:00
Efril 6d9377f4ab update printer 2026-05-25 20:35:40 +07:00
Efril 56e720e253 update checker print 2026-05-25 19:34:31 +07:00
Efril c7ed45a374 fix printer 2026-05-24 00:59:02 +07:00
Efril a0610459bf update login with device info 2026-05-10 22:51:04 +07:00
Efril 842b7a5041 fix fcm 2026-05-07 18:03:41 +07:00
Efril dc09aabbe8 setup fcm 2026-05-07 17:44:03 +07:00
Efril cdc65f8f8f update success add item user before customer name 2026-04-29 12:46:52 +07:00
Efril e7260ea0e2 fix success add item order 2026-04-27 17:39:15 +07:00
Efril b173654a9c update print ui and report dashboard 2026-04-27 17:28:34 +07:00
Efril 699ca4cfb7 handler error print 2026-04-27 12:53:55 +07:00
Efril d790262fd4 update version 2026-04-26 22:33:33 +07:00
Efril 60fec68a92 fix void 2026-04-26 22:32:48 +07:00
Efril ab2d7d7be5 fix void 2026-04-26 22:31:26 +07:00
Efril 6ac88b92ae fix add order item 2026-04-26 22:27:44 +07:00
Efril 9e4e2ebbd1 fix printer fc 2026-04-26 22:15:50 +07:00
Efril 3513c63259 fix qty split bill 2026-04-10 09:50:44 +07:00
Efril 46dfb7e44e update print all segment 2026-04-03 17:44:04 +07:00
Efril a0db13feb4 update version 2026-03-04 23:33:08 +07:00
Efril f626b18d31 fix date range picker 2026-03-04 23:32:47 +07:00
Efril 200f996d3e fix split bill 2026-03-04 23:30:52 +07:00
Efril a739e1c29e update payment page 2026-03-04 22:43:18 +07:00
Efril 4481d24375 update 2026-03-03 19:35:11 +07:00
Efril 59d8f06d75 update printer 2026-03-03 19:11:29 +07:00
Efril e625bd3d2a const constructure 2026-03-01 20:02:12 +07:00
Efril 5058f99fe0 update printer 2026-03-01 19:37:23 +07:00
Efril f7cafeb583 change package calendar 2026-03-01 19:11:08 +07:00
efrilm 37d747c0ba update report 2025-11-13 17:47:00 +07:00
efrilm e3b9444a08 fix printer 2025-11-13 15:57:43 +07:00
efrilm d8a28c084d update printer bar 2025-11-13 13:04:32 +07:00
efrilm d3974b8eda fix printer 2025-11-13 12:56:28 +07:00
efrilm 97313371c3 fix table 2025-11-13 12:45:09 +07:00
efrilm 6fa45c8ac0 fix outlet, fix category, fix printer 2025-11-13 12:01:24 +07:00
efrilm b2b2e2b111 logout 2025-11-10 17:23:26 +07:00
efrilm 0a8f8d93bb Sync Page 2025-11-10 16:56:12 +07:00
efrilm f5256fb33d split struct 2025-11-10 13:28:18 +07:00
efrilm c5673a147c void struck 2025-11-10 13:06:06 +07:00
efrilm af182b6f5a print payment 2025-11-07 17:08:57 +07:00
efrilm d78b6165c2 print bill 2025-11-07 16:59:46 +07:00
efrilm 0886e8c912 print order add item 2025-11-07 16:45:36 +07:00
efrilm 93560b85cb print order 2025-11-07 16:29:26 +07:00
efrilm 4eece81eb1 print ticket 2025-11-06 18:59:10 +07:00
efrilm 873dd7e224 print bar 2025-11-06 18:48:28 +07:00
efrilm 3e6dce93fb print kitchen 2025-11-06 18:45:14 +07:00
efrilm 8923ce737d print kitchen 2025-11-06 18:41:34 +07:00
efrilm c0cf63a176 print checker 2025-11-06 18:28:14 +07:00
efrilm bf7a5708f5 print receipt 2025-11-06 18:15:54 +07:00
efrilm 896ea6c28c printer delete 2025-11-04 22:49:05 +07:00
efrilm 4ed7721bbe setting printer ticket 2025-11-04 22:29:06 +07:00
efrilm f12614cec9 printer kitchen 2025-11-04 22:24:03 +07:00
efrilm 98b152cbc2 printer checker 2025-11-04 22:22:13 +07:00
efrilm 1b24bae23a printer receipt 2025-11-04 22:13:15 +07:00
efrilm a87b62ca9f printer form, bluetooth 2025-11-04 14:58:51 +07:00
efrilm dca0f546f9 report inventory 2025-11-04 00:21:15 +07:00
efrilm 2a44ce023e report category 2025-11-03 23:24:16 +07:00
efrilm 13941d4881 fix report 2025-11-03 21:33:42 +07:00
efrilm 07932d688f report profit loss 2025-11-03 21:28:36 +07:00
efrilm 5a7892aa99 report payment method 2025-11-03 20:32:46 +07:00
efrilm 14c3c69ad6 report product 2025-11-03 19:34:46 +07:00
efrilm 3bb6bd653e report sales 2025-11-03 17:18:29 +07:00
efrilm b4a9cf31fc report dashboard 2025-11-03 16:24:11 +07:00
efrilm 069c2296de refund 2025-11-01 16:17:45 +07:00
efrilm ef23839761 update order detail 2025-11-01 04:20:03 +07:00
efrilm d37a4993df fix nav rails 2025-11-01 04:17:43 +07:00
efrilm 2f155a2f8d report page 2025-11-01 04:11:29 +07:00
efrilm d111025aa6 update order page 2025-11-01 03:29:13 +07:00
efrilm fecb4fb5c1 Success Split Bill Page 2025-11-01 03:24:39 +07:00
efrilm 35f02e6b76 split bill 2025-10-31 20:43:37 +07:00
efrilm 6b42cd86ff split bill 2025-10-31 19:24:15 +07:00
efrilm 7961c9d8c5 success void 2025-10-31 15:14:28 +07:00
efrilm 8d9e622121 void 2025-10-31 14:33:02 +07:00
efrilm bf43c398d2 payment success page 2025-10-30 17:08:11 +07:00
efrilm b335102677 payment 2025-10-30 16:35:47 +07:00
efrilm adc90a90a0 add items order 2025-10-28 20:55:10 +07:00
efrilm 0693411cf7 confirm order save 2025-10-28 17:10:47 +07:00
efrilm a514a8abdb save order pay later page 2025-10-28 16:26:35 +07:00
342 changed files with 61902 additions and 833 deletions
+17
View File
@@ -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"]
}
]
}
+209 -10
View File
@@ -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
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
## Tech Stack
| 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
+3
View File
@@ -4,6 +4,9 @@ linter:
rules:
sort_pub_dependencies: false
prefer_relative_imports: true
prefer_const_constructors: true
prefer_const_literals_to_create_immutables: true
prefer_const_declarations: true
analyzer:
errors:
+3
View File
@@ -14,6 +14,7 @@ android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
isCoreLibraryDesugaringEnabled = true
}
kotlinOptions {
@@ -45,6 +46,8 @@ flutter {
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:34.4.0"))
+9
View File
@@ -10,6 +10,8 @@
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<!-- Izin khusus untuk akses foto (media images) di Android 33 ke atas -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<!-- Izin notifikasi untuk Android 13+ -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application
android:label="Apskel POS"
android:name="${applicationName}"
@@ -41,6 +43,13 @@
<meta-data
android:name="flutterEmbedding"
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>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and
Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

+4
View File
@@ -1,3 +1,7 @@
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
# This builtInKotlin flag was added automatically by Flutter migrator
android.builtInKotlin=false
# This newDsl flag was added automatically by Flutter migrator
android.newDsl=false
+3
View File
@@ -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(),
);
}
+4 -4
View File
@@ -33,16 +33,16 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
state.copyWith(
failureOption: optionOf(f),
status: token
? AuthStatus.authenticated()
: AuthStatus.unauthenticated(),
? const AuthStatus.authenticated()
: const AuthStatus.unauthenticated(),
),
),
(user) => emit(
state.copyWith(
user: user,
status: token
? AuthStatus.authenticated()
: AuthStatus.unauthenticated(),
? const AuthStatus.authenticated()
: const AuthStatus.unauthenticated(),
),
),
);
@@ -5,6 +5,8 @@ import 'package:dartz/dartz.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.dart';
import '../../../common/service/device_info_service.dart';
import '../../../common/service/fcm_service.dart';
import '../../../domain/auth/auth.dart';
part 'login_form_event.dart';
@@ -14,7 +16,14 @@ part 'login_form_bloc.freezed.dart';
@injectable
class LoginFormBloc extends Bloc<LoginFormEvent, LoginFormState> {
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);
}
@@ -43,9 +52,14 @@ class LoginFormBloc extends Bloc<LoginFormEvent, LoginFormState> {
);
if (emailValid && passwordValid) {
final fcmToken = await _fcmService.getToken() ?? '';
final devicePayload = await _deviceInfoService.getDevicePayload();
failureOrLogin = await _authRepository.login(
email: state.email,
password: state.password,
fcmToken: fcmToken,
devicePayload: devicePayload,
);
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());
}
@@ -175,7 +175,7 @@ class CategoryLoaderBloc
_searchDebounce?.cancel();
// Debounce search for better UX
_searchDebounce = Timer(Duration(milliseconds: 300), () async {
_searchDebounce = Timer(const Duration(milliseconds: 300), () async {
emit(state.copyWith(isLoadingMore: true));
_isLoadingMore = false;
@@ -237,7 +237,7 @@ class CategoryLoaderBloc
);
// After sync error, try to load local data
Timer(Duration(seconds: 2), () {
Timer(const Duration(seconds: 2), () {
add(const CategoryLoaderEvent.getCategories());
});
},
@@ -251,7 +251,7 @@ class CategoryLoaderBloc
);
// After successful sync, load the updated data
Timer(Duration(seconds: 1), () {
Timer(const Duration(seconds: 1), () {
add(const CategoryLoaderEvent.getCategories());
});
},
@@ -2,10 +2,11 @@ import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.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';
@@ -176,6 +177,12 @@ class CheckoutFormBloc extends Bloc<CheckoutFormEvent, CheckoutFormState> {
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,));
}
);
}
}
File diff suppressed because it is too large Load Diff
@@ -27,4 +27,9 @@ class CheckoutFormEvent with _$CheckoutFormEvent {
_UpdateDelivery;
const factory CheckoutFormEvent.updateTable(Table? table) = _UpdateTable;
const factory CheckoutFormEvent.orderAddedItems(Order? order) =
_OrderAddedItems;
const factory CheckoutFormEvent.customerNameChanged(String name) =
_CustomerNameChanged;
}
@@ -3,6 +3,7 @@ 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,
@@ -12,6 +13,7 @@ class CheckoutFormState with _$CheckoutFormState {
required int totalPrice,
required String draftName,
required OrderType orderType,
required String customerName,
Delivery? delivery,
Table? table,
@Default(false) bool isLoading,
@@ -26,6 +28,7 @@ class CheckoutFormState with _$CheckoutFormState {
totalQuantity: 0,
totalPrice: 0,
draftName: '',
customerName: '',
orderType: OrderType.dineIn,
);
}
@@ -3,6 +3,7 @@ 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';
@@ -41,7 +42,12 @@ class OrderFormBloc extends Bloc<OrderFormEvent, OrderFormState> {
createOrderWithPayment: (e) async {
Either<OrderFailure, Order> failureOrOrder;
emit(state.copyWith(isCreating: true, failureOrCreateOrder: none()));
emit(
state.copyWith(
isCreatingWithPayment: true,
failureOrCreateOrderWithPayment: none(),
),
);
final outlet = await _outletRepository.currentOutlet();
@@ -73,8 +79,8 @@ class OrderFormBloc extends Bloc<OrderFormEvent, OrderFormState> {
emit(
state.copyWith(
isCreating: false,
failureOrCreateOrder: optionOf(failureOrOrder),
isCreatingWithPayment: false,
failureOrCreateOrderWithPayment: optionOf(failureOrOrder),
),
);
},
@@ -115,6 +121,49 @@ class OrderFormBloc extends Bloc<OrderFormEvent, OrderFormState> {
),
);
},
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,
),
);
},
);
}
}
@@ -34,6 +34,8 @@ mixin _$OrderFormEvent {
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
@@ -52,6 +54,8 @@ mixin _$OrderFormEvent {
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
@@ -70,6 +74,7 @@ mixin _$OrderFormEvent {
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
@@ -80,6 +85,7 @@ mixin _$OrderFormEvent {
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
@@ -88,6 +94,7 @@ mixin _$OrderFormEvent {
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
@@ -96,6 +103,7 @@ mixin _$OrderFormEvent {
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) => throw _privateConstructorUsedError;
}
@@ -221,6 +229,8 @@ class _$CustomerNameChangedImpl
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) {
return customerNameChanged(customerName);
}
@@ -243,6 +253,8 @@ class _$CustomerNameChangedImpl
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) {
return customerNameChanged?.call(customerName);
}
@@ -265,6 +277,7 @@ class _$CustomerNameChangedImpl
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) {
if (customerNameChanged != null) {
@@ -282,6 +295,7 @@ class _$CustomerNameChangedImpl
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) {
return customerNameChanged(this);
}
@@ -294,6 +308,7 @@ class _$CustomerNameChangedImpl
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) {
return customerNameChanged?.call(this);
}
@@ -306,6 +321,7 @@ class _$CustomerNameChangedImpl
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) {
if (customerNameChanged != null) {
@@ -439,6 +455,8 @@ class _$PaymentMethodChangedImpl
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) {
return paymentMethodChanged(payment);
}
@@ -461,6 +479,8 @@ class _$PaymentMethodChangedImpl
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) {
return paymentMethodChanged?.call(payment);
}
@@ -483,6 +503,7 @@ class _$PaymentMethodChangedImpl
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) {
if (paymentMethodChanged != null) {
@@ -500,6 +521,7 @@ class _$PaymentMethodChangedImpl
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) {
return paymentMethodChanged(this);
}
@@ -512,6 +534,7 @@ class _$PaymentMethodChangedImpl
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) {
return paymentMethodChanged?.call(this);
}
@@ -524,6 +547,7 @@ class _$PaymentMethodChangedImpl
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) {
if (paymentMethodChanged != null) {
@@ -661,6 +685,8 @@ class _$CustomerChangedImpl
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) {
return customerChanged(customer);
}
@@ -683,6 +709,8 @@ class _$CustomerChangedImpl
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) {
return customerChanged?.call(customer);
}
@@ -705,6 +733,7 @@ class _$CustomerChangedImpl
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) {
if (customerChanged != null) {
@@ -722,6 +751,7 @@ class _$CustomerChangedImpl
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) {
return customerChanged(this);
}
@@ -734,6 +764,7 @@ class _$CustomerChangedImpl
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) {
return customerChanged?.call(this);
}
@@ -746,6 +777,7 @@ class _$CustomerChangedImpl
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) {
if (customerChanged != null) {
@@ -921,6 +953,8 @@ class _$CreateOrderWithPaymentImpl
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) {
return createOrderWithPayment(items, orderType, table);
}
@@ -943,6 +977,8 @@ class _$CreateOrderWithPaymentImpl
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) {
return createOrderWithPayment?.call(items, orderType, table);
}
@@ -965,6 +1001,7 @@ class _$CreateOrderWithPaymentImpl
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) {
if (createOrderWithPayment != null) {
@@ -982,6 +1019,7 @@ class _$CreateOrderWithPaymentImpl
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) {
return createOrderWithPayment(this);
}
@@ -994,6 +1032,7 @@ class _$CreateOrderWithPaymentImpl
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) {
return createOrderWithPayment?.call(this);
}
@@ -1006,6 +1045,7 @@ class _$CreateOrderWithPaymentImpl
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) {
if (createOrderWithPayment != null) {
@@ -1178,6 +1218,8 @@ class _$CreateOrderImpl with DiagnosticableTreeMixin implements _CreateOrder {
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) {
return createOrder(items, orderType, table);
}
@@ -1200,6 +1242,8 @@ class _$CreateOrderImpl with DiagnosticableTreeMixin implements _CreateOrder {
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) {
return createOrder?.call(items, orderType, table);
}
@@ -1222,6 +1266,7 @@ class _$CreateOrderImpl with DiagnosticableTreeMixin implements _CreateOrder {
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) {
if (createOrder != null) {
@@ -1239,6 +1284,7 @@ class _$CreateOrderImpl with DiagnosticableTreeMixin implements _CreateOrder {
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) {
return createOrder(this);
}
@@ -1251,6 +1297,7 @@ class _$CreateOrderImpl with DiagnosticableTreeMixin implements _CreateOrder {
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) {
return createOrder?.call(this);
}
@@ -1263,6 +1310,7 @@ class _$CreateOrderImpl with DiagnosticableTreeMixin implements _CreateOrder {
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) {
if (createOrder != null) {
@@ -1290,6 +1338,237 @@ abstract class _CreateOrder implements OrderFormEvent {
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$AddItemOrderImplCopyWith<$Res> {
factory _$$AddItemOrderImplCopyWith(
_$AddItemOrderImpl value,
$Res Function(_$AddItemOrderImpl) then,
) = __$$AddItemOrderImplCopyWithImpl<$Res>;
@useResult
$Res call({String orderId, List<ProductQuantity> items});
}
/// @nodoc
class __$$AddItemOrderImplCopyWithImpl<$Res>
extends _$OrderFormEventCopyWithImpl<$Res, _$AddItemOrderImpl>
implements _$$AddItemOrderImplCopyWith<$Res> {
__$$AddItemOrderImplCopyWithImpl(
_$AddItemOrderImpl _value,
$Res Function(_$AddItemOrderImpl) _then,
) : super(_value, _then);
/// Create a copy of OrderFormEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({Object? orderId = null, Object? items = null}) {
return _then(
_$AddItemOrderImpl(
orderId: null == orderId
? _value.orderId
: orderId // ignore: cast_nullable_to_non_nullable
as String,
items: null == items
? _value._items
: items // ignore: cast_nullable_to_non_nullable
as List<ProductQuantity>,
),
);
}
}
/// @nodoc
class _$AddItemOrderImpl with DiagnosticableTreeMixin implements _AddItemOrder {
const _$AddItemOrderImpl({
required this.orderId,
required final List<ProductQuantity> items,
}) : _items = items;
@override
final String orderId;
final List<ProductQuantity> _items;
@override
List<ProductQuantity> get items {
if (_items is EqualUnmodifiableListView) return _items;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_items);
}
@override
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
return 'OrderFormEvent.addItemOrder(orderId: $orderId, items: $items)';
}
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties
..add(DiagnosticsProperty('type', 'OrderFormEvent.addItemOrder'))
..add(DiagnosticsProperty('orderId', orderId))
..add(DiagnosticsProperty('items', items));
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$AddItemOrderImpl &&
(identical(other.orderId, orderId) || other.orderId == orderId) &&
const DeepCollectionEquality().equals(other._items, _items));
}
@override
int get hashCode => Object.hash(
runtimeType,
orderId,
const DeepCollectionEquality().hash(_items),
);
/// Create a copy of OrderFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$AddItemOrderImplCopyWith<_$AddItemOrderImpl> get copyWith =>
__$$AddItemOrderImplCopyWithImpl<_$AddItemOrderImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(String customerName) customerNameChanged,
required TResult Function(PaymentMethod payment) paymentMethodChanged,
required TResult Function(Customer? customer) customerChanged,
required TResult Function(
List<ProductQuantity> items,
OrderType orderType,
Table? table,
)
createOrderWithPayment,
required TResult Function(
List<ProductQuantity> items,
OrderType orderType,
Table? table,
)
createOrder,
required TResult Function(String orderId, List<ProductQuantity> items)
addItemOrder,
}) {
return addItemOrder(orderId, items);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(String customerName)? customerNameChanged,
TResult? Function(PaymentMethod payment)? paymentMethodChanged,
TResult? Function(Customer? customer)? customerChanged,
TResult? Function(
List<ProductQuantity> items,
OrderType orderType,
Table? table,
)?
createOrderWithPayment,
TResult? Function(
List<ProductQuantity> items,
OrderType orderType,
Table? table,
)?
createOrder,
TResult? Function(String orderId, List<ProductQuantity> items)?
addItemOrder,
}) {
return addItemOrder?.call(orderId, items);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(String customerName)? customerNameChanged,
TResult Function(PaymentMethod payment)? paymentMethodChanged,
TResult Function(Customer? customer)? customerChanged,
TResult Function(
List<ProductQuantity> items,
OrderType orderType,
Table? table,
)?
createOrderWithPayment,
TResult Function(
List<ProductQuantity> items,
OrderType orderType,
Table? table,
)?
createOrder,
TResult Function(String orderId, List<ProductQuantity> items)? addItemOrder,
required TResult orElse(),
}) {
if (addItemOrder != null) {
return addItemOrder(orderId, items);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_CustomerNameChanged value) customerNameChanged,
required TResult Function(_PaymentMethodChanged value) paymentMethodChanged,
required TResult Function(_CustomerChanged value) customerChanged,
required TResult Function(_CreateOrderWithPayment value)
createOrderWithPayment,
required TResult Function(_CreateOrder value) createOrder,
required TResult Function(_AddItemOrder value) addItemOrder,
}) {
return addItemOrder(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_CustomerNameChanged value)? customerNameChanged,
TResult? Function(_PaymentMethodChanged value)? paymentMethodChanged,
TResult? Function(_CustomerChanged value)? customerChanged,
TResult? Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult? Function(_CreateOrder value)? createOrder,
TResult? Function(_AddItemOrder value)? addItemOrder,
}) {
return addItemOrder?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_CustomerNameChanged value)? customerNameChanged,
TResult Function(_PaymentMethodChanged value)? paymentMethodChanged,
TResult Function(_CustomerChanged value)? customerChanged,
TResult Function(_CreateOrderWithPayment value)? createOrderWithPayment,
TResult Function(_CreateOrder value)? createOrder,
TResult Function(_AddItemOrder value)? addItemOrder,
required TResult orElse(),
}) {
if (addItemOrder != null) {
return addItemOrder(this);
}
return orElse();
}
}
abstract class _AddItemOrder implements OrderFormEvent {
const factory _AddItemOrder({
required final String orderId,
required final List<ProductQuantity> items,
}) = _$AddItemOrderImpl;
String get orderId;
List<ProductQuantity> get items;
/// Create a copy of OrderFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$AddItemOrderImplCopyWith<_$AddItemOrderImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$OrderFormState {
PaymentMethod? get paymentMethod => throw _privateConstructorUsedError;
@@ -1299,8 +1578,16 @@ mixin _$OrderFormState {
throw _privateConstructorUsedError;
Option<Either<OrderFailure, Order>> get failureOrCreateOrderWithPayment =>
throw _privateConstructorUsedError;
Option<Either<OrderFailure, Order>> get failureOrAddItemOrder =>
throw _privateConstructorUsedError;
bool get isCreating => throw _privateConstructorUsedError;
bool get isCreatingWithPayment => throw _privateConstructorUsedError;
bool get isAddingItemOrder => throw _privateConstructorUsedError;
/// Idempotency key untuk add item order.
/// Di-generate saat user tap "Add Items", dipakai ulang saat retry,
/// di-clear setelah sukses.
String? get addItemIdempotencyKey => throw _privateConstructorUsedError;
/// Create a copy of OrderFormState
/// with the given fields replaced by the non-null parameter values.
@@ -1322,8 +1609,11 @@ abstract class $OrderFormStateCopyWith<$Res> {
Customer? customer,
Option<Either<OrderFailure, Order>> failureOrCreateOrder,
Option<Either<OrderFailure, Order>> failureOrCreateOrderWithPayment,
Option<Either<OrderFailure, Order>> failureOrAddItemOrder,
bool isCreating,
bool isCreatingWithPayment,
bool isAddingItemOrder,
String? addItemIdempotencyKey,
});
$PaymentMethodCopyWith<$Res>? get paymentMethod;
@@ -1350,8 +1640,11 @@ class _$OrderFormStateCopyWithImpl<$Res, $Val extends OrderFormState>
Object? customer = freezed,
Object? failureOrCreateOrder = null,
Object? failureOrCreateOrderWithPayment = null,
Object? failureOrAddItemOrder = null,
Object? isCreating = null,
Object? isCreatingWithPayment = null,
Object? isAddingItemOrder = null,
Object? addItemIdempotencyKey = freezed,
}) {
return _then(
_value.copyWith(
@@ -1376,6 +1669,10 @@ class _$OrderFormStateCopyWithImpl<$Res, $Val extends OrderFormState>
? _value.failureOrCreateOrderWithPayment
: failureOrCreateOrderWithPayment // ignore: cast_nullable_to_non_nullable
as Option<Either<OrderFailure, Order>>,
failureOrAddItemOrder: null == failureOrAddItemOrder
? _value.failureOrAddItemOrder
: failureOrAddItemOrder // ignore: cast_nullable_to_non_nullable
as Option<Either<OrderFailure, Order>>,
isCreating: null == isCreating
? _value.isCreating
: isCreating // ignore: cast_nullable_to_non_nullable
@@ -1384,6 +1681,14 @@ class _$OrderFormStateCopyWithImpl<$Res, $Val extends OrderFormState>
? _value.isCreatingWithPayment
: isCreatingWithPayment // ignore: cast_nullable_to_non_nullable
as bool,
isAddingItemOrder: null == isAddingItemOrder
? _value.isAddingItemOrder
: isAddingItemOrder // ignore: cast_nullable_to_non_nullable
as bool,
addItemIdempotencyKey: freezed == addItemIdempotencyKey
? _value.addItemIdempotencyKey
: addItemIdempotencyKey // ignore: cast_nullable_to_non_nullable
as String?,
)
as $Val,
);
@@ -1433,8 +1738,11 @@ abstract class _$$OrderFormStateImplCopyWith<$Res>
Customer? customer,
Option<Either<OrderFailure, Order>> failureOrCreateOrder,
Option<Either<OrderFailure, Order>> failureOrCreateOrderWithPayment,
Option<Either<OrderFailure, Order>> failureOrAddItemOrder,
bool isCreating,
bool isCreatingWithPayment,
bool isAddingItemOrder,
String? addItemIdempotencyKey,
});
@override
@@ -1462,8 +1770,11 @@ class __$$OrderFormStateImplCopyWithImpl<$Res>
Object? customer = freezed,
Object? failureOrCreateOrder = null,
Object? failureOrCreateOrderWithPayment = null,
Object? failureOrAddItemOrder = null,
Object? isCreating = null,
Object? isCreatingWithPayment = null,
Object? isAddingItemOrder = null,
Object? addItemIdempotencyKey = freezed,
}) {
return _then(
_$OrderFormStateImpl(
@@ -1487,6 +1798,10 @@ class __$$OrderFormStateImplCopyWithImpl<$Res>
? _value.failureOrCreateOrderWithPayment
: failureOrCreateOrderWithPayment // ignore: cast_nullable_to_non_nullable
as Option<Either<OrderFailure, Order>>,
failureOrAddItemOrder: null == failureOrAddItemOrder
? _value.failureOrAddItemOrder
: failureOrAddItemOrder // ignore: cast_nullable_to_non_nullable
as Option<Either<OrderFailure, Order>>,
isCreating: null == isCreating
? _value.isCreating
: isCreating // ignore: cast_nullable_to_non_nullable
@@ -1495,6 +1810,14 @@ class __$$OrderFormStateImplCopyWithImpl<$Res>
? _value.isCreatingWithPayment
: isCreatingWithPayment // ignore: cast_nullable_to_non_nullable
as bool,
isAddingItemOrder: null == isAddingItemOrder
? _value.isAddingItemOrder
: isAddingItemOrder // ignore: cast_nullable_to_non_nullable
as bool,
addItemIdempotencyKey: freezed == addItemIdempotencyKey
? _value.addItemIdempotencyKey
: addItemIdempotencyKey // ignore: cast_nullable_to_non_nullable
as String?,
),
);
}
@@ -1511,8 +1834,11 @@ class _$OrderFormStateImpl
this.customer,
required this.failureOrCreateOrder,
required this.failureOrCreateOrderWithPayment,
required this.failureOrAddItemOrder,
this.isCreating = false,
this.isCreatingWithPayment = false,
this.isAddingItemOrder = false,
this.addItemIdempotencyKey,
});
@override
@@ -1526,15 +1852,26 @@ class _$OrderFormStateImpl
@override
final Option<Either<OrderFailure, Order>> failureOrCreateOrderWithPayment;
@override
final Option<Either<OrderFailure, Order>> failureOrAddItemOrder;
@override
@JsonKey()
final bool isCreating;
@override
@JsonKey()
final bool isCreatingWithPayment;
@override
@JsonKey()
final bool isAddingItemOrder;
/// Idempotency key untuk add item order.
/// Di-generate saat user tap "Add Items", dipakai ulang saat retry,
/// di-clear setelah sukses.
@override
final String? addItemIdempotencyKey;
@override
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
return 'OrderFormState(paymentMethod: $paymentMethod, customerName: $customerName, customer: $customer, failureOrCreateOrder: $failureOrCreateOrder, failureOrCreateOrderWithPayment: $failureOrCreateOrderWithPayment, isCreating: $isCreating, isCreatingWithPayment: $isCreatingWithPayment)';
return 'OrderFormState(paymentMethod: $paymentMethod, customerName: $customerName, customer: $customer, failureOrCreateOrder: $failureOrCreateOrder, failureOrCreateOrderWithPayment: $failureOrCreateOrderWithPayment, failureOrAddItemOrder: $failureOrAddItemOrder, isCreating: $isCreating, isCreatingWithPayment: $isCreatingWithPayment, isAddingItemOrder: $isAddingItemOrder, addItemIdempotencyKey: $addItemIdempotencyKey)';
}
@override
@@ -1552,9 +1889,12 @@ class _$OrderFormStateImpl
failureOrCreateOrderWithPayment,
),
)
..add(DiagnosticsProperty('failureOrAddItemOrder', failureOrAddItemOrder))
..add(DiagnosticsProperty('isCreating', isCreating))
..add(DiagnosticsProperty('isCreatingWithPayment', isCreatingWithPayment))
..add(DiagnosticsProperty('isAddingItemOrder', isAddingItemOrder))
..add(
DiagnosticsProperty('isCreatingWithPayment', isCreatingWithPayment),
DiagnosticsProperty('addItemIdempotencyKey', addItemIdempotencyKey),
);
}
@@ -1577,10 +1917,16 @@ class _$OrderFormStateImpl
) ||
other.failureOrCreateOrderWithPayment ==
failureOrCreateOrderWithPayment) &&
(identical(other.failureOrAddItemOrder, failureOrAddItemOrder) ||
other.failureOrAddItemOrder == failureOrAddItemOrder) &&
(identical(other.isCreating, isCreating) ||
other.isCreating == isCreating) &&
(identical(other.isCreatingWithPayment, isCreatingWithPayment) ||
other.isCreatingWithPayment == isCreatingWithPayment));
other.isCreatingWithPayment == isCreatingWithPayment) &&
(identical(other.isAddingItemOrder, isAddingItemOrder) ||
other.isAddingItemOrder == isAddingItemOrder) &&
(identical(other.addItemIdempotencyKey, addItemIdempotencyKey) ||
other.addItemIdempotencyKey == addItemIdempotencyKey));
}
@override
@@ -1591,8 +1937,11 @@ class _$OrderFormStateImpl
customer,
failureOrCreateOrder,
failureOrCreateOrderWithPayment,
failureOrAddItemOrder,
isCreating,
isCreatingWithPayment,
isAddingItemOrder,
addItemIdempotencyKey,
);
/// Create a copy of OrderFormState
@@ -1615,8 +1964,11 @@ abstract class _OrderFormState implements OrderFormState {
required final Option<Either<OrderFailure, Order>> failureOrCreateOrder,
required final Option<Either<OrderFailure, Order>>
failureOrCreateOrderWithPayment,
required final Option<Either<OrderFailure, Order>> failureOrAddItemOrder,
final bool isCreating,
final bool isCreatingWithPayment,
final bool isAddingItemOrder,
final String? addItemIdempotencyKey,
}) = _$OrderFormStateImpl;
@override
@@ -1630,9 +1982,19 @@ abstract class _OrderFormState implements OrderFormState {
@override
Option<Either<OrderFailure, Order>> get failureOrCreateOrderWithPayment;
@override
Option<Either<OrderFailure, Order>> get failureOrAddItemOrder;
@override
bool get isCreating;
@override
bool get isCreatingWithPayment;
@override
bool get isAddingItemOrder;
/// Idempotency key untuk add item order.
/// Di-generate saat user tap "Add Items", dipakai ulang saat retry,
/// di-clear setelah sukses.
@override
String? get addItemIdempotencyKey;
/// Create a copy of OrderFormState
/// with the given fields replaced by the non-null parameter values.
@@ -19,4 +19,9 @@ class OrderFormEvent with _$OrderFormEvent {
required OrderType orderType,
Table? table,
}) = _CreateOrder;
const factory OrderFormEvent.addItemOrder({
required String orderId,
required List<ProductQuantity> items,
}) = _AddItemOrder;
}
@@ -9,12 +9,19 @@ class OrderFormState with _$OrderFormState {
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(),
);
}
@@ -108,6 +108,7 @@ class OrderLoaderBloc extends Bloc<OrderLoaderEvent, OrderLoaderState> {
failureOption: none(),
page: state.page + 1,
hasReachedMax: orders.orders.length < 10,
totalOrder: orders.totalCount,
);
},
);
@@ -955,6 +955,7 @@ mixin _$OrderLoaderState {
String? get search => throw _privateConstructorUsedError;
DateTime get startDate => throw _privateConstructorUsedError;
DateTime get endDate => throw _privateConstructorUsedError;
int get totalOrder => throw _privateConstructorUsedError;
bool get isFetching => throw _privateConstructorUsedError;
bool get isFetchingById => throw _privateConstructorUsedError;
bool get hasReachedMax => throw _privateConstructorUsedError;
@@ -983,6 +984,7 @@ abstract class $OrderLoaderStateCopyWith<$Res> {
String? search,
DateTime startDate,
DateTime endDate,
int totalOrder,
bool isFetching,
bool isFetchingById,
bool hasReachedMax,
@@ -1016,6 +1018,7 @@ class _$OrderLoaderStateCopyWithImpl<$Res, $Val extends OrderLoaderState>
Object? search = freezed,
Object? startDate = null,
Object? endDate = null,
Object? totalOrder = null,
Object? isFetching = null,
Object? isFetchingById = null,
Object? hasReachedMax = null,
@@ -1055,6 +1058,10 @@ class _$OrderLoaderStateCopyWithImpl<$Res, $Val extends OrderLoaderState>
? _value.endDate
: endDate // ignore: cast_nullable_to_non_nullable
as DateTime,
totalOrder: null == totalOrder
? _value.totalOrder
: totalOrder // ignore: cast_nullable_to_non_nullable
as int,
isFetching: null == isFetching
? _value.isFetching
: isFetching // ignore: cast_nullable_to_non_nullable
@@ -1119,6 +1126,7 @@ abstract class _$$OrderLoaderStateImplCopyWith<$Res>
String? search,
DateTime startDate,
DateTime endDate,
int totalOrder,
bool isFetching,
bool isFetchingById,
bool hasReachedMax,
@@ -1153,6 +1161,7 @@ class __$$OrderLoaderStateImplCopyWithImpl<$Res>
Object? search = freezed,
Object? startDate = null,
Object? endDate = null,
Object? totalOrder = null,
Object? isFetching = null,
Object? isFetchingById = null,
Object? hasReachedMax = null,
@@ -1192,6 +1201,10 @@ class __$$OrderLoaderStateImplCopyWithImpl<$Res>
? _value.endDate
: endDate // ignore: cast_nullable_to_non_nullable
as DateTime,
totalOrder: null == totalOrder
? _value.totalOrder
: totalOrder // ignore: cast_nullable_to_non_nullable
as int,
isFetching: null == isFetching
? _value.isFetching
: isFetching // ignore: cast_nullable_to_non_nullable
@@ -1225,6 +1238,7 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
this.search,
required this.startDate,
required this.endDate,
this.totalOrder = 0,
this.isFetching = false,
this.isFetchingById = false,
this.hasReachedMax = false,
@@ -1255,6 +1269,9 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
final DateTime endDate;
@override
@JsonKey()
final int totalOrder;
@override
@JsonKey()
final bool isFetching;
@override
@JsonKey()
@@ -1268,7 +1285,7 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
@override
String toString() {
return 'OrderLoaderState(orders: $orders, failureOption: $failureOption, failureOptionGetById: $failureOptionGetById, order: $order, selectedOrder: $selectedOrder, search: $search, startDate: $startDate, endDate: $endDate, isFetching: $isFetching, isFetchingById: $isFetchingById, hasReachedMax: $hasReachedMax, page: $page)';
return 'OrderLoaderState(orders: $orders, failureOption: $failureOption, failureOptionGetById: $failureOptionGetById, order: $order, selectedOrder: $selectedOrder, search: $search, startDate: $startDate, endDate: $endDate, totalOrder: $totalOrder, isFetching: $isFetching, isFetchingById: $isFetchingById, hasReachedMax: $hasReachedMax, page: $page)';
}
@override
@@ -1288,6 +1305,8 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
(identical(other.startDate, startDate) ||
other.startDate == startDate) &&
(identical(other.endDate, endDate) || other.endDate == endDate) &&
(identical(other.totalOrder, totalOrder) ||
other.totalOrder == totalOrder) &&
(identical(other.isFetching, isFetching) ||
other.isFetching == isFetching) &&
(identical(other.isFetchingById, isFetchingById) ||
@@ -1308,6 +1327,7 @@ class _$OrderLoaderStateImpl implements _OrderLoaderState {
search,
startDate,
endDate,
totalOrder,
isFetching,
isFetchingById,
hasReachedMax,
@@ -1336,6 +1356,7 @@ abstract class _OrderLoaderState implements OrderLoaderState {
final String? search,
required final DateTime startDate,
required final DateTime endDate,
final int totalOrder,
final bool isFetching,
final bool isFetchingById,
final bool hasReachedMax,
@@ -1359,6 +1380,8 @@ abstract class _OrderLoaderState implements OrderLoaderState {
@override
DateTime get endDate;
@override
int get totalOrder;
@override
bool get isFetching;
@override
bool get isFetchingById;
@@ -11,6 +11,7 @@ class OrderLoaderState with _$OrderLoaderState {
String? search,
required DateTime startDate,
required DateTime endDate,
@Default(0) int totalOrder,
@Default(false) bool isFetching,
@Default(false) bool isFetchingById,
@Default(false) bool hasReachedMax,
@@ -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,
),
);
},
);
}
}
File diff suppressed because it is too large Load Diff
@@ -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,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),
),
);
},
);
}
}
File diff suppressed because it is too large Load Diff
@@ -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());
}
+22
View File
@@ -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),
),
);
},
);
}
}
File diff suppressed because it is too large Load Diff
@@ -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(
isLoadingMore: false,
failureOptionProduct: optionOf(
ProductFailure.dynamicErrorMessage(
const ProductFailure.dynamicErrorMessage(
'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,
),
);
},
);
}
}
@@ -0,0 +1,972 @@
// 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 'refund_form_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 _$RefundFormEvent {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(Order order) setOrder,
required TResult Function(String reason) reasonChanged,
required TResult Function(RefundReason refundReason) refundReasonChanged,
required TResult Function() submitted,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(Order order)? setOrder,
TResult? Function(String reason)? reasonChanged,
TResult? Function(RefundReason refundReason)? refundReasonChanged,
TResult? Function()? submitted,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(Order order)? setOrder,
TResult Function(String reason)? reasonChanged,
TResult Function(RefundReason refundReason)? refundReasonChanged,
TResult Function()? submitted,
required TResult orElse(),
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_SetOrder value) setOrder,
required TResult Function(_ReasonChanged value) reasonChanged,
required TResult Function(_RefundReasonChanged value) refundReasonChanged,
required TResult Function(_Submitted value) submitted,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_SetOrder value)? setOrder,
TResult? Function(_ReasonChanged value)? reasonChanged,
TResult? Function(_RefundReasonChanged value)? refundReasonChanged,
TResult? Function(_Submitted value)? submitted,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_SetOrder value)? setOrder,
TResult Function(_ReasonChanged value)? reasonChanged,
TResult Function(_RefundReasonChanged value)? refundReasonChanged,
TResult Function(_Submitted value)? submitted,
required TResult orElse(),
}) => throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $RefundFormEventCopyWith<$Res> {
factory $RefundFormEventCopyWith(
RefundFormEvent value,
$Res Function(RefundFormEvent) then,
) = _$RefundFormEventCopyWithImpl<$Res, RefundFormEvent>;
}
/// @nodoc
class _$RefundFormEventCopyWithImpl<$Res, $Val extends RefundFormEvent>
implements $RefundFormEventCopyWith<$Res> {
_$RefundFormEventCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
}
/// @nodoc
abstract class _$$SetOrderImplCopyWith<$Res> {
factory _$$SetOrderImplCopyWith(
_$SetOrderImpl value,
$Res Function(_$SetOrderImpl) then,
) = __$$SetOrderImplCopyWithImpl<$Res>;
@useResult
$Res call({Order order});
$OrderCopyWith<$Res> get order;
}
/// @nodoc
class __$$SetOrderImplCopyWithImpl<$Res>
extends _$RefundFormEventCopyWithImpl<$Res, _$SetOrderImpl>
implements _$$SetOrderImplCopyWith<$Res> {
__$$SetOrderImplCopyWithImpl(
_$SetOrderImpl _value,
$Res Function(_$SetOrderImpl) _then,
) : super(_value, _then);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({Object? order = null}) {
return _then(
_$SetOrderImpl(
null == order
? _value.order
: order // ignore: cast_nullable_to_non_nullable
as Order,
),
);
}
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$OrderCopyWith<$Res> get order {
return $OrderCopyWith<$Res>(_value.order, (value) {
return _then(_value.copyWith(order: value));
});
}
}
/// @nodoc
class _$SetOrderImpl implements _SetOrder {
const _$SetOrderImpl(this.order);
@override
final Order order;
@override
String toString() {
return 'RefundFormEvent.setOrder(order: $order)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$SetOrderImpl &&
(identical(other.order, order) || other.order == order));
}
@override
int get hashCode => Object.hash(runtimeType, order);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$SetOrderImplCopyWith<_$SetOrderImpl> get copyWith =>
__$$SetOrderImplCopyWithImpl<_$SetOrderImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(Order order) setOrder,
required TResult Function(String reason) reasonChanged,
required TResult Function(RefundReason refundReason) refundReasonChanged,
required TResult Function() submitted,
}) {
return setOrder(order);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(Order order)? setOrder,
TResult? Function(String reason)? reasonChanged,
TResult? Function(RefundReason refundReason)? refundReasonChanged,
TResult? Function()? submitted,
}) {
return setOrder?.call(order);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(Order order)? setOrder,
TResult Function(String reason)? reasonChanged,
TResult Function(RefundReason refundReason)? refundReasonChanged,
TResult Function()? submitted,
required TResult orElse(),
}) {
if (setOrder != null) {
return setOrder(order);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_SetOrder value) setOrder,
required TResult Function(_ReasonChanged value) reasonChanged,
required TResult Function(_RefundReasonChanged value) refundReasonChanged,
required TResult Function(_Submitted value) submitted,
}) {
return setOrder(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_SetOrder value)? setOrder,
TResult? Function(_ReasonChanged value)? reasonChanged,
TResult? Function(_RefundReasonChanged value)? refundReasonChanged,
TResult? Function(_Submitted value)? submitted,
}) {
return setOrder?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_SetOrder value)? setOrder,
TResult Function(_ReasonChanged value)? reasonChanged,
TResult Function(_RefundReasonChanged value)? refundReasonChanged,
TResult Function(_Submitted value)? submitted,
required TResult orElse(),
}) {
if (setOrder != null) {
return setOrder(this);
}
return orElse();
}
}
abstract class _SetOrder implements RefundFormEvent {
const factory _SetOrder(final Order order) = _$SetOrderImpl;
Order get order;
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$SetOrderImplCopyWith<_$SetOrderImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$ReasonChangedImplCopyWith<$Res> {
factory _$$ReasonChangedImplCopyWith(
_$ReasonChangedImpl value,
$Res Function(_$ReasonChangedImpl) then,
) = __$$ReasonChangedImplCopyWithImpl<$Res>;
@useResult
$Res call({String reason});
}
/// @nodoc
class __$$ReasonChangedImplCopyWithImpl<$Res>
extends _$RefundFormEventCopyWithImpl<$Res, _$ReasonChangedImpl>
implements _$$ReasonChangedImplCopyWith<$Res> {
__$$ReasonChangedImplCopyWithImpl(
_$ReasonChangedImpl _value,
$Res Function(_$ReasonChangedImpl) _then,
) : super(_value, _then);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({Object? reason = null}) {
return _then(
_$ReasonChangedImpl(
null == reason
? _value.reason
: reason // ignore: cast_nullable_to_non_nullable
as String,
),
);
}
}
/// @nodoc
class _$ReasonChangedImpl implements _ReasonChanged {
const _$ReasonChangedImpl(this.reason);
@override
final String reason;
@override
String toString() {
return 'RefundFormEvent.reasonChanged(reason: $reason)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ReasonChangedImpl &&
(identical(other.reason, reason) || other.reason == reason));
}
@override
int get hashCode => Object.hash(runtimeType, reason);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$ReasonChangedImplCopyWith<_$ReasonChangedImpl> get copyWith =>
__$$ReasonChangedImplCopyWithImpl<_$ReasonChangedImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(Order order) setOrder,
required TResult Function(String reason) reasonChanged,
required TResult Function(RefundReason refundReason) refundReasonChanged,
required TResult Function() submitted,
}) {
return reasonChanged(reason);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(Order order)? setOrder,
TResult? Function(String reason)? reasonChanged,
TResult? Function(RefundReason refundReason)? refundReasonChanged,
TResult? Function()? submitted,
}) {
return reasonChanged?.call(reason);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(Order order)? setOrder,
TResult Function(String reason)? reasonChanged,
TResult Function(RefundReason refundReason)? refundReasonChanged,
TResult Function()? submitted,
required TResult orElse(),
}) {
if (reasonChanged != null) {
return reasonChanged(reason);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_SetOrder value) setOrder,
required TResult Function(_ReasonChanged value) reasonChanged,
required TResult Function(_RefundReasonChanged value) refundReasonChanged,
required TResult Function(_Submitted value) submitted,
}) {
return reasonChanged(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_SetOrder value)? setOrder,
TResult? Function(_ReasonChanged value)? reasonChanged,
TResult? Function(_RefundReasonChanged value)? refundReasonChanged,
TResult? Function(_Submitted value)? submitted,
}) {
return reasonChanged?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_SetOrder value)? setOrder,
TResult Function(_ReasonChanged value)? reasonChanged,
TResult Function(_RefundReasonChanged value)? refundReasonChanged,
TResult Function(_Submitted value)? submitted,
required TResult orElse(),
}) {
if (reasonChanged != null) {
return reasonChanged(this);
}
return orElse();
}
}
abstract class _ReasonChanged implements RefundFormEvent {
const factory _ReasonChanged(final String reason) = _$ReasonChangedImpl;
String get reason;
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$ReasonChangedImplCopyWith<_$ReasonChangedImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$RefundReasonChangedImplCopyWith<$Res> {
factory _$$RefundReasonChangedImplCopyWith(
_$RefundReasonChangedImpl value,
$Res Function(_$RefundReasonChangedImpl) then,
) = __$$RefundReasonChangedImplCopyWithImpl<$Res>;
@useResult
$Res call({RefundReason refundReason});
}
/// @nodoc
class __$$RefundReasonChangedImplCopyWithImpl<$Res>
extends _$RefundFormEventCopyWithImpl<$Res, _$RefundReasonChangedImpl>
implements _$$RefundReasonChangedImplCopyWith<$Res> {
__$$RefundReasonChangedImplCopyWithImpl(
_$RefundReasonChangedImpl _value,
$Res Function(_$RefundReasonChangedImpl) _then,
) : super(_value, _then);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({Object? refundReason = null}) {
return _then(
_$RefundReasonChangedImpl(
null == refundReason
? _value.refundReason
: refundReason // ignore: cast_nullable_to_non_nullable
as RefundReason,
),
);
}
}
/// @nodoc
class _$RefundReasonChangedImpl implements _RefundReasonChanged {
const _$RefundReasonChangedImpl(this.refundReason);
@override
final RefundReason refundReason;
@override
String toString() {
return 'RefundFormEvent.refundReasonChanged(refundReason: $refundReason)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$RefundReasonChangedImpl &&
(identical(other.refundReason, refundReason) ||
other.refundReason == refundReason));
}
@override
int get hashCode => Object.hash(runtimeType, refundReason);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$RefundReasonChangedImplCopyWith<_$RefundReasonChangedImpl> get copyWith =>
__$$RefundReasonChangedImplCopyWithImpl<_$RefundReasonChangedImpl>(
this,
_$identity,
);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(Order order) setOrder,
required TResult Function(String reason) reasonChanged,
required TResult Function(RefundReason refundReason) refundReasonChanged,
required TResult Function() submitted,
}) {
return refundReasonChanged(refundReason);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(Order order)? setOrder,
TResult? Function(String reason)? reasonChanged,
TResult? Function(RefundReason refundReason)? refundReasonChanged,
TResult? Function()? submitted,
}) {
return refundReasonChanged?.call(refundReason);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(Order order)? setOrder,
TResult Function(String reason)? reasonChanged,
TResult Function(RefundReason refundReason)? refundReasonChanged,
TResult Function()? submitted,
required TResult orElse(),
}) {
if (refundReasonChanged != null) {
return refundReasonChanged(refundReason);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_SetOrder value) setOrder,
required TResult Function(_ReasonChanged value) reasonChanged,
required TResult Function(_RefundReasonChanged value) refundReasonChanged,
required TResult Function(_Submitted value) submitted,
}) {
return refundReasonChanged(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_SetOrder value)? setOrder,
TResult? Function(_ReasonChanged value)? reasonChanged,
TResult? Function(_RefundReasonChanged value)? refundReasonChanged,
TResult? Function(_Submitted value)? submitted,
}) {
return refundReasonChanged?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_SetOrder value)? setOrder,
TResult Function(_ReasonChanged value)? reasonChanged,
TResult Function(_RefundReasonChanged value)? refundReasonChanged,
TResult Function(_Submitted value)? submitted,
required TResult orElse(),
}) {
if (refundReasonChanged != null) {
return refundReasonChanged(this);
}
return orElse();
}
}
abstract class _RefundReasonChanged implements RefundFormEvent {
const factory _RefundReasonChanged(final RefundReason refundReason) =
_$RefundReasonChangedImpl;
RefundReason get refundReason;
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$RefundReasonChangedImplCopyWith<_$RefundReasonChangedImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$SubmittedImplCopyWith<$Res> {
factory _$$SubmittedImplCopyWith(
_$SubmittedImpl value,
$Res Function(_$SubmittedImpl) then,
) = __$$SubmittedImplCopyWithImpl<$Res>;
}
/// @nodoc
class __$$SubmittedImplCopyWithImpl<$Res>
extends _$RefundFormEventCopyWithImpl<$Res, _$SubmittedImpl>
implements _$$SubmittedImplCopyWith<$Res> {
__$$SubmittedImplCopyWithImpl(
_$SubmittedImpl _value,
$Res Function(_$SubmittedImpl) _then,
) : super(_value, _then);
/// Create a copy of RefundFormEvent
/// with the given fields replaced by the non-null parameter values.
}
/// @nodoc
class _$SubmittedImpl implements _Submitted {
const _$SubmittedImpl();
@override
String toString() {
return 'RefundFormEvent.submitted()';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType && other is _$SubmittedImpl);
}
@override
int get hashCode => runtimeType.hashCode;
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(Order order) setOrder,
required TResult Function(String reason) reasonChanged,
required TResult Function(RefundReason refundReason) refundReasonChanged,
required TResult Function() submitted,
}) {
return submitted();
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(Order order)? setOrder,
TResult? Function(String reason)? reasonChanged,
TResult? Function(RefundReason refundReason)? refundReasonChanged,
TResult? Function()? submitted,
}) {
return submitted?.call();
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(Order order)? setOrder,
TResult Function(String reason)? reasonChanged,
TResult Function(RefundReason refundReason)? refundReasonChanged,
TResult Function()? submitted,
required TResult orElse(),
}) {
if (submitted != null) {
return submitted();
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_SetOrder value) setOrder,
required TResult Function(_ReasonChanged value) reasonChanged,
required TResult Function(_RefundReasonChanged value) refundReasonChanged,
required TResult Function(_Submitted value) submitted,
}) {
return submitted(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_SetOrder value)? setOrder,
TResult? Function(_ReasonChanged value)? reasonChanged,
TResult? Function(_RefundReasonChanged value)? refundReasonChanged,
TResult? Function(_Submitted value)? submitted,
}) {
return submitted?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_SetOrder value)? setOrder,
TResult Function(_ReasonChanged value)? reasonChanged,
TResult Function(_RefundReasonChanged value)? refundReasonChanged,
TResult Function(_Submitted value)? submitted,
required TResult orElse(),
}) {
if (submitted != null) {
return submitted(this);
}
return orElse();
}
}
abstract class _Submitted implements RefundFormEvent {
const factory _Submitted() = _$SubmittedImpl;
}
/// @nodoc
mixin _$RefundFormState {
Order get order => throw _privateConstructorUsedError;
String get reason => throw _privateConstructorUsedError;
RefundReason? get refundReason => throw _privateConstructorUsedError;
Option<Either<OrderFailure, Unit>> get failureOrRefund =>
throw _privateConstructorUsedError;
bool get isSubmitting => throw _privateConstructorUsedError;
/// Idempotency key untuk refund submission.
/// Di-generate saat user tap "Refund", dipakai ulang saat retry,
/// di-clear setelah sukses.
String? get idempotencyKey => throw _privateConstructorUsedError;
/// Create a copy of RefundFormState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$RefundFormStateCopyWith<RefundFormState> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $RefundFormStateCopyWith<$Res> {
factory $RefundFormStateCopyWith(
RefundFormState value,
$Res Function(RefundFormState) then,
) = _$RefundFormStateCopyWithImpl<$Res, RefundFormState>;
@useResult
$Res call({
Order order,
String reason,
RefundReason? refundReason,
Option<Either<OrderFailure, Unit>> failureOrRefund,
bool isSubmitting,
String? idempotencyKey,
});
$OrderCopyWith<$Res> get order;
}
/// @nodoc
class _$RefundFormStateCopyWithImpl<$Res, $Val extends RefundFormState>
implements $RefundFormStateCopyWith<$Res> {
_$RefundFormStateCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of RefundFormState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? order = null,
Object? reason = null,
Object? refundReason = freezed,
Object? failureOrRefund = null,
Object? isSubmitting = null,
Object? idempotencyKey = freezed,
}) {
return _then(
_value.copyWith(
order: null == order
? _value.order
: order // ignore: cast_nullable_to_non_nullable
as Order,
reason: null == reason
? _value.reason
: reason // ignore: cast_nullable_to_non_nullable
as String,
refundReason: freezed == refundReason
? _value.refundReason
: refundReason // ignore: cast_nullable_to_non_nullable
as RefundReason?,
failureOrRefund: null == failureOrRefund
? _value.failureOrRefund
: failureOrRefund // ignore: cast_nullable_to_non_nullable
as Option<Either<OrderFailure, Unit>>,
isSubmitting: null == isSubmitting
? _value.isSubmitting
: isSubmitting // ignore: cast_nullable_to_non_nullable
as bool,
idempotencyKey: freezed == idempotencyKey
? _value.idempotencyKey
: idempotencyKey // ignore: cast_nullable_to_non_nullable
as String?,
)
as $Val,
);
}
/// Create a copy of RefundFormState
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$OrderCopyWith<$Res> get order {
return $OrderCopyWith<$Res>(_value.order, (value) {
return _then(_value.copyWith(order: value) as $Val);
});
}
}
/// @nodoc
abstract class _$$RefundFormStateImplCopyWith<$Res>
implements $RefundFormStateCopyWith<$Res> {
factory _$$RefundFormStateImplCopyWith(
_$RefundFormStateImpl value,
$Res Function(_$RefundFormStateImpl) then,
) = __$$RefundFormStateImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({
Order order,
String reason,
RefundReason? refundReason,
Option<Either<OrderFailure, Unit>> failureOrRefund,
bool isSubmitting,
String? idempotencyKey,
});
@override
$OrderCopyWith<$Res> get order;
}
/// @nodoc
class __$$RefundFormStateImplCopyWithImpl<$Res>
extends _$RefundFormStateCopyWithImpl<$Res, _$RefundFormStateImpl>
implements _$$RefundFormStateImplCopyWith<$Res> {
__$$RefundFormStateImplCopyWithImpl(
_$RefundFormStateImpl _value,
$Res Function(_$RefundFormStateImpl) _then,
) : super(_value, _then);
/// Create a copy of RefundFormState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? order = null,
Object? reason = null,
Object? refundReason = freezed,
Object? failureOrRefund = null,
Object? isSubmitting = null,
Object? idempotencyKey = freezed,
}) {
return _then(
_$RefundFormStateImpl(
order: null == order
? _value.order
: order // ignore: cast_nullable_to_non_nullable
as Order,
reason: null == reason
? _value.reason
: reason // ignore: cast_nullable_to_non_nullable
as String,
refundReason: freezed == refundReason
? _value.refundReason
: refundReason // ignore: cast_nullable_to_non_nullable
as RefundReason?,
failureOrRefund: null == failureOrRefund
? _value.failureOrRefund
: failureOrRefund // ignore: cast_nullable_to_non_nullable
as Option<Either<OrderFailure, Unit>>,
isSubmitting: null == isSubmitting
? _value.isSubmitting
: isSubmitting // ignore: cast_nullable_to_non_nullable
as bool,
idempotencyKey: freezed == idempotencyKey
? _value.idempotencyKey
: idempotencyKey // ignore: cast_nullable_to_non_nullable
as String?,
),
);
}
}
/// @nodoc
class _$RefundFormStateImpl implements _RefundFormState {
_$RefundFormStateImpl({
required this.order,
required this.reason,
this.refundReason,
required this.failureOrRefund,
this.isSubmitting = false,
this.idempotencyKey,
});
@override
final Order order;
@override
final String reason;
@override
final RefundReason? refundReason;
@override
final Option<Either<OrderFailure, Unit>> failureOrRefund;
@override
@JsonKey()
final bool isSubmitting;
/// Idempotency key untuk refund submission.
/// Di-generate saat user tap "Refund", dipakai ulang saat retry,
/// di-clear setelah sukses.
@override
final String? idempotencyKey;
@override
String toString() {
return 'RefundFormState(order: $order, reason: $reason, refundReason: $refundReason, failureOrRefund: $failureOrRefund, isSubmitting: $isSubmitting, idempotencyKey: $idempotencyKey)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$RefundFormStateImpl &&
(identical(other.order, order) || other.order == order) &&
(identical(other.reason, reason) || other.reason == reason) &&
(identical(other.refundReason, refundReason) ||
other.refundReason == refundReason) &&
(identical(other.failureOrRefund, failureOrRefund) ||
other.failureOrRefund == failureOrRefund) &&
(identical(other.isSubmitting, isSubmitting) ||
other.isSubmitting == isSubmitting) &&
(identical(other.idempotencyKey, idempotencyKey) ||
other.idempotencyKey == idempotencyKey));
}
@override
int get hashCode => Object.hash(
runtimeType,
order,
reason,
refundReason,
failureOrRefund,
isSubmitting,
idempotencyKey,
);
/// Create a copy of RefundFormState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$RefundFormStateImplCopyWith<_$RefundFormStateImpl> get copyWith =>
__$$RefundFormStateImplCopyWithImpl<_$RefundFormStateImpl>(
this,
_$identity,
);
}
abstract class _RefundFormState implements RefundFormState {
factory _RefundFormState({
required final Order order,
required final String reason,
final RefundReason? refundReason,
required final Option<Either<OrderFailure, Unit>> failureOrRefund,
final bool isSubmitting,
final String? idempotencyKey,
}) = _$RefundFormStateImpl;
@override
Order get order;
@override
String get reason;
@override
RefundReason? get refundReason;
@override
Option<Either<OrderFailure, Unit>> get failureOrRefund;
@override
bool get isSubmitting;
/// Idempotency key untuk refund submission.
/// Di-generate saat user tap "Refund", dipakai ulang saat retry,
/// di-clear setelah sukses.
@override
String? get idempotencyKey;
/// Create a copy of RefundFormState
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$RefundFormStateImplCopyWith<_$RefundFormStateImpl> get copyWith =>
throw _privateConstructorUsedError;
}
@@ -0,0 +1,10 @@
part of 'refund_form_bloc.dart';
@freezed
class RefundFormEvent with _$RefundFormEvent {
const factory RefundFormEvent.setOrder(Order order) = _SetOrder;
const factory RefundFormEvent.reasonChanged(String reason) = _ReasonChanged;
const factory RefundFormEvent.refundReasonChanged(RefundReason refundReason) =
_RefundReasonChanged;
const factory RefundFormEvent.submitted() = _Submitted;
}
@@ -0,0 +1,22 @@
part of 'refund_form_bloc.dart';
@freezed
class RefundFormState with _$RefundFormState {
factory RefundFormState({
required Order order,
required String reason,
RefundReason? refundReason,
required Option<Either<OrderFailure, Unit>> failureOrRefund,
@Default(false) bool isSubmitting,
/// Idempotency key untuk refund submission.
/// Di-generate saat user tap "Refund", dipakai ulang saat retry,
/// di-clear setelah sukses.
String? idempotencyKey,
}) = _RefundFormState;
factory RefundFormState.initial() => RefundFormState(
order: Order.empty(),
reason: '',
failureOrRefund: none(),
);
}
+34
View File
@@ -0,0 +1,34 @@
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.dart';
import '../../common/extension/extension.dart';
part 'report_event.dart';
part 'report_state.dart';
part 'report_bloc.freezed.dart';
@injectable
class ReportBloc extends Bloc<ReportEvent, ReportState> {
ReportBloc() : super(ReportState.initial()) {
on<ReportEvent>(_onReportEvent);
}
Future<void> _onReportEvent(ReportEvent event, Emitter<ReportState> emit) {
return event.map(
dateChanged: (e) async {
emit(
state.copyWith(
startDate: e.startDate,
endDate: e.endDate,
rangeDateFormatted:
'${e.startDate.toFormattedDate()} - ${e.endDate.toFormattedDate()}',
),
);
},
menuChanged: (e) async {
emit(state.copyWith(selectedMenu: e.index, title: e.title));
},
);
}
}
@@ -0,0 +1,616 @@
// 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 'report_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 _$ReportEvent {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(int index, String title) menuChanged,
required TResult Function(DateTime startDate, DateTime endDate) dateChanged,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(int index, String title)? menuChanged,
TResult? Function(DateTime startDate, DateTime endDate)? dateChanged,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(int index, String title)? menuChanged,
TResult Function(DateTime startDate, DateTime endDate)? dateChanged,
required TResult orElse(),
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_MenuChanged value) menuChanged,
required TResult Function(_DateChanged value) dateChanged,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_MenuChanged value)? menuChanged,
TResult? Function(_DateChanged value)? dateChanged,
}) => throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_MenuChanged value)? menuChanged,
TResult Function(_DateChanged value)? dateChanged,
required TResult orElse(),
}) => throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $ReportEventCopyWith<$Res> {
factory $ReportEventCopyWith(
ReportEvent value,
$Res Function(ReportEvent) then,
) = _$ReportEventCopyWithImpl<$Res, ReportEvent>;
}
/// @nodoc
class _$ReportEventCopyWithImpl<$Res, $Val extends ReportEvent>
implements $ReportEventCopyWith<$Res> {
_$ReportEventCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of ReportEvent
/// with the given fields replaced by the non-null parameter values.
}
/// @nodoc
abstract class _$$MenuChangedImplCopyWith<$Res> {
factory _$$MenuChangedImplCopyWith(
_$MenuChangedImpl value,
$Res Function(_$MenuChangedImpl) then,
) = __$$MenuChangedImplCopyWithImpl<$Res>;
@useResult
$Res call({int index, String title});
}
/// @nodoc
class __$$MenuChangedImplCopyWithImpl<$Res>
extends _$ReportEventCopyWithImpl<$Res, _$MenuChangedImpl>
implements _$$MenuChangedImplCopyWith<$Res> {
__$$MenuChangedImplCopyWithImpl(
_$MenuChangedImpl _value,
$Res Function(_$MenuChangedImpl) _then,
) : super(_value, _then);
/// Create a copy of ReportEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({Object? index = null, Object? title = null}) {
return _then(
_$MenuChangedImpl(
index: null == index
? _value.index
: index // ignore: cast_nullable_to_non_nullable
as int,
title: null == title
? _value.title
: title // ignore: cast_nullable_to_non_nullable
as String,
),
);
}
}
/// @nodoc
class _$MenuChangedImpl implements _MenuChanged {
const _$MenuChangedImpl({required this.index, required this.title});
@override
final int index;
@override
final String title;
@override
String toString() {
return 'ReportEvent.menuChanged(index: $index, title: $title)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$MenuChangedImpl &&
(identical(other.index, index) || other.index == index) &&
(identical(other.title, title) || other.title == title));
}
@override
int get hashCode => Object.hash(runtimeType, index, title);
/// Create a copy of ReportEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$MenuChangedImplCopyWith<_$MenuChangedImpl> get copyWith =>
__$$MenuChangedImplCopyWithImpl<_$MenuChangedImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(int index, String title) menuChanged,
required TResult Function(DateTime startDate, DateTime endDate) dateChanged,
}) {
return menuChanged(index, title);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(int index, String title)? menuChanged,
TResult? Function(DateTime startDate, DateTime endDate)? dateChanged,
}) {
return menuChanged?.call(index, title);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(int index, String title)? menuChanged,
TResult Function(DateTime startDate, DateTime endDate)? dateChanged,
required TResult orElse(),
}) {
if (menuChanged != null) {
return menuChanged(index, title);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_MenuChanged value) menuChanged,
required TResult Function(_DateChanged value) dateChanged,
}) {
return menuChanged(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_MenuChanged value)? menuChanged,
TResult? Function(_DateChanged value)? dateChanged,
}) {
return menuChanged?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_MenuChanged value)? menuChanged,
TResult Function(_DateChanged value)? dateChanged,
required TResult orElse(),
}) {
if (menuChanged != null) {
return menuChanged(this);
}
return orElse();
}
}
abstract class _MenuChanged implements ReportEvent {
const factory _MenuChanged({
required final int index,
required final String title,
}) = _$MenuChangedImpl;
int get index;
String get title;
/// Create a copy of ReportEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$MenuChangedImplCopyWith<_$MenuChangedImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class _$$DateChangedImplCopyWith<$Res> {
factory _$$DateChangedImplCopyWith(
_$DateChangedImpl value,
$Res Function(_$DateChangedImpl) then,
) = __$$DateChangedImplCopyWithImpl<$Res>;
@useResult
$Res call({DateTime startDate, DateTime endDate});
}
/// @nodoc
class __$$DateChangedImplCopyWithImpl<$Res>
extends _$ReportEventCopyWithImpl<$Res, _$DateChangedImpl>
implements _$$DateChangedImplCopyWith<$Res> {
__$$DateChangedImplCopyWithImpl(
_$DateChangedImpl _value,
$Res Function(_$DateChangedImpl) _then,
) : super(_value, _then);
/// Create a copy of ReportEvent
/// 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(
_$DateChangedImpl(
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 _$DateChangedImpl implements _DateChanged {
const _$DateChangedImpl({required this.startDate, required this.endDate});
@override
final DateTime startDate;
@override
final DateTime endDate;
@override
String toString() {
return 'ReportEvent.dateChanged(startDate: $startDate, endDate: $endDate)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$DateChangedImpl &&
(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 ReportEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$DateChangedImplCopyWith<_$DateChangedImpl> get copyWith =>
__$$DateChangedImplCopyWithImpl<_$DateChangedImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(int index, String title) menuChanged,
required TResult Function(DateTime startDate, DateTime endDate) dateChanged,
}) {
return dateChanged(startDate, endDate);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(int index, String title)? menuChanged,
TResult? Function(DateTime startDate, DateTime endDate)? dateChanged,
}) {
return dateChanged?.call(startDate, endDate);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(int index, String title)? menuChanged,
TResult Function(DateTime startDate, DateTime endDate)? dateChanged,
required TResult orElse(),
}) {
if (dateChanged != null) {
return dateChanged(startDate, endDate);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_MenuChanged value) menuChanged,
required TResult Function(_DateChanged value) dateChanged,
}) {
return dateChanged(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_MenuChanged value)? menuChanged,
TResult? Function(_DateChanged value)? dateChanged,
}) {
return dateChanged?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_MenuChanged value)? menuChanged,
TResult Function(_DateChanged value)? dateChanged,
required TResult orElse(),
}) {
if (dateChanged != null) {
return dateChanged(this);
}
return orElse();
}
}
abstract class _DateChanged implements ReportEvent {
const factory _DateChanged({
required final DateTime startDate,
required final DateTime endDate,
}) = _$DateChangedImpl;
DateTime get startDate;
DateTime get endDate;
/// Create a copy of ReportEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$DateChangedImplCopyWith<_$DateChangedImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$ReportState {
String get title => throw _privateConstructorUsedError;
DateTime get startDate => throw _privateConstructorUsedError;
DateTime get endDate => throw _privateConstructorUsedError;
String get rangeDateFormatted => throw _privateConstructorUsedError;
int get selectedMenu => throw _privateConstructorUsedError;
/// Create a copy of ReportState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$ReportStateCopyWith<ReportState> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $ReportStateCopyWith<$Res> {
factory $ReportStateCopyWith(
ReportState value,
$Res Function(ReportState) then,
) = _$ReportStateCopyWithImpl<$Res, ReportState>;
@useResult
$Res call({
String title,
DateTime startDate,
DateTime endDate,
String rangeDateFormatted,
int selectedMenu,
});
}
/// @nodoc
class _$ReportStateCopyWithImpl<$Res, $Val extends ReportState>
implements $ReportStateCopyWith<$Res> {
_$ReportStateCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of ReportState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? title = null,
Object? startDate = null,
Object? endDate = null,
Object? rangeDateFormatted = null,
Object? selectedMenu = null,
}) {
return _then(
_value.copyWith(
title: null == title
? _value.title
: title // ignore: cast_nullable_to_non_nullable
as String,
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,
rangeDateFormatted: null == rangeDateFormatted
? _value.rangeDateFormatted
: rangeDateFormatted // ignore: cast_nullable_to_non_nullable
as String,
selectedMenu: null == selectedMenu
? _value.selectedMenu
: selectedMenu // ignore: cast_nullable_to_non_nullable
as int,
)
as $Val,
);
}
}
/// @nodoc
abstract class _$$ReportStateImplCopyWith<$Res>
implements $ReportStateCopyWith<$Res> {
factory _$$ReportStateImplCopyWith(
_$ReportStateImpl value,
$Res Function(_$ReportStateImpl) then,
) = __$$ReportStateImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({
String title,
DateTime startDate,
DateTime endDate,
String rangeDateFormatted,
int selectedMenu,
});
}
/// @nodoc
class __$$ReportStateImplCopyWithImpl<$Res>
extends _$ReportStateCopyWithImpl<$Res, _$ReportStateImpl>
implements _$$ReportStateImplCopyWith<$Res> {
__$$ReportStateImplCopyWithImpl(
_$ReportStateImpl _value,
$Res Function(_$ReportStateImpl) _then,
) : super(_value, _then);
/// Create a copy of ReportState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? title = null,
Object? startDate = null,
Object? endDate = null,
Object? rangeDateFormatted = null,
Object? selectedMenu = null,
}) {
return _then(
_$ReportStateImpl(
title: null == title
? _value.title
: title // ignore: cast_nullable_to_non_nullable
as String,
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,
rangeDateFormatted: null == rangeDateFormatted
? _value.rangeDateFormatted
: rangeDateFormatted // ignore: cast_nullable_to_non_nullable
as String,
selectedMenu: null == selectedMenu
? _value.selectedMenu
: selectedMenu // ignore: cast_nullable_to_non_nullable
as int,
),
);
}
}
/// @nodoc
class _$ReportStateImpl implements _ReportState {
_$ReportStateImpl({
required this.title,
required this.startDate,
required this.endDate,
required this.rangeDateFormatted,
this.selectedMenu = 0,
});
@override
final String title;
@override
final DateTime startDate;
@override
final DateTime endDate;
@override
final String rangeDateFormatted;
@override
@JsonKey()
final int selectedMenu;
@override
String toString() {
return 'ReportState(title: $title, startDate: $startDate, endDate: $endDate, rangeDateFormatted: $rangeDateFormatted, selectedMenu: $selectedMenu)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ReportStateImpl &&
(identical(other.title, title) || other.title == title) &&
(identical(other.startDate, startDate) ||
other.startDate == startDate) &&
(identical(other.endDate, endDate) || other.endDate == endDate) &&
(identical(other.rangeDateFormatted, rangeDateFormatted) ||
other.rangeDateFormatted == rangeDateFormatted) &&
(identical(other.selectedMenu, selectedMenu) ||
other.selectedMenu == selectedMenu));
}
@override
int get hashCode => Object.hash(
runtimeType,
title,
startDate,
endDate,
rangeDateFormatted,
selectedMenu,
);
/// Create a copy of ReportState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$ReportStateImplCopyWith<_$ReportStateImpl> get copyWith =>
__$$ReportStateImplCopyWithImpl<_$ReportStateImpl>(this, _$identity);
}
abstract class _ReportState implements ReportState {
factory _ReportState({
required final String title,
required final DateTime startDate,
required final DateTime endDate,
required final String rangeDateFormatted,
final int selectedMenu,
}) = _$ReportStateImpl;
@override
String get title;
@override
DateTime get startDate;
@override
DateTime get endDate;
@override
String get rangeDateFormatted;
@override
int get selectedMenu;
/// Create a copy of ReportState
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$ReportStateImplCopyWith<_$ReportStateImpl> get copyWith =>
throw _privateConstructorUsedError;
}
+13
View File
@@ -0,0 +1,13 @@
part of 'report_bloc.dart';
@freezed
class ReportEvent with _$ReportEvent {
const factory ReportEvent.menuChanged({
required int index,
required String title,
}) = _MenuChanged;
const factory ReportEvent.dateChanged({
required DateTime startDate,
required DateTime endDate,
}) = _DateChanged;
}
+20
View File
@@ -0,0 +1,20 @@
part of 'report_bloc.dart';
@freezed
class ReportState with _$ReportState {
factory ReportState({
required String title,
required DateTime startDate,
required DateTime endDate,
required String rangeDateFormatted,
@Default(0) int selectedMenu,
}) = _ReportState;
factory ReportState.initial() => ReportState(
title: 'Ringkasan Laporan Penjualan',
startDate: DateTime.now().subtract(const Duration(days: 30)),
endDate: DateTime.now(),
rangeDateFormatted:
'${DateTime.now().subtract(const Duration(days: 30)).toFormattedDate()} - ${DateTime.now().toFormattedDate()}',
);
}
@@ -0,0 +1,85 @@
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.dart' hide Order;
import '../../../common/extension/extension.dart';
import '../../../common/types/split_type.dart';
import '../../../domain/customer/customer.dart';
import '../../../domain/order/order.dart';
part 'split_bill_form_event.dart';
part 'split_bill_form_state.dart';
part 'split_bill_form_bloc.freezed.dart';
@injectable
class SplitBillFormBloc extends Bloc<SplitBillFormEvent, SplitBillFormState> {
SplitBillFormBloc() : super(SplitBillFormState.initial()) {
on<SplitBillFormEvent>(_onSplitBillFormEvent);
}
Future<void> _onSplitBillFormEvent(
SplitBillFormEvent event,
Emitter<SplitBillFormState> 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,
splitType: e.order.splitType.isEmpty
? SplitType.amount
: e.order.splitType.toSplitType(),
),
);
},
customerChanged: (e) async {
emit(state.copyWith(customer: e.customer));
},
customerNameChanged: (e) async {
emit(state.copyWith(customerName: e.customerName));
},
splitTypeChanged: (e) async {
emit(
state.copyWith(
splitType: e.splitType,
totalAmount: 0,
selectedProducts: {},
),
);
},
itemQuantityChanged: (e) async {
final newQuantities = Map<String, int>.from(state.selectedProducts);
if (e.quantity > 0) {
newQuantities[e.itemId] = e.quantity;
} else {
newQuantities.remove(e.itemId);
}
// Recalculate total price
int newTotal = 0;
for (var entry in newQuantities.entries) {
final item = state.pendingItems.firstWhere(
(item) => item.id == entry.key,
);
newTotal += item.unitPrice.toInt() * entry.value;
}
emit(
state.copyWith(
selectedProducts: newQuantities,
totalAmount: newTotal,
),
);
},
amountChanged: (e) async {
emit(state.copyWith(totalAmount: e.amount));
},
);
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,17 @@
part of 'split_bill_form_bloc.dart';
@freezed
class SplitBillFormEvent with _$SplitBillFormEvent {
const factory SplitBillFormEvent.setOrder(Order order) = _SetOrder;
const factory SplitBillFormEvent.customerChanged(Customer? customer) =
_CustomerChanged;
const factory SplitBillFormEvent.customerNameChanged(String customerName) =
_CustomerNameChanged;
const factory SplitBillFormEvent.splitTypeChanged(SplitType splitType) =
_SplitTypeChanged;
const factory SplitBillFormEvent.itemQuantityChanged({
required String itemId,
required int quantity,
}) = _ItemQuantityChanged;
const factory SplitBillFormEvent.amountChanged(int amount) = _AmountChanged;
}
@@ -0,0 +1,23 @@
part of 'split_bill_form_bloc.dart';
@freezed
class SplitBillFormState with _$SplitBillFormState {
factory SplitBillFormState({
required Order order,
required List<OrderItem> pendingItems,
Customer? customer,
required String customerName,
required SplitType splitType,
required Map<String, int> selectedProducts,
@Default(0) int totalAmount,
@Default(false) bool isConfirming,
}) = _SplitBillFormState;
factory SplitBillFormState.initial() => SplitBillFormState(
order: Order.empty(),
pendingItems: [],
customerName: '',
splitType: SplitType.amount,
selectedProducts: {},
);
}

Some files were not shown because too many files have changed in this diff Show More