diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart index 801e28e3..4b879c67 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_bloc.dart @@ -50,6 +50,8 @@ class DiaryEditBloc extends Bloc { mealTimeController: currentState.mealTimeController, mealNameController: currentState.mealNameController, productNameController: currentState.productNameController, + selectedSatiety: currentState.selectedSatiety, + selectedMood: currentState.selectedMood, productQuantityController: currentState.productQuantityController)); } else { // Если текущее состояние - начальное, создаем новое загруженное состояние @@ -59,6 +61,8 @@ class DiaryEditBloc extends Bloc { wakeupController: TimeOfDay.now(), retireController: TimeOfDay.now(), mealTimeController: TimeOfDay.now(), + selectedSatiety: 3, + selectedMood: 3, mealNameController: TextEditingController(), commentController: TextEditingController(), productNameController: TextEditingController(), @@ -85,3 +89,12 @@ class DiaryEditBloc extends Bloc { emit(state.copyWith(wakeupExpanded: !state.wakeupExpanded)); }*/ } + +class ScaleBloc extends Bloc { + ScaleBloc() : super(0); + + @override + Stream mapEventToState(ScaleEvent event) async* { + yield event.selectedElement; + } +} diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart index 183f4500..a95e6037 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_event.dart @@ -15,4 +15,12 @@ class DiaryEditInitialEvent extends DiaryEditEvent { List get props => []; } +class ScaleEvent extends Equatable { + final int selectedElement; + + ScaleEvent(this.selectedElement); + + @override + List get props => [selectedElement]; +} //class ToggleWakeupExpandedEvent extends DiaryEditEvent {} diff --git a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart index 23c56676..91570c27 100644 --- a/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart +++ b/lib/presentation/diary/diary_edit_screen/bloc/diary_edit_state.dart @@ -27,6 +27,8 @@ class DiaryEditLoadedState extends DiaryEditState { this.mealNameController, this.productNameController, this.productQuantityController, + this.selectedMood, + required this.selectedSatiety, required this.wakeupExpanded, required this.moodExpanded}) : super(diaryEditModelObj: null); @@ -39,6 +41,8 @@ class DiaryEditLoadedState extends DiaryEditState { TextEditingController? commentController; TextEditingController? productNameController; TextEditingController? productQuantityController; + int? selectedMood; + int selectedSatiety; bool wakeupExpanded; bool moodExpanded; @override @@ -53,6 +57,8 @@ class DiaryEditLoadedState extends DiaryEditState { TextEditingController? commentController, TextEditingController? productNameController, TextEditingController? productQuantityController, + int? selectedMood, + required int selectedSatiety, required bool wakeupExpanded, required bool moodExpanded, }) { @@ -67,6 +73,8 @@ class DiaryEditLoadedState extends DiaryEditState { productNameController ?? this.productNameController, productQuantityController: productQuantityController ?? this.productQuantityController, + selectedMood: selectedMood ?? this.selectedMood, + selectedSatiety: selectedSatiety, wakeupExpanded: wakeupExpanded, moodExpanded: moodExpanded); } diff --git a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart index 576a6677..6924fe91 100644 --- a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart +++ b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart @@ -7,6 +7,7 @@ import 'package:eatvio_app/core/app_export.dart'; import 'package:eatvio_app/widgets/custom_edit_text_form_field.dart'; import 'package:eatvio_app/widgets/custom_edit_drop_down.dart'; import 'package:eatvio_app/widgets/custom_outlined_button.dart'; +import 'package:eatvio_app/widgets/custom_scale_element.dart'; // ignore: must_be_immutable class DiaryEditScreen extends StatelessWidget { @@ -197,6 +198,7 @@ class DiaryEditScreen extends StatelessWidget { _buildMeal(BuildContext context, DiaryEditLoadedState state) { final digitsOnly = FilteringTextInputFormatter.digitsOnly; + final ScaleBloc scaleBloc = ScaleBloc(); return Padding( padding: EdgeInsets.symmetric(horizontal: 16.h), child: Container( @@ -297,20 +299,56 @@ class DiaryEditScreen extends StatelessWidget { style: CustomTextStyles.bodyMediumBlack900, ), SizedBox(height: 15.v), - 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, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("😭"), + ScaleElement( + color: Colors.red, + isSelected: state.selectedSatiety == 0, + onTap: () { + scaleBloc.add(ScaleEvent(0)); + }, ), - ), - hintText: "Сытость", - items: satietyList, - borderDecoration: InputBorder.none, - onChanged: (value) {}, - ), + ScaleElement( + color: Colors.orange, + isSelected: state.selectedSatiety == 1, + onTap: () { + scaleBloc.add(ScaleEvent(1)); + }, + ), + ScaleElement( + color: Colors.yellow, + isSelected: state.selectedSatiety == 2, + onTap: () { + scaleBloc.add(ScaleEvent(2)); + }, + ), + ScaleElement( + color: Colors.lime, + isSelected: state.selectedSatiety == 3, + onTap: () { + scaleBloc.add(ScaleEvent(3)); + }, + ), + ScaleElement( + color: Colors.lightGreen, + isSelected: state.selectedSatiety == 4, + onTap: () { + scaleBloc.add(ScaleEvent(4)); + }, + ), + ScaleElement( + color: Colors.green, + isSelected: state.selectedSatiety == 5, + onTap: () { + scaleBloc.add(ScaleEvent(5)); + }, + ), + Text("😊"), + // Остальные элементы шкалы + ], + ) ], ), )); @@ -757,6 +795,8 @@ class DiaryEditScreen extends StatelessWidget { Widget _buildMood( List moodList, BuildContext context, DiaryEditLoadedState state) { + final ScaleBloc scaleBloc = ScaleBloc(); + return Padding( padding: EdgeInsets.symmetric(horizontal: 16.h), child: Container( @@ -796,19 +836,55 @@ class DiaryEditScreen extends StatelessWidget { ), ), 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, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("😭"), + ScaleElement( + color: Colors.red, + isSelected: state.selectedMood == 0, + onTap: () { + scaleBloc.add(ScaleEvent(0)); + }, ), - ), - hintText: "Ваше настроение после приема пищи", - items: moodList, - borderDecoration: InputBorder.none, - onChanged: (value) {}, + ScaleElement( + color: Colors.orange, + isSelected: state.selectedMood == 1, + onTap: () { + scaleBloc.add(ScaleEvent(1)); + }, + ), + ScaleElement( + color: Colors.yellow, + isSelected: state.selectedMood == 2, + onTap: () { + scaleBloc.add(ScaleEvent(2)); + }, + ), + ScaleElement( + color: Colors.lime, + isSelected: state.selectedMood == 3, + onTap: () { + scaleBloc.add(ScaleEvent(3)); + }, + ), + ScaleElement( + color: Colors.lightGreen, + isSelected: state.selectedMood == 4, + onTap: () { + scaleBloc.add(ScaleEvent(4)); + }, + ), + ScaleElement( + color: Colors.green, + isSelected: state.selectedMood == 5, + onTap: () { + scaleBloc.add(ScaleEvent(5)); + }, + ), + Text("😊"), + // Остальные элементы шкалы + ], ), ]))); } diff --git a/lib/widgets/custom_scale_element.dart b/lib/widgets/custom_scale_element.dart new file mode 100644 index 00000000..531c95ef --- /dev/null +++ b/lib/widgets/custom_scale_element.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; + +class ScaleElement extends StatelessWidget { + final Color color; + final bool isSelected; + final VoidCallback onTap; + + const ScaleElement({ + required this.color, + required this.isSelected, + required this.onTap, + }); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: onTap, + child: Container( + width: isSelected ? 40 : 20, + height: isSelected ? 40 : 20, + decoration: BoxDecoration( + color: color, + shape: BoxShape.circle, + ), + ), + ); + } +}