feat(diary) Comment layouts and controllers

This commit is contained in:
2024-02-14 10:59:15 +03:00
parent 5118697a02
commit f25bbfecbf
3 changed files with 165 additions and 190 deletions

View File

@@ -20,7 +20,7 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
DiaryEditInitialEvent event,
Emitter<DiaryEditState> emit,
) async {
try {
/*try {
/*final box = await Hive.openBox('token');
final token = box.get('token');*/
final token =
@@ -36,28 +36,30 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
final data = jsonDecode(response.body);
// Проверка наличия ключевых полей в JSON
if (data is Map<String, dynamic> && data.containsKey('id')) {
// Все ключевые поля присутствуют, продолжаем обработку
if (state is DiaryEditLoadedState) {
// Если текущее состояние уже загружено, обновляем его
var currentState = state as DiaryEditLoadedState;
// Обновляем значения контроллеров только если они уже были созданы
print(currentState.wakeupController);
emit((currentState).copyWith(
wakeupExpanded: currentState.wakeupExpanded,
retireExpanded: currentState.retireExpanded,
wakeupController: currentState.wakeupController,
retireController: currentState.retireController,
));
} else {
// Если текущее состояние - начальное, создаем новое загруженное состояние
emit(DiaryEditLoadedState(
wakeupExpanded: true,
retireExpanded: false,
wakeupController: TimeOfDay.now(),
retireController: TimeOfDay.now(),
));
}
} else {
// Все ключевые поля присутствуют, продолжаем обработку*/
if (state is DiaryEditLoadedState) {
// Если текущее состояние уже загружено, обновляем его
var currentState = state as DiaryEditLoadedState;
// Обновляем значения контроллеров только если они уже были созданы
print(currentState.wakeupController);
emit((currentState).copyWith(
wakeupExpanded: currentState.wakeupExpanded,
moodExpanded: currentState.moodExpanded,
wakeupController: currentState.wakeupController,
retireController: currentState.retireController,
commentController: currentState.commentController,
));
} else {
// Если текущее состояние - начальное, создаем новое загруженное состояние
emit(DiaryEditLoadedState(
wakeupExpanded: true,
moodExpanded: true,
wakeupController: TimeOfDay.now(),
retireController: TimeOfDay.now(),
commentController: TextEditingController(),
));
}
/*} else {
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
emit(
DiaryEditErrorState('Некоторые необходимые данные отсутствуют.'));
@@ -69,7 +71,7 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
} catch (e) {
// Ошибка при декодировании JSON или другая ошибка выполнения
emit(DiaryEditErrorState('Ошибка при получении данных профиля: $e'));
}
}*/
}
/*_expandWakeup(

View File

@@ -22,15 +22,17 @@ class DiaryEditLoadedState extends DiaryEditState {
{this.diaryEditModelObj,
this.wakeupController,
this.retireController,
this.commentController,
required this.wakeupExpanded,
required this.retireExpanded})
required this.moodExpanded})
: super(diaryEditModelObj: null);
DiaryEditModel? diaryEditModelObj;
TimeOfDay? wakeupController;
TimeOfDay? retireController;
TextEditingController? commentController;
bool wakeupExpanded;
bool retireExpanded;
bool moodExpanded;
@override
List<Object?> get props =>
[diaryEditModelObj, wakeupController, retireController];
@@ -38,15 +40,17 @@ class DiaryEditLoadedState extends DiaryEditState {
DiaryEditModel? diaryEditModelObj,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TextEditingController? commentController,
required bool wakeupExpanded,
required bool retireExpanded,
required bool moodExpanded,
}) {
return DiaryEditLoadedState(
diaryEditModelObj: diaryEditModelObj ?? this.diaryEditModelObj,
wakeupController: wakeupController ?? this.wakeupController,
retireController: retireController ?? this.retireController,
commentController: commentController ?? this.commentController,
wakeupExpanded: wakeupExpanded,
retireExpanded: retireExpanded);
moodExpanded: moodExpanded);
}
}

View File

@@ -98,7 +98,7 @@ class DiaryEditScreen extends StatelessWidget {
SizedBox(height: 30.v),
_buildHeaderColumn(context),
SizedBox(height: 30.v),
_buildHeaderStack(context),
_buildComment(context),
],
),
),
@@ -681,87 +681,116 @@ class DiaryEditScreen extends StatelessWidget {
}
/// Section Widget
Widget _buildHeaderColumn1(BuildContext context) {
return Align(
alignment: Alignment.center,
child: Container(
margin: EdgeInsets.symmetric(horizontal: 15.h),
padding: EdgeInsets.symmetric(
horizontal: 50.h,
vertical: 28.v,
),
decoration: AppDecoration.outlinePrimary.copyWith(
borderRadius: BorderRadiusStyle.roundedBorder12,
),
child: SizedBox(
width: 240.h,
child: Text(
"Дополнительная информация для консультанта",
maxLines: 2,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.center,
style: CustomTextStyles.bodyMediumBlack900,
Widget _buildComment(BuildContext context, DiaryEditLoadedState state) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 24.h,
vertical: 12.v,
),
),
),
);
decoration: AppDecoration.outlinePrimary.copyWith(
borderRadius: BorderRadiusStyle.roundedBorder12,
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Дополнительная информация для консультанта",
style: theme.textTheme.titleMedium,
textAlign: TextAlign.center,
),
Align(
alignment: Alignment.bottomCenter,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 20.v),
Container(
width: 320.h,
child: CustomTextFormField(
autofocus: false,
hintText: "Введите информацию для консультанта",
maxLines: 7,
borderDecoration: InputBorder.none,
controller: state.commentController,
),
),
],
),
),
],
),
));
}
/// Section Widget
Widget _buildHeaderStack(BuildContext context) {
return SizedBox(
height: 235.v,
width: 374.h,
child: Stack(
alignment: Alignment.bottomCenter,
children: [
_buildHeaderColumn1(context),
Align(
alignment: Alignment.bottomCenter,
child: Padding(
padding: EdgeInsets.only(bottom: 103.v),
child: SizedBox(
width: 374.h,
child: Divider(),
),
),
Widget _buildWakupRetire(BuildContext context, DiaryEditLoadedState state) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 24.h,
vertical: 12.v,
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
margin: EdgeInsets.only(
left: 35.h,
right: 35.h,
bottom: 20.v,
),
padding: EdgeInsets.symmetric(
horizontal: 14.h,
vertical: 9.v,
),
decoration: AppDecoration.outlineBlueGray.copyWith(
borderRadius: BorderRadiusStyle.roundedBorder5,
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 63.v),
Container(
width: 245.h,
margin: EdgeInsets.only(right: 27.h),
child: Text(
"Введите дополнитльеную информацию для консультанта",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: theme.textTheme.bodyLarge,
decoration: AppDecoration.outlinePrimary.copyWith(
borderRadius: BorderRadiusStyle.roundedBorder12,
),
child: Column(
children: [
GestureDetector(
onTap: () {
/*BlocProvider.of<DiaryEditBloc>(context)
.add(ToggleWakeupExpandedEvent());*/
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
r"Подъем \ отход ко сну",
style: CustomTextStyles.bodyMediumBlack900,
),
),
],
Icon(state.wakeupExpanded
? Icons.arrow_drop_up
: Icons.arrow_drop_down),
],
),
),
),
),
],
),
if (state.wakeupExpanded)
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: Column(
children: [
GestureDetector(
onTap: () => _selectTime(context, state),
child: AbsorbPointer(
child: TextFormField(
decoration: InputDecoration(
labelText: 'Во сколько вы просунились?',
suffixIcon: Icon(Icons.access_time),
),
initialValue: state.wakeupController.toString(),
),
),
),
GestureDetector(
onTap: () => _selectTime(context, state),
child: AbsorbPointer(
child: TextFormField(
decoration: InputDecoration(
labelText: 'Во сколько вы легли спать?',
suffixIcon: Icon(Icons.access_time),
),
initialValue: state.retireController.toString(),
),
),
)
],
),
),
],
)),
);
}
@@ -779,19 +808,19 @@ class DiaryEditScreen extends StatelessWidget {
}
}
Widget _buildWakupRetire(BuildContext context, DiaryEditLoadedState state) {
Widget _buildMood(
List<String> moodList, BuildContext context, DiaryEditLoadedState state) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 24.h,
vertical: 12.v,
),
decoration: AppDecoration.outlinePrimary.copyWith(
borderRadius: BorderRadiusStyle.roundedBorder12,
),
child: Column(
children: [
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Container(
padding: EdgeInsets.symmetric(
horizontal: 24.h,
vertical: 12.v,
),
decoration: AppDecoration.outlinePrimary.copyWith(
borderRadius: BorderRadiusStyle.roundedBorder12,
),
child: Column(children: [
GestureDetector(
onTap: () {
/*BlocProvider.of<DiaryEditBloc>(context)
@@ -801,7 +830,7 @@ Widget _buildWakupRetire(BuildContext context, DiaryEditLoadedState state) {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
r"Подъем \ отход ко сну",
"Ваше настроение после приема пищи",
style: CustomTextStyles.bodyMediumBlack900,
),
Icon(state.wakeupExpanded
@@ -810,81 +839,21 @@ Widget _buildWakupRetire(BuildContext context, DiaryEditLoadedState state) {
],
),
),
if (state.wakeupExpanded)
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: Column(
children: [
GestureDetector(
onTap: () => _selectTime(context, state),
child: AbsorbPointer(
child: TextFormField(
decoration: InputDecoration(
labelText: 'Во сколько вы просунились?',
suffixIcon: Icon(Icons.access_time),
),
initialValue: state.wakeupController.toString(),
),
),
),
GestureDetector(
onTap: () => _selectTime(context, state),
child: AbsorbPointer(
child: TextFormField(
decoration: InputDecoration(
labelText: 'Во сколько вы легли спать?',
suffixIcon: Icon(Icons.access_time),
),
initialValue: state.retireController.toString(),
),
),
)
],
if (state.moodExpanded)
CustomDropDown(
icon: Container(
margin: EdgeInsets.fromLTRB(30.h, 30.v, 20.h, 30.v),
child: CustomImageView(
imagePath: ImageConstant.imgArrowLeft,
height: 10.v,
width: 18.h,
),
),
hintText: "Ваше настроение после приема пищи",
items: moodList,
onChanged: (value) {},
),
],
)),
);
}
Widget _buildMood(
List<String> moodList, BuildContext context, DiaryEditLoadedState state) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Column(children: [
GestureDetector(
onTap: () {
/*BlocProvider.of<DiaryEditBloc>(context)
.add(ToggleWakeupExpandedEvent());*/
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"Ваше настроение после приема пищи",
style: CustomTextStyles.bodyMediumBlack900,
),
Icon(state.wakeupExpanded
? Icons.arrow_drop_up
: Icons.arrow_drop_down),
],
),
),
if (state.wakeupExpanded)
CustomDropDown(
icon: Container(
margin: EdgeInsets.fromLTRB(30.h, 30.v, 20.h, 30.v),
child: CustomImageView(
imagePath: ImageConstant.imgArrowLeft,
height: 10.v,
width: 18.h,
),
),
hintText: "Ваше настроение после приема пищи",
items: moodList,
onChanged: (value) {},
),
]));
])));
}
Future<void> _selectTime(