import 'dart:async'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/repository/customer_repository.dart'; import 'package:aitrainer_app/util/common.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:meta/meta.dart'; import '../../model/fitness_state.dart'; part 'customer_change_event.dart'; part 'customer_change_state.dart'; class CustomerChangeBloc extends Bloc with Trans { final CustomerRepository customerRepository; bool visiblePassword = false; int? year = 1990; double weight = 60; double height = 170; CustomerChangeBloc({required this.customerRepository}) : super(CustomerChangeInitial()) { if (this.customerRepository.customer == null) { this.customerRepository.createNew(); } year = this.customerRepository.customer!.birthYear; if (year == null || year == 0) { year = 1990; } weight = this.customerRepository.getWeight() == 0 ? 60 : this.customerRepository.getWeight(); height = this.customerRepository.getHeight() == 0 ? 170 : this.customerRepository.getHeight(); print("fitnesslevel " + customerRepository.customer!.fitnessLevel.toString()); if (customerRepository.customer!.fitnessLevel != null) { if (!FitnessItem().elements.contains(customerRepository.customer!.fitnessLevel)) { Sport.values.forEach((element) { print(" .. ${element.toStr()}"); if (element.equalsStringTo(customerRepository.customer!.fitnessLevel!)) { selectedSport = element; selectedFitnessItem = FitnessState.professional; } }); if (selectedSport == null) { selectedFitnessItem = customerRepository.customer!.fitnessLevel; } } else { selectedFitnessItem = customerRepository.customer!.fitnessLevel; } } print("selected: $selectedFitnessItem sport: $selectedSport " + customerRepository.customer!.fitnessLevel.toString()); } Sport? selectedSport; String? selectedFitnessItem; @override Stream mapEventToState( CustomerChangeEvent event, ) async* { try { if (event is CustomerLoad) { yield CustomerChangeLoading(); yield CustomerDataChanged(); } else if (event is CustomerGoalChange) { customerRepository.setGoal(event.goal); yield CustomerDataChanged(); } else if (event is CustomerChangePasswordObscure) { visiblePassword = !visiblePassword; yield CustomerDataChanged(); } else if (event is CustomerFitnessChange) { //customerRepository.setFitnessLevel(event.fitness); selectedFitnessItem = event.fitness; yield CustomerDataChanged(); } else if (event is CustomerBirthYearChange) { yield CustomerChangeLoading(); customerRepository.setBirthYear(event.year); year = event.year; yield CustomerDataChanged(); } else if (event is CustomerWeightChange) { yield CustomerChangeLoading(); customerRepository.setWeight(event.weight); weight = event.weight.toDouble(); yield CustomerDataChanged(); } else if (event is CustomerHeightChange) { yield CustomerChangeLoading(); customerRepository.setHeight(event.height); height = event.height.toDouble(); yield CustomerDataChanged(); } else if (event is CustomerBodyTypeChange) { customerRepository.setBodyType(event.bodyType); yield CustomerDataChanged(); } else if (event is CustomerEmailChange) { customerRepository.setEmail(event.email); yield CustomerDataChanged(); } else if (event is CustomerPasswordChange) { customerRepository.setPassword(event.password); yield CustomerDataChanged(); } else if (event is CustomerFirstNameChange) { customerRepository.setFirstName(event.firstName); yield CustomerDataChanged(); } else if (event is CustomerNameChange) { customerRepository.setName(event.name); yield CustomerDataChanged(); } else if (event is CustomerGenderChange) { customerRepository.setSex(event.gender == 0 ? "m" : "w"); yield CustomerDataChanged(); } else if (event is CustomerSportChange) { yield CustomerChangeLoading(); selectedSport = event.sport; //customerRepository.setFitnessLevel(event.sport.toStr()); yield CustomerDataChanged(); } else if (event is CustomerSave) { yield CustomerSaving(); if (validation()) { if (selectedFitnessItem != null) { if (selectedFitnessItem == FitnessState.professional) { if (selectedSport != null) { customerRepository.setFitnessLevel(selectedSport!.toStr()); } else { customerRepository.setFitnessLevel(FitnessState.professional); } } else { customerRepository.setFitnessLevel(selectedFitnessItem!); } } await customerRepository.saveCustomer(); Cache().initBadges(); yield CustomerSaveSuccess(); } else { yield CustomerSaveError(message: "Please provide the necessary information"); } } } on Exception catch (e) { yield CustomerSaveError(message: e.toString()); } } bool validation() { return true; /* print("f " + customerRepository.customer.firstname); return (emailValidation(customerRepository.customer.email) == null) && (passwordValidation(customerRepository.customer.password) == null) && (nameValidation(customerRepository.customer.firstname) == null) && (nameValidation(customerRepository.customer.name) == null); */ } String? emailValidation(String email) { String? message = Common.emailValidation(email); if (message != null) { message = t(message); } return message; } String? passwordValidation(String value) { String? message = Common.passwordValidation(value); if (message != null) { message = t(message); } return message; } String? nameValidation(String? value) { if (value == null || value.length == 0) { return t("Name too short"); } return null; } Sport? get getSelectedSport => this.selectedSport; set setSelectedSport(Sport? selectedSport) => this.selectedSport = selectedSport; }