feat: create table

This commit is contained in:
efrilm 2025-08-03 23:33:00 +07:00
parent 617b5c54f2
commit 8431b07057
9 changed files with 393 additions and 95 deletions

View File

@ -14,7 +14,7 @@ class CustomTextField extends StatelessWidget {
final Widget? prefixIcon; final Widget? prefixIcon;
final Widget? suffixIcon; final Widget? suffixIcon;
final bool readOnly; final bool readOnly;
final int? maxLines; final int maxLines;
final String? Function(String?)? validator; final String? Function(String?)? validator;
const CustomTextField({ const CustomTextField({
@ -30,7 +30,7 @@ class CustomTextField extends StatelessWidget {
this.prefixIcon, this.prefixIcon,
this.suffixIcon, this.suffixIcon,
this.readOnly = false, this.readOnly = false,
this.maxLines, this.maxLines = 1,
this.validator, this.validator,
}); });

View File

@ -0,0 +1,53 @@
import 'dart:developer';
import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import 'package:enaklo_pos/core/network/dio_client.dart';
import '../../core/constants/variables.dart';
import 'auth_local_datasource.dart';
class TableRemoteDataSource {
final Dio dio = DioClient.instance;
Future<Either<String, bool>> createTable({
required String tableName,
required int capacity,
required String location,
}) async {
try {
final authData = await AuthLocalDataSource().getAuthData();
final url = '${Variables.baseUrl}/api/v1/tables';
final response = await dio.post(
url,
data: {
"outlet_id": authData.user?.outletId,
"table_name": tableName,
"capacity": capacity,
"location": location,
"status": "available",
"is_active": true,
"position_x": 200,
"position_y": 200,
},
options: Options(
headers: {
'Authorization': 'Bearer ${authData.token}',
'Accept': 'application/json',
},
),
);
if (response.statusCode == 200 || response.statusCode == 201) {
return Right(true);
} else {
return const Left('Failed to create table');
}
} on DioException catch (e) {
log("Dio error: ${e.message}");
return Left(e.response?.data['message'] ?? 'Gagal membuat table');
} catch (e) {
log("Unexpected error: $e");
return const Left('Unexpected error occurred');
}
}
}

View File

@ -2,6 +2,7 @@ import 'dart:developer';
import 'package:enaklo_pos/core/constants/theme.dart'; import 'package:enaklo_pos/core/constants/theme.dart';
import 'package:enaklo_pos/data/datasources/customer_remote_datasource.dart'; import 'package:enaklo_pos/data/datasources/customer_remote_datasource.dart';
import 'package:enaklo_pos/data/datasources/outlet_remote_data_source.dart'; import 'package:enaklo_pos/data/datasources/outlet_remote_data_source.dart';
import 'package:enaklo_pos/data/datasources/table_remote_datasource.dart';
import 'package:enaklo_pos/presentation/customer/bloc/customer_form/customer_form_bloc.dart'; import 'package:enaklo_pos/presentation/customer/bloc/customer_form/customer_form_bloc.dart';
import 'package:enaklo_pos/presentation/customer/bloc/customer_loader/customer_loader_bloc.dart'; import 'package:enaklo_pos/presentation/customer/bloc/customer_loader/customer_loader_bloc.dart';
import 'package:enaklo_pos/presentation/home/bloc/order_form/order_form_bloc.dart'; import 'package:enaklo_pos/presentation/home/bloc/order_form/order_form_bloc.dart';
@ -147,7 +148,7 @@ class _MyAppState extends State<MyApp> {
create: (context) => TransactionReportBloc(OrderRemoteDatasource()), create: (context) => TransactionReportBloc(OrderRemoteDatasource()),
), ),
BlocProvider( BlocProvider(
create: (context) => CreateTableBloc(), create: (context) => CreateTableBloc(TableRemoteDataSource()),
), ),
BlocProvider( BlocProvider(
create: (context) => ChangePositionTableBloc(), create: (context) => ChangePositionTableBloc(),

View File

@ -1,7 +1,5 @@
import 'dart:ui';
import 'package:bloc/bloc.dart'; import 'package:bloc/bloc.dart';
import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; import 'package:enaklo_pos/data/datasources/table_remote_datasource.dart';
import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:freezed_annotation/freezed_annotation.dart';
part 'create_table_event.dart'; part 'create_table_event.dart';
@ -9,12 +7,19 @@ part 'create_table_state.dart';
part 'create_table_bloc.freezed.dart'; part 'create_table_bloc.freezed.dart';
class CreateTableBloc extends Bloc<CreateTableEvent, CreateTableState> { class CreateTableBloc extends Bloc<CreateTableEvent, CreateTableState> {
CreateTableBloc() : super(_Initial()) { final TableRemoteDataSource _tableRemoteDataSource;
CreateTableBloc(this._tableRemoteDataSource)
: super(CreateTableState.initial()) {
on<_CreateTable>((event, emit) async { on<_CreateTable>((event, emit) async {
emit(_Loading()); emit(_Loading());
await ProductLocalDatasource.instance final result = await _tableRemoteDataSource.createTable(
.createTableManagement(event.tableName, event.position); tableName: event.tableName,
emit(_Success('Create Table Success')); capacity: event.capacity,
location: event.location,
);
result.fold((l) => emit(_Error(l)),
(r) => emit(_Success('Meja berhasil dibuat')));
}); });
} }
} }

View File

@ -19,19 +19,22 @@ mixin _$CreateTableEvent {
@optionalTypeArgs @optionalTypeArgs
TResult when<TResult extends Object?>({ TResult when<TResult extends Object?>({
required TResult Function() started, required TResult Function() started,
required TResult Function(String tableName, Offset position) createTable, required TResult Function(String tableName, int capacity, String location)
createTable,
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@optionalTypeArgs @optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({ TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started, TResult? Function()? started,
TResult? Function(String tableName, Offset position)? createTable, TResult? Function(String tableName, int capacity, String location)?
createTable,
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@optionalTypeArgs @optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({ TResult maybeWhen<TResult extends Object?>({
TResult Function()? started, TResult Function()? started,
TResult Function(String tableName, Offset position)? createTable, TResult Function(String tableName, int capacity, String location)?
createTable,
required TResult orElse(), required TResult orElse(),
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@ -119,7 +122,8 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs @optionalTypeArgs
TResult when<TResult extends Object?>({ TResult when<TResult extends Object?>({
required TResult Function() started, required TResult Function() started,
required TResult Function(String tableName, Offset position) createTable, required TResult Function(String tableName, int capacity, String location)
createTable,
}) { }) {
return started(); return started();
} }
@ -128,7 +132,8 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs @optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({ TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started, TResult? Function()? started,
TResult? Function(String tableName, Offset position)? createTable, TResult? Function(String tableName, int capacity, String location)?
createTable,
}) { }) {
return started?.call(); return started?.call();
} }
@ -137,7 +142,8 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs @optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({ TResult maybeWhen<TResult extends Object?>({
TResult Function()? started, TResult Function()? started,
TResult Function(String tableName, Offset position)? createTable, TResult Function(String tableName, int capacity, String location)?
createTable,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (started != null) { if (started != null) {
@ -188,7 +194,7 @@ abstract class _$$CreateTableImplCopyWith<$Res> {
_$CreateTableImpl value, $Res Function(_$CreateTableImpl) then) = _$CreateTableImpl value, $Res Function(_$CreateTableImpl) then) =
__$$CreateTableImplCopyWithImpl<$Res>; __$$CreateTableImplCopyWithImpl<$Res>;
@useResult @useResult
$Res call({String tableName, Offset position}); $Res call({String tableName, int capacity, String location});
} }
/// @nodoc /// @nodoc
@ -205,17 +211,22 @@ class __$$CreateTableImplCopyWithImpl<$Res>
@override @override
$Res call({ $Res call({
Object? tableName = null, Object? tableName = null,
Object? position = null, Object? capacity = null,
Object? location = null,
}) { }) {
return _then(_$CreateTableImpl( return _then(_$CreateTableImpl(
null == tableName tableName: null == tableName
? _value.tableName ? _value.tableName
: tableName // ignore: cast_nullable_to_non_nullable : tableName // ignore: cast_nullable_to_non_nullable
as String, as String,
null == position capacity: null == capacity
? _value.position ? _value.capacity
: position // ignore: cast_nullable_to_non_nullable : capacity // ignore: cast_nullable_to_non_nullable
as Offset, as int,
location: null == location
? _value.location
: location // ignore: cast_nullable_to_non_nullable
as String,
)); ));
} }
} }
@ -223,16 +234,21 @@ class __$$CreateTableImplCopyWithImpl<$Res>
/// @nodoc /// @nodoc
class _$CreateTableImpl implements _CreateTable { class _$CreateTableImpl implements _CreateTable {
const _$CreateTableImpl(this.tableName, this.position); const _$CreateTableImpl(
{required this.tableName,
required this.capacity,
required this.location});
@override @override
final String tableName; final String tableName;
@override @override
final Offset position; final int capacity;
@override
final String location;
@override @override
String toString() { String toString() {
return 'CreateTableEvent.createTable(tableName: $tableName, position: $position)'; return 'CreateTableEvent.createTable(tableName: $tableName, capacity: $capacity, location: $location)';
} }
@override @override
@ -242,12 +258,14 @@ class _$CreateTableImpl implements _CreateTable {
other is _$CreateTableImpl && other is _$CreateTableImpl &&
(identical(other.tableName, tableName) || (identical(other.tableName, tableName) ||
other.tableName == tableName) && other.tableName == tableName) &&
(identical(other.position, position) || (identical(other.capacity, capacity) ||
other.position == position)); other.capacity == capacity) &&
(identical(other.location, location) ||
other.location == location));
} }
@override @override
int get hashCode => Object.hash(runtimeType, tableName, position); int get hashCode => Object.hash(runtimeType, tableName, capacity, location);
/// Create a copy of CreateTableEvent /// Create a copy of CreateTableEvent
/// with the given fields replaced by the non-null parameter values. /// with the given fields replaced by the non-null parameter values.
@ -261,29 +279,32 @@ class _$CreateTableImpl implements _CreateTable {
@optionalTypeArgs @optionalTypeArgs
TResult when<TResult extends Object?>({ TResult when<TResult extends Object?>({
required TResult Function() started, required TResult Function() started,
required TResult Function(String tableName, Offset position) createTable, required TResult Function(String tableName, int capacity, String location)
createTable,
}) { }) {
return createTable(tableName, position); return createTable(tableName, capacity, location);
} }
@override @override
@optionalTypeArgs @optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({ TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started, TResult? Function()? started,
TResult? Function(String tableName, Offset position)? createTable, TResult? Function(String tableName, int capacity, String location)?
createTable,
}) { }) {
return createTable?.call(tableName, position); return createTable?.call(tableName, capacity, location);
} }
@override @override
@optionalTypeArgs @optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({ TResult maybeWhen<TResult extends Object?>({
TResult Function()? started, TResult Function()? started,
TResult Function(String tableName, Offset position)? createTable, TResult Function(String tableName, int capacity, String location)?
createTable,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (createTable != null) { if (createTable != null) {
return createTable(tableName, position); return createTable(tableName, capacity, location);
} }
return orElse(); return orElse();
} }
@ -321,11 +342,14 @@ class _$CreateTableImpl implements _CreateTable {
} }
abstract class _CreateTable implements CreateTableEvent { abstract class _CreateTable implements CreateTableEvent {
const factory _CreateTable(final String tableName, final Offset position) = const factory _CreateTable(
_$CreateTableImpl; {required final String tableName,
required final int capacity,
required final String location}) = _$CreateTableImpl;
String get tableName; String get tableName;
Offset get position; int get capacity;
String get location;
/// Create a copy of CreateTableEvent /// Create a copy of CreateTableEvent
/// with the given fields replaced by the non-null parameter values. /// with the given fields replaced by the non-null parameter values.
@ -341,6 +365,7 @@ mixin _$CreateTableState {
required TResult Function() initial, required TResult Function() initial,
required TResult Function() loading, required TResult Function() loading,
required TResult Function(String message) success, required TResult Function(String message) success,
required TResult Function(String message) error,
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@optionalTypeArgs @optionalTypeArgs
@ -348,6 +373,7 @@ mixin _$CreateTableState {
TResult? Function()? initial, TResult? Function()? initial,
TResult? Function()? loading, TResult? Function()? loading,
TResult? Function(String message)? success, TResult? Function(String message)? success,
TResult? Function(String message)? error,
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@optionalTypeArgs @optionalTypeArgs
@ -355,6 +381,7 @@ mixin _$CreateTableState {
TResult Function()? initial, TResult Function()? initial,
TResult Function()? loading, TResult Function()? loading,
TResult Function(String message)? success, TResult Function(String message)? success,
TResult Function(String message)? error,
required TResult orElse(), required TResult orElse(),
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@ -363,6 +390,7 @@ mixin _$CreateTableState {
required TResult Function(_Initial value) initial, required TResult Function(_Initial value) initial,
required TResult Function(_Loading value) loading, required TResult Function(_Loading value) loading,
required TResult Function(_Success value) success, required TResult Function(_Success value) success,
required TResult Function(_Error value) error,
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@optionalTypeArgs @optionalTypeArgs
@ -370,6 +398,7 @@ mixin _$CreateTableState {
TResult? Function(_Initial value)? initial, TResult? Function(_Initial value)? initial,
TResult? Function(_Loading value)? loading, TResult? Function(_Loading value)? loading,
TResult? Function(_Success value)? success, TResult? Function(_Success value)? success,
TResult? Function(_Error value)? error,
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@optionalTypeArgs @optionalTypeArgs
@ -377,6 +406,7 @@ mixin _$CreateTableState {
TResult Function(_Initial value)? initial, TResult Function(_Initial value)? initial,
TResult Function(_Loading value)? loading, TResult Function(_Loading value)? loading,
TResult Function(_Success value)? success, TResult Function(_Success value)? success,
TResult Function(_Error value)? error,
required TResult orElse(), required TResult orElse(),
}) => }) =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
@ -447,6 +477,7 @@ class _$InitialImpl implements _Initial {
required TResult Function() initial, required TResult Function() initial,
required TResult Function() loading, required TResult Function() loading,
required TResult Function(String message) success, required TResult Function(String message) success,
required TResult Function(String message) error,
}) { }) {
return initial(); return initial();
} }
@ -457,6 +488,7 @@ class _$InitialImpl implements _Initial {
TResult? Function()? initial, TResult? Function()? initial,
TResult? Function()? loading, TResult? Function()? loading,
TResult? Function(String message)? success, TResult? Function(String message)? success,
TResult? Function(String message)? error,
}) { }) {
return initial?.call(); return initial?.call();
} }
@ -467,6 +499,7 @@ class _$InitialImpl implements _Initial {
TResult Function()? initial, TResult Function()? initial,
TResult Function()? loading, TResult Function()? loading,
TResult Function(String message)? success, TResult Function(String message)? success,
TResult Function(String message)? error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (initial != null) { if (initial != null) {
@ -481,6 +514,7 @@ class _$InitialImpl implements _Initial {
required TResult Function(_Initial value) initial, required TResult Function(_Initial value) initial,
required TResult Function(_Loading value) loading, required TResult Function(_Loading value) loading,
required TResult Function(_Success value) success, required TResult Function(_Success value) success,
required TResult Function(_Error value) error,
}) { }) {
return initial(this); return initial(this);
} }
@ -491,6 +525,7 @@ class _$InitialImpl implements _Initial {
TResult? Function(_Initial value)? initial, TResult? Function(_Initial value)? initial,
TResult? Function(_Loading value)? loading, TResult? Function(_Loading value)? loading,
TResult? Function(_Success value)? success, TResult? Function(_Success value)? success,
TResult? Function(_Error value)? error,
}) { }) {
return initial?.call(this); return initial?.call(this);
} }
@ -501,6 +536,7 @@ class _$InitialImpl implements _Initial {
TResult Function(_Initial value)? initial, TResult Function(_Initial value)? initial,
TResult Function(_Loading value)? loading, TResult Function(_Loading value)? loading,
TResult Function(_Success value)? success, TResult Function(_Success value)? success,
TResult Function(_Error value)? error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (initial != null) { if (initial != null) {
@ -558,6 +594,7 @@ class _$LoadingImpl implements _Loading {
required TResult Function() initial, required TResult Function() initial,
required TResult Function() loading, required TResult Function() loading,
required TResult Function(String message) success, required TResult Function(String message) success,
required TResult Function(String message) error,
}) { }) {
return loading(); return loading();
} }
@ -568,6 +605,7 @@ class _$LoadingImpl implements _Loading {
TResult? Function()? initial, TResult? Function()? initial,
TResult? Function()? loading, TResult? Function()? loading,
TResult? Function(String message)? success, TResult? Function(String message)? success,
TResult? Function(String message)? error,
}) { }) {
return loading?.call(); return loading?.call();
} }
@ -578,6 +616,7 @@ class _$LoadingImpl implements _Loading {
TResult Function()? initial, TResult Function()? initial,
TResult Function()? loading, TResult Function()? loading,
TResult Function(String message)? success, TResult Function(String message)? success,
TResult Function(String message)? error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (loading != null) { if (loading != null) {
@ -592,6 +631,7 @@ class _$LoadingImpl implements _Loading {
required TResult Function(_Initial value) initial, required TResult Function(_Initial value) initial,
required TResult Function(_Loading value) loading, required TResult Function(_Loading value) loading,
required TResult Function(_Success value) success, required TResult Function(_Success value) success,
required TResult Function(_Error value) error,
}) { }) {
return loading(this); return loading(this);
} }
@ -602,6 +642,7 @@ class _$LoadingImpl implements _Loading {
TResult? Function(_Initial value)? initial, TResult? Function(_Initial value)? initial,
TResult? Function(_Loading value)? loading, TResult? Function(_Loading value)? loading,
TResult? Function(_Success value)? success, TResult? Function(_Success value)? success,
TResult? Function(_Error value)? error,
}) { }) {
return loading?.call(this); return loading?.call(this);
} }
@ -612,6 +653,7 @@ class _$LoadingImpl implements _Loading {
TResult Function(_Initial value)? initial, TResult Function(_Initial value)? initial,
TResult Function(_Loading value)? loading, TResult Function(_Loading value)? loading,
TResult Function(_Success value)? success, TResult Function(_Success value)? success,
TResult Function(_Error value)? error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (loading != null) { if (loading != null) {
@ -696,6 +738,7 @@ class _$SuccessImpl implements _Success {
required TResult Function() initial, required TResult Function() initial,
required TResult Function() loading, required TResult Function() loading,
required TResult Function(String message) success, required TResult Function(String message) success,
required TResult Function(String message) error,
}) { }) {
return success(message); return success(message);
} }
@ -706,6 +749,7 @@ class _$SuccessImpl implements _Success {
TResult? Function()? initial, TResult? Function()? initial,
TResult? Function()? loading, TResult? Function()? loading,
TResult? Function(String message)? success, TResult? Function(String message)? success,
TResult? Function(String message)? error,
}) { }) {
return success?.call(message); return success?.call(message);
} }
@ -716,6 +760,7 @@ class _$SuccessImpl implements _Success {
TResult Function()? initial, TResult Function()? initial,
TResult Function()? loading, TResult Function()? loading,
TResult Function(String message)? success, TResult Function(String message)? success,
TResult Function(String message)? error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (success != null) { if (success != null) {
@ -730,6 +775,7 @@ class _$SuccessImpl implements _Success {
required TResult Function(_Initial value) initial, required TResult Function(_Initial value) initial,
required TResult Function(_Loading value) loading, required TResult Function(_Loading value) loading,
required TResult Function(_Success value) success, required TResult Function(_Success value) success,
required TResult Function(_Error value) error,
}) { }) {
return success(this); return success(this);
} }
@ -740,6 +786,7 @@ class _$SuccessImpl implements _Success {
TResult? Function(_Initial value)? initial, TResult? Function(_Initial value)? initial,
TResult? Function(_Loading value)? loading, TResult? Function(_Loading value)? loading,
TResult? Function(_Success value)? success, TResult? Function(_Success value)? success,
TResult? Function(_Error value)? error,
}) { }) {
return success?.call(this); return success?.call(this);
} }
@ -750,6 +797,7 @@ class _$SuccessImpl implements _Success {
TResult Function(_Initial value)? initial, TResult Function(_Initial value)? initial,
TResult Function(_Loading value)? loading, TResult Function(_Loading value)? loading,
TResult Function(_Success value)? success, TResult Function(_Success value)? success,
TResult Function(_Error value)? error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (success != null) { if (success != null) {
@ -770,3 +818,155 @@ abstract class _Success implements CreateTableState {
_$$SuccessImplCopyWith<_$SuccessImpl> get copyWith => _$$SuccessImplCopyWith<_$SuccessImpl> get copyWith =>
throw _privateConstructorUsedError; throw _privateConstructorUsedError;
} }
/// @nodoc
abstract class _$$ErrorImplCopyWith<$Res> {
factory _$$ErrorImplCopyWith(
_$ErrorImpl value, $Res Function(_$ErrorImpl) then) =
__$$ErrorImplCopyWithImpl<$Res>;
@useResult
$Res call({String message});
}
/// @nodoc
class __$$ErrorImplCopyWithImpl<$Res>
extends _$CreateTableStateCopyWithImpl<$Res, _$ErrorImpl>
implements _$$ErrorImplCopyWith<$Res> {
__$$ErrorImplCopyWithImpl(
_$ErrorImpl _value, $Res Function(_$ErrorImpl) _then)
: super(_value, _then);
/// Create a copy of CreateTableState
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? message = null,
}) {
return _then(_$ErrorImpl(
null == message
? _value.message
: message // ignore: cast_nullable_to_non_nullable
as String,
));
}
}
/// @nodoc
class _$ErrorImpl implements _Error {
const _$ErrorImpl(this.message);
@override
final String message;
@override
String toString() {
return 'CreateTableState.error(message: $message)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ErrorImpl &&
(identical(other.message, message) || other.message == message));
}
@override
int get hashCode => Object.hash(runtimeType, message);
/// Create a copy of CreateTableState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$ErrorImplCopyWith<_$ErrorImpl> get copyWith =>
__$$ErrorImplCopyWithImpl<_$ErrorImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function() loading,
required TResult Function(String message) success,
required TResult Function(String message) error,
}) {
return error(message);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? initial,
TResult? Function()? loading,
TResult? Function(String message)? success,
TResult? Function(String message)? error,
}) {
return error?.call(message);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function()? loading,
TResult Function(String message)? success,
TResult Function(String message)? error,
required TResult orElse(),
}) {
if (error != null) {
return error(message);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(_Initial value) initial,
required TResult Function(_Loading value) loading,
required TResult Function(_Success value) success,
required TResult Function(_Error value) error,
}) {
return error(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(_Initial value)? initial,
TResult? Function(_Loading value)? loading,
TResult? Function(_Success value)? success,
TResult? Function(_Error value)? error,
}) {
return error?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(_Initial value)? initial,
TResult Function(_Loading value)? loading,
TResult Function(_Success value)? success,
TResult Function(_Error value)? error,
required TResult orElse(),
}) {
if (error != null) {
return error(this);
}
return orElse();
}
}
abstract class _Error implements CreateTableState {
const factory _Error(final String message) = _$ErrorImpl;
String get message;
/// Create a copy of CreateTableState
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
_$$ErrorImplCopyWith<_$ErrorImpl> get copyWith =>
throw _privateConstructorUsedError;
}

