refactor(metrics): Refactoring cyclomatic complexity for code metrics

This commit is contained in:
2024-04-05 14:47:43 +03:00
parent 0bd4a1c82c
commit c951558f2a

View File

@@ -46,140 +46,85 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
try {
final token =
"9|laravel_sanctum_KFXbccDcWEvTPfJmV99EQv1neAggmpR2TidVGDPN34fa201a";
final response = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/diary/index'),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
if (data is Map<String, dynamic> && data.containsKey('id')) {
final int diaryId = data['id'];
try {
final response = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/diary/$diaryId/show/'),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
final diary = jsonDecode(response.body)['diary'];
print("Screen load success");
if (diary is Map<String, dynamic>) {
final String diaryDate =
diary['date'] ?? DateTime.now().toString();
final responseChart = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! +
'/diary/$diaryId/dailyNutritionData/'),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
if (responseChart.statusCode == 200) {
final recommendedChartValues = jsonDecode(
responseChart.body)['dailyNutritionRecommendation'];
final consumedChartValues =
jsonDecode(responseChart.body)['dailyNutritionIntake'];
if (state is DiaryEditLoadedState) {
// Если текущее состояние уже загружено, обновляем его
var currentState = state as DiaryEditLoadedState;
emit((currentState).copyWith(
currentMeal: currentState.currentMeal,
wakeupExpanded: currentState.wakeupExpanded,
moodExpanded: currentState.moodExpanded,
moderationExpanded: currentState.moderationExpanded,
token: currentState.token,
meals: currentState.meals,
portions: currentState.portions,
photos: currentState.photos,
wakeupController: currentState.wakeupController,
retireController: currentState.retireController,
commentController: currentState.commentController,
mealTimeController: currentState.mealTimeController,
productNameController: currentState.productNameController,
caloriesController: currentState.caloriesController,
proteinsController: currentState.proteinsController,
fatsController: currentState.fatsController,
carbsController: currentState.carbsController,
selectedSatiety: currentState.selectedSatiety,
selectedMood: currentState.selectedMood,
diaryDate: currentState.diaryDate,
diaryId: currentState.diaryId,
productQuantityController:
currentState.productQuantityController,
recommendedChartValues:
currentState.recommendedChartValues,
consumedChartValues: currentState.consumedChartValues,
autocompleteList: currentState.autocompleteList,
diaryEditModelObj: currentState.diaryEditModelObj));
} else {
// Если текущее состояние - начальное, создаем новое загруженное состояние
emit(DiaryEditLoadedState(
currentMeal: SelectionPopupModel(
id: 1, title: "Прием пищи 1", isSelected: true),
portionController: SelectionPopupModel(
id: 0, title: "порций", isSelected: true),
wakeupExpanded: true,
moodExpanded: true,
moderationExpanded: false,
token: token,
recommendedChartValues: recommendedChartValues.values
.map<int>((value) => value as int)
.toList(),
consumedChartValues: consumedChartValues.values
.map<int>((value) => value as int)
.toList() ??
[0, 0, 0, 0],
meals: diary['meals'],
portions: diary['meals'][0]['portions'],
photos: diary['meals'][0]['photos'],
wakeupController: toTime(diary['wakeup'] ?? "09:00"),
retireController: toTime(diary['retire'] ?? "23:00"),
mealTimeController:
toTime(diary['meals'][0]['time'] ?? "10:00"),
selectedSatiety: diary['meals'][0]['satiety'],
selectedMood: diary['meals'][0]['mood'],
commentController:
TextEditingController(text: diary['comment']),
productNameController: TextEditingController(),
productQuantityController: TextEditingController(),
caloriesController: TextEditingController(),
proteinsController: TextEditingController(),
fatsController: TextEditingController(),
carbsController: TextEditingController(),
diaryId: diaryId,
diaryDate: diaryDate,
autocompleteList: [],
diaryEditModelObj: state.diaryEditModelObj?.copyWith(
mealList: fillMealList(),
portionList: fillPortions())));
}
} else {
emit(DiaryEditErrorState(
'Ошибка при декодировании данных КБЖУ'));
}
} else {
// Ошибка при декодировании JSON
emit(DiaryEditErrorState(
'Ошибка при декодировании данных дневника'));
}
} catch (e) {
// Ошибка при получении данных дневника
emit(DiaryEditErrorState(
'Ошибка при получении данных дневника: $e'));
final int diaryId = fetchDiaryId(token);
try {
final diary = fetchDiaryData(token, diaryId);
print("Screen load success");
if (diary is Map<String, dynamic>) {
//final String diaryDate = diary['date'] ?? DateTime.now().toString();
final chartValues = fetchChartValues(token, diaryId);
if (state is DiaryEditLoadedState) {
// Если текущее состояние уже загружено, обновляем его
var currentState = state as DiaryEditLoadedState;
emit((currentState).copyWith(
currentMeal: currentState.currentMeal,
wakeupExpanded: currentState.wakeupExpanded,
moodExpanded: currentState.moodExpanded,
moderationExpanded: currentState.moderationExpanded,
token: currentState.token,
meals: currentState.meals,
portions: currentState.portions,
photos: currentState.photos,
wakeupController: currentState.wakeupController,
retireController: currentState.retireController,
commentController: currentState.commentController,
mealTimeController: currentState.mealTimeController,
productNameController: currentState.productNameController,
caloriesController: currentState.caloriesController,
proteinsController: currentState.proteinsController,
fatsController: currentState.fatsController,
carbsController: currentState.carbsController,
selectedSatiety: currentState.selectedSatiety,
selectedMood: currentState.selectedMood,
diaryDate: currentState.diaryDate,
diaryId: currentState.diaryId,
productQuantityController:
currentState.productQuantityController,
recommendedChartValues: currentState.recommendedChartValues,
consumedChartValues: currentState.consumedChartValues,
autocompleteList: currentState.autocompleteList,
diaryEditModelObj: currentState.diaryEditModelObj));
} else {
// Если текущее состояние - начальное, создаем новое загруженное состояние
emit(DiaryEditLoadedState(
currentMeal: SelectionPopupModel(
id: 1, title: "Прием пищи 1", isSelected: true),
portionController: SelectionPopupModel(
id: 0, title: "порций", isSelected: true),
wakeupExpanded: true,
moodExpanded: true,
moderationExpanded: false,
token: token,
recommendedChartValues: chartValues[0],
consumedChartValues: chartValues[1],
meals: diary['meals'],
portions: diary['meals'][0]['portions'],
photos: diary['meals'][0]['photos'],
wakeupController: toTime(diary['wakeup'] ?? "09:00"),
retireController: toTime(diary['retire'] ?? "23:00"),
mealTimeController:
toTime(diary['meals'][0]['time'] ?? "10:00"),
selectedSatiety: diary['meals'][0]['satiety'],
selectedMood: diary['meals'][0]['mood'],
commentController:
TextEditingController(text: diary['comment']),
productNameController: TextEditingController(),
productQuantityController: TextEditingController(),
caloriesController: TextEditingController(),
proteinsController: TextEditingController(),
fatsController: TextEditingController(),
carbsController: TextEditingController(),
diaryId: diaryId,
//diaryDate: diaryDate,
autocompleteList: [],
diaryEditModelObj: state.diaryEditModelObj?.copyWith(
mealList: fillMealList(), portionList: fillPortions())));
}
} else {
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
emit(
DiaryEditErrorState('Некоторые необходимые данные отсутствуют.'));
}
} else {
// Статус ответа не равен 200, обрабатываем ошибку
emit(DiaryEditErrorState('Ошибка сервера: ${response.statusCode}'));
} catch (e) {
// Ошибка при получении данных дневника
emit(DiaryEditErrorState('Ошибка при получении данных дневника: $e'));
}
} catch (e) {
// Ошибка при получении данных дневника
@@ -187,6 +132,75 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
}
}
fetchDiaryId(String token) async {
final response = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/diary/index'),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
if (data is Map<String, dynamic> && data.containsKey('id')) {
final int diaryId = data['id'];
print("id");
return diaryId;
} else {
emit(DiaryEditErrorState('Некоторые необходимые данные отсутствуют.'));
print('fail');
return -1;
}
} else {
emit(DiaryEditErrorState('Ошибка сервера: ${response.statusCode}'));
print('fail');
return -1;
}
}
fetchDiaryData(String token, int diaryId) async {
final response = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/diary/$diaryId/show/'),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
final diary = jsonDecode(response.body)['diary'];
print("data");
return diary;
}
fetchChartValues(String token, int diaryID) async {
final responseChart = await http.get(
Uri.parse(
dotenv.env['SERVER_ROOT']! + '/diary/$diaryID/dailyNutritionData/'),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
if (responseChart.statusCode == 200) {
final recommendedChartValues =
jsonDecode(responseChart.body)['dailyNutritionRecommendation']
.values
.map<int>((value) => value as int)
.toList();
final consumedChartValues =
jsonDecode(responseChart.body)['dailyNutritionIntake']
.values
.map<int>((value) => value as int)
.toList();
print('chart');
return [recommendedChartValues, consumedChartValues];
} else {
emit(DiaryEditErrorState('Ошибка при декодировании данных КБЖУ'));
print('fail');
return -1;
}
}
reloadScreen(DiaryEditEvent event, Emitter<DiaryEditState> emit) async {
print("Reloading...");
try {