feat: create product

This commit is contained in:
efrilm
2025-08-05 19:20:45 +07:00
parent 935b6b9a5b
commit bb9aef55cf
24 changed files with 2750 additions and 848 deletions
@@ -1,11 +1,7 @@
import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:enaklo_pos/data/datasources/product_remote_datasource.dart';
import 'package:enaklo_pos/data/models/request/product_request_model.dart';
import 'package:enaklo_pos/data/models/response/product_response_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:image_picker/image_picker.dart';
part 'add_product_event.dart';
part 'add_product_state.dart';
@@ -18,21 +14,12 @@ class AddProductBloc extends Bloc<AddProductEvent, AddProductState> {
) : super(const _Initial()) {
on<_AddProduct>((event, emit) async {
emit(const _Loading());
final requestData = ProductRequestModel(
name: event.product.name!,
price: event.product.price!,
stock: 0,
categoryId: 0,
isBestSeller: 0,
image: event.image,
);
log("requestData: ${requestData.toString()}");
final response = await datasource.addProduct(requestData);
final response = await datasource.addProduct(event.product);
// products.add(newProduct);
response.fold(
(l) => emit(_Error(l)),
(r) {
emit(_Success('Add Product Success'));
emit(_Success('Produk berhasil ditambahkan'));
},
);
});
@@ -19,19 +19,19 @@ mixin _$AddProductEvent {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(Product product, XFile image) addProduct,
required TResult Function(ProductRequestModel product) addProduct,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(Product product, XFile image)? addProduct,
TResult? Function(ProductRequestModel product)? addProduct,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(Product product, XFile image)? addProduct,
TResult Function(ProductRequestModel product)? addProduct,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
@@ -119,7 +119,7 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(Product product, XFile image) addProduct,
required TResult Function(ProductRequestModel product) addProduct,
}) {
return started();
}
@@ -128,7 +128,7 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(Product product, XFile image)? addProduct,
TResult? Function(ProductRequestModel product)? addProduct,
}) {
return started?.call();
}
@@ -137,7 +137,7 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(Product product, XFile image)? addProduct,
TResult Function(ProductRequestModel product)? addProduct,
required TResult orElse(),
}) {
if (started != null) {
@@ -188,7 +188,7 @@ abstract class _$$AddProductImplCopyWith<$Res> {
_$AddProductImpl value, $Res Function(_$AddProductImpl) then) =
__$$AddProductImplCopyWithImpl<$Res>;
@useResult
$Res call({Product product, XFile image});
$Res call({ProductRequestModel product});
}
/// @nodoc
@@ -205,17 +205,12 @@ class __$$AddProductImplCopyWithImpl<$Res>
@override
$Res call({
Object? product = null,
Object? image = null,
}) {
return _then(_$AddProductImpl(
null == product
? _value.product
: product // ignore: cast_nullable_to_non_nullable
as Product,
null == image
? _value.image
: image // ignore: cast_nullable_to_non_nullable
as XFile,
as ProductRequestModel,
));
}
}
@@ -223,16 +218,14 @@ class __$$AddProductImplCopyWithImpl<$Res>
/// @nodoc
class _$AddProductImpl implements _AddProduct {
const _$AddProductImpl(this.product, this.image);
const _$AddProductImpl(this.product);
@override
final Product product;
@override
final XFile image;
final ProductRequestModel product;
@override
String toString() {
return 'AddProductEvent.addProduct(product: $product, image: $image)';
return 'AddProductEvent.addProduct(product: $product)';
}
@override
@@ -240,12 +233,11 @@ class _$AddProductImpl implements _AddProduct {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$AddProductImpl &&
(identical(other.product, product) || other.product == product) &&
(identical(other.image, image) || other.image == image));
(identical(other.product, product) || other.product == product));
}
@override
int get hashCode => Object.hash(runtimeType, product, image);
int get hashCode => Object.hash(runtimeType, product);
/// Create a copy of AddProductEvent
/// with the given fields replaced by the non-null parameter values.
@@ -259,29 +251,29 @@ class _$AddProductImpl implements _AddProduct {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(Product product, XFile image) addProduct,
required TResult Function(ProductRequestModel product) addProduct,
}) {
return addProduct(product, image);
return addProduct(product);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(Product product, XFile image)? addProduct,
TResult? Function(ProductRequestModel product)? addProduct,
}) {
return addProduct?.call(product, image);
return addProduct?.call(product);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(Product product, XFile image)? addProduct,
TResult Function(ProductRequestModel product)? addProduct,
required TResult orElse(),
}) {
if (addProduct != null) {
return addProduct(product, image);
return addProduct(product);
}
return orElse();
}
@@ -319,11 +311,10 @@ class _$AddProductImpl implements _AddProduct {
}
abstract class _AddProduct implements AddProductEvent {
const factory _AddProduct(final Product product, final XFile image) =
const factory _AddProduct(final ProductRequestModel product) =
_$AddProductImpl;
Product get product;
XFile get image;
ProductRequestModel get product;
/// Create a copy of AddProductEvent
/// with the given fields replaced by the non-null parameter values.
@@ -3,6 +3,6 @@ part of 'add_product_bloc.dart';
@freezed
class AddProductEvent with _$AddProductEvent {
const factory AddProductEvent.started() = _Started;
const factory AddProductEvent.addProduct(Product product, XFile image) =
const factory AddProductEvent.addProduct(ProductRequestModel product) =
_AddProduct;
}