View File

@ -3,6 +3,9 @@ part of 'create_table_bloc.dart';
@freezed @freezed
class CreateTableEvent with _$CreateTableEvent { class CreateTableEvent with _$CreateTableEvent {
const factory CreateTableEvent.started() = _Started; const factory CreateTableEvent.started() = _Started;
const factory CreateTableEvent.createTable( const factory CreateTableEvent.createTable({
String tableName, Offset position) = _CreateTable; required String tableName,
required int capacity,
required String location,
}) = _CreateTable;
} }

View File

@ -7,4 +7,5 @@ class CreateTableState with _$CreateTableState {
const factory CreateTableState.loading() = _Loading; const factory CreateTableState.loading() = _Loading;
// success // success
const factory CreateTableState.success(String message) = _Success; const factory CreateTableState.success(String message) = _Success;
const factory CreateTableState.error(String message) = _Error;
} }

View File

@ -0,0 +1,86 @@
import 'package:enaklo_pos/core/components/buttons.dart';
import 'package:enaklo_pos/core/components/custom_modal_dialog.dart';
import 'package:enaklo_pos/core/components/custom_text_field.dart';
import 'package:enaklo_pos/core/components/flushbar.dart';
import 'package:enaklo_pos/core/components/spaces.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/presentation/table/blocs/create_table/create_table_bloc.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class FormTableNewDialog extends StatefulWidget {
const FormTableNewDialog({super.key});
@override
State<FormTableNewDialog> createState() => _FormTableNewDialogState();
}
class _FormTableNewDialogState extends State<FormTableNewDialog> {
TextEditingController tableNameController = TextEditingController();
TextEditingController capacityController = TextEditingController();
TextEditingController locationController = TextEditingController();
@override
Widget build(BuildContext context) {
return CustomModalDialog(
title: 'Tambah Meja',
subtitle: 'Silahkan isi data meja',
contentPadding:
const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0),
child: Column(
children: [
CustomTextField(
controller: tableNameController,
label: 'Nama Meja',
),
SpaceHeight(16),
CustomTextField(
controller: capacityController,
label: 'Kapasitas',
keyboardType: TextInputType.number,
),
SpaceHeight(16),
CustomTextField(
controller: locationController,
label: 'Lokasi',
),
SpaceHeight(24),
BlocListener<CreateTableBloc, CreateTableState>(
listener: (context, state) {
state.maybeWhen(
orElse: () {},
success: (message) {
context.pop();
AppFlushbar.showSuccess(context, message);
},
error: (message) {
AppFlushbar.showError(context, message);
},
);
},
child: BlocBuilder<CreateTableBloc, CreateTableState>(
builder: (context, state) {
return state.maybeWhen(
orElse: () => Button.filled(
onPressed: () {
context.read<CreateTableBloc>().add(
CreateTableEvent.createTable(
capacity: int.parse(capacityController.text),
location: locationController.text,
tableName: tableNameController.text,
),
);
},
label: 'Simpan',
),
loading: () =>
Center(child: const CircularProgressIndicator()),
);
},
),
),
],
),
);
}
}

