feat: Refactor code structure and optimize performance across multiple modules
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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});
|
||||
}
|
||||
Reference in New Issue
Block a user