blocTemplate function

String blocTemplate(
  1. String feature
)

Implementation

String blocTemplate(String feature) => '''
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:workplanx/src/core/enums/enums.dart';
import 'package:workplanx/src/core/network/api_failure.dart';
import '../../domain/repo/${feature}_repository.dart';
import '../../data/model/request/${feature}_request.dart';

part '${feature}_event.dart';
part '${feature}_state.dart';

class ${_cap(feature)}Bloc extends Bloc<${_cap(feature)}Event, ${_cap(feature)}State> {
  ${_cap(feature)}Bloc(this._${feature}Repository) : super(const ${_cap(feature)}State()) {
    on<${_cap(feature)}Fetched>(_onFetch${_cap(feature)}s);
  }

  final ${_cap(feature)}Repository _${feature}Repository;

  Future<void> _onFetch${_cap(feature)}s(${_cap(feature)}Fetched event, Emitter<${_cap(feature)}State> emit) async {
    emit(state.copyWith(fetchStatus: AppStatus.loading));

    final response = await _${feature}Repository.fetch${_cap(feature)}s(
      queryParam: event.queryParam,
    );

    response.fold(
      (error) => emit(
        state.copyWith(
          fetchStatus: AppStatus.failure,
          error: error,
        ),
      ),
      (result) {
        emit(
          state.copyWith(
            fetchStatus: AppStatus.success,
            ${feature}s: result.data,
            nextPage: result.pagination?.currentPage ?? 0,
            offSet: result.pagination?.offSet ?? 0,
            totalPage: result.pagination?.totalPage ?? 0,
          ),
        );
      },
    );

    emit(state.copyWith(fetchStatus: AppStatus.complete));
  }
}
''';