View File

@ -1,18 +1,13 @@
import 'dart:developer'; import 'package:enaklo_pos/presentation/table/dialogs/form_table_new_dialog.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:enaklo_pos/core/components/components.dart'; import 'package:enaklo_pos/core/components/components.dart';
import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
import 'package:enaklo_pos/data/models/response/table_model.dart';
import 'package:enaklo_pos/presentation/table/blocs/change_position_table/change_position_table_bloc.dart'; import 'package:enaklo_pos/presentation/table/blocs/change_position_table/change_position_table_bloc.dart';
import 'package:enaklo_pos/presentation/table/blocs/create_table/create_table_bloc.dart'; import 'package:enaklo_pos/presentation/table/blocs/create_table/create_table_bloc.dart';
import 'package:enaklo_pos/presentation/table/blocs/get_table/get_table_bloc.dart'; import 'package:enaklo_pos/presentation/table/blocs/get_table/get_table_bloc.dart';
import 'package:enaklo_pos/presentation/table/widgets/table_widget.dart'; import 'package:enaklo_pos/presentation/table/widgets/table_widget.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive/hive.dart';
import 'package:path_provider/path_provider.dart';
class TableManagementScreen extends StatefulWidget { class TableManagementScreen extends StatefulWidget {
const TableManagementScreen({super.key}); const TableManagementScreen({super.key});
@ -65,54 +60,8 @@ class _TableManagementScreenState extends State<TableManagementScreen> {
// show dialaog adn input table name // show dialaog adn input table name
showDialog( showDialog(
context: context, context: context,
builder: (context) { builder: (context) => FormTableNewDialog(),
return AlertDialog( );
title: Text('Add Table'),
content: SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
maxHeight: 180,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
CustomTextField(
controller: tableNameController!,
label: 'Table Name',
),
SpaceHeight(16),
Row(
children: [
Expanded(
child: Button.outlined(
onPressed: () {
context.pop();
},
label: 'close',
),
),
SpaceWidth(16),
Expanded(
child: Button.filled(
onPressed: () {
context.read<CreateTableBloc>().add(
CreateTableEvent.createTable(
tableNameController!.text,
Offset(200, 200)));
context
.pop(); // close dialog after adding
},
label: 'Add',
),
),
],
)
],
),
),
),
actions: []);
});
}, },
), ),
), ),