feat: Refactor code structure and optimize performance across multiple modules

This commit is contained in:
Achintha Isuru
2025-11-17 23:29:28 -05:00
parent 831570f2e0
commit a64cbd9edf
1508 changed files with 105319 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
import 'package:injectable/injectable.dart';
import 'package:krow/core/data/models/staff/bank_acc.dart';
import 'package:krow/features/profile/bank_account/data/bank_account_api_provider.dart';
import 'package:krow/features/profile/bank_account/data/bank_account_repository.dart';
@Singleton(as: BankAccountRepository)
class BankAccountRepositoryImpl implements BankAccountRepository {
final BankAccountApiProvider _apiProvider;
BankAccountRepositoryImpl({required BankAccountApiProvider apiProvider})
: _apiProvider = apiProvider;
@override
Stream<BankAcc?> getStaffBankAcc() {
return _apiProvider.getStaffBankAcc();
}
@override
Future<void> putBankAcc(BankAcc acc) {
return _apiProvider.putBunkAccount(acc);
}
}

View File

@@ -0,0 +1,32 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:krow/core/application/di/injectable.dart';
import 'package:krow/core/data/models/staff/bank_acc.dart';
import 'package:krow/features/profile/bank_account/data/bank_account_repository.dart';
part 'bank_account_event.dart';
part 'bank_account_state.dart';
class BankAccountBloc extends Bloc<BankAccountEvent, BankAccountState> {
BankAccountBloc() : super(const BankAccountState()) {
on<BankAccountEventInit>(_onInit);
on<BankAccountEventUpdate>(_onSubmit);
}
FutureOr<void> _onInit(event, emit) async {
await for (var account
in getIt<BankAccountRepository>().getStaffBankAcc()) {
emit(state.copyWith(bankAcc: account));
}
}
FutureOr<void> _onSubmit(BankAccountEventUpdate event, emit) async {
emit(state.copyWith(inLoading: true));
var newBankAcc = BankAcc.fromJson(event.bankAcc);
await getIt<BankAccountRepository>().putBankAcc(newBankAcc);
emit(state.copyWith(success: true, bankAcc: newBankAcc));
}
}

View File

@@ -0,0 +1,12 @@
part of 'bank_account_bloc.dart';
@immutable
sealed class BankAccountEvent {}
class BankAccountEventInit extends BankAccountEvent {}
class BankAccountEventUpdate extends BankAccountEvent {
final Map<String, String> bankAcc;
BankAccountEventUpdate(this.bankAcc);
}

View File

@@ -0,0 +1,77 @@
part of 'bank_account_bloc.dart';
@immutable
class BankAccountState {
final BankAcc? bankAcc;
final bool inLoading;
final bool success;
const BankAccountState(
{this.inLoading = false, this.success = false, this.bankAcc});
BankAccountState copyWith({
BankAcc? bankAcc,
bool? inLoading,
bool? success,
}) {
return BankAccountState(
inLoading: inLoading ?? false,
success: success ?? false,
bankAcc: bankAcc ?? this.bankAcc,
);
}
Map<String, BankAccField> mapFromBankAccount() {
return {
'holder_name': BankAccField(
title: 'account_holder_name'.tr(),
value: bankAcc?.holderName,
),
'bank_name': BankAccField(
title: 'bank_name'.tr(),
value: bankAcc?.bankName,
),
'number': BankAccField(
title: 'account_number'.tr(),
value: bankAcc?.number,
),
'routing_number': BankAccField(
title: 'routing_number_us'.tr(),
value: bankAcc?.routingNumber,
optional: true),
'country': BankAccField(
title: 'country'.tr(),
value: bankAcc?.country,
),
'state': BankAccField(
title: 'state'.tr(),
value: bankAcc?.state,
),
'city': BankAccField(
title: 'city'.tr(),
value: bankAcc?.city,
),
'street': BankAccField(
title: 'street_address'.tr(),
value: bankAcc?.street,
),
'building': BankAccField(
title: 'apt_suite_building'.tr(),
value: bankAcc?.building,
optional: true),
'zip': BankAccField(
title: 'zip_code'.tr(),
value: bankAcc?.zip,
),
};
}
}
class BankAccField {
String title;
String? value;
bool optional;
BankAccField({required this.title, this.value = '', this.optional = false});
}