EnakPoint & EnakCoin wallet, PIN, outlet, order, community, reward

- Wallet EnakPoint & EnakCoin: beranda, riwayat, saldo kedaluwarsa, kode
  bayar, tukar EnakCoin, transfer
- PIN (buat, ganti, lupa), outlet, riwayat order, game spin
- Halaman community, webview, coming soon, dan ikon menu beranda baru
- Redesign Reward Saya: kartu tiket, filter chip, detail kode + QR
- Hapus customer point loader, menu, dan checkout lama
- Base URL ke enaklo-pos-api.altru.id

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
efrilm
2026-10-01 01:43:22 +07:00
co-authored by Claude Opus 5.5
parent 5954510b93
commit f5e3075205
253 changed files with 47212 additions and 17437 deletions
@@ -0,0 +1,43 @@
import 'package:bloc/bloc.dart';
import 'package:dartz/dartz.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.dart';
import '../../../domain/wallet/wallet.dart';
part 'order_detail_loader_event.dart';
part 'order_detail_loader_state.dart';
part 'order_detail_loader_bloc.freezed.dart';
@injectable
class OrderDetailLoaderBloc
extends Bloc<OrderDetailLoaderEvent, OrderDetailLoaderState> {
final IOrderRepository _repository;
OrderDetailLoaderBloc(this._repository)
: super(OrderDetailLoaderState.initial()) {
on<OrderDetailLoaderEvent>(_onOrderDetailLoaderEvent);
}
Future<void> _onOrderDetailLoaderEvent(
OrderDetailLoaderEvent event,
Emitter<OrderDetailLoaderState> emit,
) {
return event.map(
fetched: (e) async {
emit(state.copyWith(isFetching: true, failureOption: none()));
final result = await _repository.getOrderDetail(e.orderId);
emit(
result
.fold(
(f) => state.copyWith(failureOption: optionOf(f)),
(detail) => state.copyWith(detailOption: some(detail)),
)
.copyWith(isFetching: false),
);
},
);
}
}
@@ -0,0 +1,549 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
// coverage:ignore-file
// ignore_for_file: type=lint, type=warning, deprecated_member_use, deprecated_member_use_from_same_package
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
part of 'order_detail_loader_bloc.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// dart format off
T _$identity<T>(T value) => value;
/// @nodoc
mixin _$OrderDetailLoaderEvent {
String get orderId;
/// Create a copy of OrderDetailLoaderEvent
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$OrderDetailLoaderEventCopyWith<OrderDetailLoaderEvent> get copyWith => _$OrderDetailLoaderEventCopyWithImpl<OrderDetailLoaderEvent>(this as OrderDetailLoaderEvent, _$identity);
@override
bool operator ==(Object other) {
final _this = this as OrderDetailLoaderEvent;
return identical(this, other) || (other.runtimeType == runtimeType&&other is OrderDetailLoaderEvent&&(identical(other.orderId, _this.orderId) || other.orderId == _this.orderId));
}
@override
int get hashCode {
final _this = this as OrderDetailLoaderEvent;
return Object.hash(runtimeType,_this.orderId);
}
@override
String toString() {
final _this = this as OrderDetailLoaderEvent;
return 'OrderDetailLoaderEvent(orderId: ${_this.orderId})';
}
}
/// @nodoc
abstract mixin class $OrderDetailLoaderEventCopyWith<$Res> {
factory $OrderDetailLoaderEventCopyWith(OrderDetailLoaderEvent value, $Res Function(OrderDetailLoaderEvent) _then) = _$OrderDetailLoaderEventCopyWithImpl;
@useResult
$Res call({
String orderId
});
}
/// @nodoc
class _$OrderDetailLoaderEventCopyWithImpl<$Res>
implements $OrderDetailLoaderEventCopyWith<$Res> {
_$OrderDetailLoaderEventCopyWithImpl(this._self, this._then);
final OrderDetailLoaderEvent _self;
final $Res Function(OrderDetailLoaderEvent) _then;
/// Create a copy of OrderDetailLoaderEvent
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? orderId = null,}) {
return _then(OrderDetailLoaderEvent.fetched(
null == orderId ? _self.orderId : orderId // ignore: cast_nullable_to_non_nullable
as String,
));
}
}
/// Adds pattern-matching-related methods to [OrderDetailLoaderEvent].
extension OrderDetailLoaderEventPatterns on OrderDetailLoaderEvent {
/// A variant of `map` that fallback to returning `orElse`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeMap<TResult extends Object?>({TResult Function( _Fetched value)? fetched,required TResult orElse(),}){
final _that = this;
switch (_that) {
case _Fetched() when fetched != null:
return fetched(_that);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// Callbacks receives the raw object, upcasted.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case final Subclass2 value:
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult map<TResult extends Object?>({required TResult Function( _Fetched value) fetched,}){
final _that = this;
switch (_that) {
case _Fetched():
return fetched(_that);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `map` that fallback to returning `null`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>({TResult? Function( _Fetched value)? fetched,}){
final _that = this;
switch (_that) {
case _Fetched() when fetched != null:
return fetched(_that);case _:
return null;
}
}
/// A variant of `when` that fallback to an `orElse` callback.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>({TResult Function( String orderId)? fetched,required TResult orElse(),}) {final _that = this;
switch (_that) {
case _Fetched() when fetched != null:
return fetched(_that.orderId);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// As opposed to `map`, this offers destructuring.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case Subclass2(:final field2):
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult when<TResult extends Object?>({required TResult Function( String orderId) fetched,}) {final _that = this;
switch (_that) {
case _Fetched():
return fetched(_that.orderId);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `when` that fallback to returning `null`
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>({TResult? Function( String orderId)? fetched,}) {final _that = this;
switch (_that) {
case _Fetched() when fetched != null:
return fetched(_that.orderId);case _:
return null;
}
}
}
/// @nodoc
class _Fetched implements OrderDetailLoaderEvent {
const _Fetched(this.orderId);
@override final String orderId;
/// Create a copy of OrderDetailLoaderEvent
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$FetchedCopyWith<_Fetched> get copyWith => __$FetchedCopyWithImpl<_Fetched>(this, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _Fetched&&(identical(other.orderId, orderId) || other.orderId == orderId));
}
@override
int get hashCode {
return Object.hash(runtimeType,orderId);
}
@override
String toString() {
return 'OrderDetailLoaderEvent.fetched(orderId: $orderId)';
}
}
/// @nodoc
abstract mixin class _$FetchedCopyWith<$Res> implements $OrderDetailLoaderEventCopyWith<$Res> {
factory _$FetchedCopyWith(_Fetched value, $Res Function(_Fetched) _then) = __$FetchedCopyWithImpl;
@override @useResult
$Res call({
String orderId
});
}
/// @nodoc
class __$FetchedCopyWithImpl<$Res>
implements _$FetchedCopyWith<$Res> {
__$FetchedCopyWithImpl(this._self, this._then);
final _Fetched _self;
final $Res Function(_Fetched) _then;
/// Create a copy of OrderDetailLoaderEvent
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? orderId = null,}) {
return _then(_Fetched(
null == orderId ? _self.orderId : orderId // ignore: cast_nullable_to_non_nullable
as String,
));
}
}
/// @nodoc
mixin _$OrderDetailLoaderState {
Option<CustomerOrderDetail> get detailOption; Option<WalletFailure> get failureOption; bool get isFetching;
/// Create a copy of OrderDetailLoaderState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$OrderDetailLoaderStateCopyWith<OrderDetailLoaderState> get copyWith => _$OrderDetailLoaderStateCopyWithImpl<OrderDetailLoaderState>(this as OrderDetailLoaderState, _$identity);
@override
bool operator ==(Object other) {
final _this = this as OrderDetailLoaderState;
return identical(this, other) || (other.runtimeType == runtimeType&&other is OrderDetailLoaderState&&(identical(other.detailOption, _this.detailOption) || other.detailOption == _this.detailOption)&&(identical(other.failureOption, _this.failureOption) || other.failureOption == _this.failureOption)&&(identical(other.isFetching, _this.isFetching) || other.isFetching == _this.isFetching));
}
@override
int get hashCode {
final _this = this as OrderDetailLoaderState;
return Object.hash(runtimeType,_this.detailOption,_this.failureOption,_this.isFetching);
}
@override
String toString() {
final _this = this as OrderDetailLoaderState;
return 'OrderDetailLoaderState(detailOption: ${_this.detailOption}, failureOption: ${_this.failureOption}, isFetching: ${_this.isFetching})';
}
}
/// @nodoc
abstract mixin class $OrderDetailLoaderStateCopyWith<$Res> {
factory $OrderDetailLoaderStateCopyWith(OrderDetailLoaderState value, $Res Function(OrderDetailLoaderState) _then) = _$OrderDetailLoaderStateCopyWithImpl;
@useResult
$Res call({
Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching
});
}
/// @nodoc
class _$OrderDetailLoaderStateCopyWithImpl<$Res>
implements $OrderDetailLoaderStateCopyWith<$Res> {
_$OrderDetailLoaderStateCopyWithImpl(this._self, this._then);
final OrderDetailLoaderState _self;
final $Res Function(OrderDetailLoaderState) _then;
/// Create a copy of OrderDetailLoaderState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? detailOption = null,Object? failureOption = null,Object? isFetching = null,}) {
return _then(OrderDetailLoaderState(
detailOption: null == detailOption ? _self.detailOption : detailOption // ignore: cast_nullable_to_non_nullable
as Option<CustomerOrderDetail>,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
as bool,
));
}
}
/// Adds pattern-matching-related methods to [OrderDetailLoaderState].
extension OrderDetailLoaderStatePatterns on OrderDetailLoaderState {
/// A variant of `map` that fallback to returning `orElse`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _OrderDetailLoaderState value)? $default,{required TResult orElse(),}){
final _that = this;
switch (_that) {
case _OrderDetailLoaderState() when $default != null:
return $default(_that);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// Callbacks receives the raw object, upcasted.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case final Subclass2 value:
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _OrderDetailLoaderState value) $default,){
final _that = this;
switch (_that) {
case _OrderDetailLoaderState():
return $default(_that);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `map` that fallback to returning `null`.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case final Subclass value:
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _OrderDetailLoaderState value)? $default,){
final _that = this;
switch (_that) {
case _OrderDetailLoaderState() when $default != null:
return $default(_that);case _:
return null;
}
}
/// A variant of `when` that fallback to an `orElse` callback.
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return orElse();
/// }
/// ```
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching)? $default,{required TResult orElse(),}) {final _that = this;
switch (_that) {
case _OrderDetailLoaderState() when $default != null:
return $default(_that.detailOption,_that.failureOption,_that.isFetching);case _:
return orElse();
}
}
/// A `switch`-like method, using callbacks.
///
/// As opposed to `map`, this offers destructuring.
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case Subclass2(:final field2):
/// return ...;
/// }
/// ```
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching) $default,) {final _that = this;
switch (_that) {
case _OrderDetailLoaderState():
return $default(_that.detailOption,_that.failureOption,_that.isFetching);case _:
throw StateError('Unexpected subclass');
}
}
/// A variant of `when` that fallback to returning `null`
///
/// It is equivalent to doing:
/// ```dart
/// switch (sealedClass) {
/// case Subclass(:final field):
/// return ...;
/// case _:
/// return null;
/// }
/// ```
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching)? $default,) {final _that = this;
switch (_that) {
case _OrderDetailLoaderState() when $default != null:
return $default(_that.detailOption,_that.failureOption,_that.isFetching);case _:
return null;
}
}
}
/// @nodoc
class _OrderDetailLoaderState implements OrderDetailLoaderState {
const _OrderDetailLoaderState({required this.detailOption, required this.failureOption, this.isFetching = false});
@override final Option<CustomerOrderDetail> detailOption;
@override final Option<WalletFailure> failureOption;
@override@JsonKey() final bool isFetching;
/// Create a copy of OrderDetailLoaderState
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$OrderDetailLoaderStateCopyWith<_OrderDetailLoaderState> get copyWith => __$OrderDetailLoaderStateCopyWithImpl<_OrderDetailLoaderState>(this, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _OrderDetailLoaderState&&(identical(other.detailOption, detailOption) || other.detailOption == detailOption)&&(identical(other.failureOption, failureOption) || other.failureOption == failureOption)&&(identical(other.isFetching, isFetching) || other.isFetching == isFetching));
}
@override
int get hashCode {
return Object.hash(runtimeType,detailOption,failureOption,isFetching);
}
@override
String toString() {
return 'OrderDetailLoaderState(detailOption: $detailOption, failureOption: $failureOption, isFetching: $isFetching)';
}
}
/// @nodoc
abstract mixin class _$OrderDetailLoaderStateCopyWith<$Res> implements $OrderDetailLoaderStateCopyWith<$Res> {
factory _$OrderDetailLoaderStateCopyWith(_OrderDetailLoaderState value, $Res Function(_OrderDetailLoaderState) _then) = __$OrderDetailLoaderStateCopyWithImpl;
@override @useResult
$Res call({
Option<CustomerOrderDetail> detailOption, Option<WalletFailure> failureOption, bool isFetching
});
}
/// @nodoc
class __$OrderDetailLoaderStateCopyWithImpl<$Res>
implements _$OrderDetailLoaderStateCopyWith<$Res> {
__$OrderDetailLoaderStateCopyWithImpl(this._self, this._then);
final _OrderDetailLoaderState _self;
final $Res Function(_OrderDetailLoaderState) _then;
/// Create a copy of OrderDetailLoaderState
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? detailOption = null,Object? failureOption = null,Object? isFetching = null,}) {
return _then(_OrderDetailLoaderState(
detailOption: null == detailOption ? _self.detailOption : detailOption // ignore: cast_nullable_to_non_nullable
as Option<CustomerOrderDetail>,failureOption: null == failureOption ? _self.failureOption : failureOption // ignore: cast_nullable_to_non_nullable
as Option<WalletFailure>,isFetching: null == isFetching ? _self.isFetching : isFetching // ignore: cast_nullable_to_non_nullable
as bool,
));
}
}
// dart format on
@@ -0,0 +1,6 @@
part of 'order_detail_loader_bloc.dart';
@freezed
abstract class OrderDetailLoaderEvent with _$OrderDetailLoaderEvent {
const factory OrderDetailLoaderEvent.fetched(String orderId) = _Fetched;
}
@@ -0,0 +1,13 @@
part of 'order_detail_loader_bloc.dart';
@freezed
abstract class OrderDetailLoaderState with _$OrderDetailLoaderState {
const factory OrderDetailLoaderState({
required Option<CustomerOrderDetail> detailOption,
required Option<WalletFailure> failureOption,
@Default(false) bool isFetching,
}) = _OrderDetailLoaderState;
factory OrderDetailLoaderState.initial() =>
OrderDetailLoaderState(detailOption: none(), failureOption: none());
}