workouttest_app/lib/bloc/customer_change/customer_change_bloc.dart
2021-04-12 22:15:33 +02:00

168 lines
6.3 KiB
Dart

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: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<CustomerChangeEvent, CustomerChangeState> {
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<CustomerChangeState> 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() {
if (customerRepository.customer == null) throw Exception("Customer object not defined");
return true;
/* 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);
return message;
}
String? passwordValidation(String? value) {
String? message = Common.passwordValidation(value);
return message;
}
String? nameValidation(String? value) {
if (value == null || value.length == 0) {
return "Name too short";
}
return null;
}
Sport? get getSelectedSport => this.selectedSport;
set setSelectedSport(Sport? selectedSport) => this.selectedSport = selectedSport;
}