fix(diary) Fix

This commit is contained in:
2024-02-09 19:54:59 +03:00
parent d3c00cc99f
commit 7b989076cc
7 changed files with 206 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import '/core/app_export.dart';
import 'package:eatvio_app/presentation/diary/diary_edit_screen/models/diary_edit_model.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:hive/hive.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
part 'diary_edit_event.dart';
part 'diary_edit_state.dart';
/// A bloc that manages the state of a DiaryEdit according to the event that is dispatched to it.
class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
DiaryEditBloc(DiaryEditState initialState) : super(initialState) {
on<DiaryEditInitialEvent>(_onInitialize);
}
Future<void> _onInitialize(
DiaryEditInitialEvent event,
Emitter<DiaryEditState> emit,
) async {
try {
final box = await Hive.openBox('token');
final token = box.get('token');
final response = await http.get(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/diary/index'),
headers: {
'Authorization': 'Bearer $token',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
// Проверка наличия ключевых полей в JSON
if (data is Map<String, dynamic> && data.containsKey('id')) {
// Все ключевые поля присутствуют, продолжаем обработку
if (state is DiaryEditLoadedState) {
// Если текущее состояние уже загружено, обновляем его
var currentState = state as DiaryEditLoadedState;
// Обновляем значения контроллеров только если они уже были созданы
emit((currentState).copyWith());
} else {
// Если текущее состояние - начальное, создаем новое загруженное состояние
emit(DiaryEditLoadedState());
}
} else {
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
emit(
DiaryEditErrorState('Некоторые необходимые данные отсутствуют.'));
}
} else {
// Статус ответа не равен 200, обрабатываем ошибку
emit(DiaryEditErrorState('Ошибка сервера: ${response.statusCode}'));
}
} catch (e) {
// Ошибка при декодировании JSON или другая ошибка выполнения
emit(DiaryEditErrorState('Ошибка при получении данных профиля: $e'));
}
}
}

View File

@@ -0,0 +1,16 @@
// ignore_for_file: must_be_immutable
part of 'diary_edit_bloc.dart';
/// Abstract class for all events that can be dispatched from the
///DiaryEdit widget.
///
/// Events must be immutable and implement the [Equatable] interface.
@immutable
abstract class DiaryEditEvent extends Equatable {}
/// Event that is dispatched when the DiaryEdit widget is first created.
class DiaryEditInitialEvent extends DiaryEditEvent {
@override
List<Object?> get props => [];
}

View File

@@ -0,0 +1,45 @@
// ignore_for_file: must_be_immutable
part of 'diary_edit_bloc.dart';
class DiaryEditState extends Equatable {
const DiaryEditState({this.diaryEditModelObj});
final DiaryEditModel? diaryEditModelObj;
@override
List<Object?> get props => [diaryEditModelObj];
}
class DiaryEditInitialState extends DiaryEditState {
DiaryEditInitialState({required DiaryEditModel diaryEditModelObj})
: super(diaryEditModelObj: diaryEditModelObj);
}
/// Represents the state of DiaryEdit in the application.
class DiaryEditLoadedState extends DiaryEditState {
DiaryEditLoadedState({this.diaryEditModelObj})
: super(diaryEditModelObj: null);
DiaryEditModel? diaryEditModelObj;
@override
List<Object?> get props => [
diaryEditModelObj,
];
DiaryEditLoadedState copyWith({
DiaryEditModel? diaryEditModelObj,
}) {
return DiaryEditLoadedState(
diaryEditModelObj: diaryEditModelObj ?? this.diaryEditModelObj,
);
}
}
class DiaryEditErrorState extends DiaryEditState {
final String errorMessage;
const DiaryEditErrorState(this.errorMessage);
@override
List<Object> get props => [errorMessage];
}