forked from eatvio/eatvio_app
feat(diary) Made an event for satieety and mood change
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '/core/app_export.dart';
|
||||
@@ -14,6 +16,8 @@ part 'diary_edit_state.dart';
|
||||
class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
|
||||
DiaryEditBloc(DiaryEditState initialState) : super(initialState) {
|
||||
on<DiaryEditInitialEvent>(_onInitialize);
|
||||
on<SatietyEvent>(_changeSatiety);
|
||||
on<MoodEvent>(_changeMood);
|
||||
}
|
||||
|
||||
Future<void> _onInitialize(
|
||||
@@ -88,13 +92,22 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
|
||||
ToggleWakeupExpandedEvent event, Emitter<DiaryEditLoadedState> emit) {
|
||||
emit(state.copyWith(wakeupExpanded: !state.wakeupExpanded));
|
||||
}*/
|
||||
}
|
||||
|
||||
class ScaleBloc extends Bloc<ScaleEvent, int> {
|
||||
ScaleBloc() : super(0);
|
||||
Future<void> _changeSatiety(
|
||||
SatietyEvent event, Emitter<DiaryEditState> emit) async {
|
||||
if (state is DiaryEditLoadedState) {
|
||||
var currentState = state as DiaryEditLoadedState;
|
||||
emit(currentState.copyWith(selectedSatiety: event.selectedElement));
|
||||
currentState.selectedSatiety = event.selectedElement;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Stream<int> mapEventToState(ScaleEvent event) async* {
|
||||
yield event.selectedElement;
|
||||
Future<void> _changeMood(
|
||||
MoodEvent event, Emitter<DiaryEditState> emit) async {
|
||||
if (state is DiaryEditLoadedState) {
|
||||
var currentState = state as DiaryEditLoadedState;
|
||||
emit(currentState.copyWith(selectedMood: event.selectedElement));
|
||||
currentState.selectedMood = event.selectedElement;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,10 +15,17 @@ class DiaryEditInitialEvent extends DiaryEditEvent {
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class ScaleEvent extends Equatable {
|
||||
class SatietyEvent extends DiaryEditEvent {
|
||||
SatietyEvent(this.selectedElement);
|
||||
final int selectedElement;
|
||||
|
||||
ScaleEvent(this.selectedElement);
|
||||
@override
|
||||
List<Object> get props => [selectedElement];
|
||||
}
|
||||
|
||||
class MoodEvent extends DiaryEditEvent {
|
||||
MoodEvent(this.selectedElement);
|
||||
final int selectedElement;
|
||||
|
||||
@override
|
||||
List<Object> get props => [selectedElement];
|
||||
|
||||
@@ -58,9 +58,9 @@ class DiaryEditLoadedState extends DiaryEditState {
|
||||
TextEditingController? productNameController,
|
||||
TextEditingController? productQuantityController,
|
||||
int? selectedMood,
|
||||
required int selectedSatiety,
|
||||
required bool wakeupExpanded,
|
||||
required bool moodExpanded,
|
||||
int? selectedSatiety,
|
||||
bool? wakeupExpanded,
|
||||
bool? moodExpanded,
|
||||
}) {
|
||||
return DiaryEditLoadedState(
|
||||
diaryEditModelObj: diaryEditModelObj ?? this.diaryEditModelObj,
|
||||
@@ -74,9 +74,9 @@ class DiaryEditLoadedState extends DiaryEditState {
|
||||
productQuantityController:
|
||||
productQuantityController ?? this.productQuantityController,
|
||||
selectedMood: selectedMood ?? this.selectedMood,
|
||||
selectedSatiety: selectedSatiety,
|
||||
wakeupExpanded: wakeupExpanded,
|
||||
moodExpanded: moodExpanded);
|
||||
selectedSatiety: selectedSatiety ?? this.selectedSatiety,
|
||||
wakeupExpanded: wakeupExpanded ?? this.wakeupExpanded,
|
||||
moodExpanded: moodExpanded ?? this.moodExpanded);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,24 +25,6 @@ class DiaryEditScreen extends StatelessWidget {
|
||||
"Прием пищи 6",
|
||||
];
|
||||
|
||||
List<String> satietyList = [
|
||||
"Ужасное",
|
||||
"Плохое",
|
||||
"Удовлетворительное",
|
||||
"Нормальное",
|
||||
"Хорошее",
|
||||
"Прекрасное",
|
||||
];
|
||||
|
||||
List<String> moodList = [
|
||||
"Ужасное",
|
||||
"Плохое",
|
||||
"Удовлетворительное",
|
||||
"Нормальное",
|
||||
"Хорошее",
|
||||
"Прекрасное",
|
||||
];
|
||||
|
||||
static Widget builder(BuildContext context) {
|
||||
return BlocProvider<DiaryEditBloc>(
|
||||
create: (context) =>
|
||||
@@ -99,7 +81,7 @@ class DiaryEditScreen extends StatelessWidget {
|
||||
//_buildImageStack(context),
|
||||
_buildMeal(context, state),
|
||||
SizedBox(height: 20.v),
|
||||
_buildMood(moodList, context, state),
|
||||
_buildMood(context, state),
|
||||
SizedBox(height: 30.v),
|
||||
_buildHeaderColumn(context),
|
||||
SizedBox(height: 30.v),
|
||||
@@ -198,7 +180,6 @@ 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(
|
||||
@@ -307,48 +288,48 @@ class DiaryEditScreen extends StatelessWidget {
|
||||
color: Colors.red,
|
||||
isSelected: state.selectedSatiety == 0,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(0));
|
||||
context.read<DiaryEditBloc>().add(SatietyEvent(0));
|
||||
},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.orange,
|
||||
isSelected: state.selectedSatiety == 1,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(1));
|
||||
context.read<DiaryEditBloc>().add(SatietyEvent(1));
|
||||
},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.yellow,
|
||||
isSelected: state.selectedSatiety == 2,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(2));
|
||||
context.read<DiaryEditBloc>().add(SatietyEvent(2));
|
||||
},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.lime,
|
||||
isSelected: state.selectedSatiety == 3,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(3));
|
||||
context.read<DiaryEditBloc>().add(SatietyEvent(3));
|
||||
},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.lightGreen,
|
||||
isSelected: state.selectedSatiety == 4,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(4));
|
||||
context.read<DiaryEditBloc>().add(SatietyEvent(4));
|
||||
},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.green,
|
||||
isSelected: state.selectedSatiety == 5,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(5));
|
||||
context.read<DiaryEditBloc>().add(SatietyEvent(5));
|
||||
},
|
||||
),
|
||||
Text("😊"),
|
||||
// Остальные элементы шкалы
|
||||
],
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
@@ -793,10 +774,7 @@ class DiaryEditScreen extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildMood(
|
||||
List<String> moodList, BuildContext context, DiaryEditLoadedState state) {
|
||||
final ScaleBloc scaleBloc = ScaleBloc();
|
||||
|
||||
Widget _buildMood(BuildContext context, DiaryEditLoadedState state) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.h),
|
||||
child: Container(
|
||||
@@ -829,7 +807,7 @@ class DiaryEditScreen extends StatelessWidget {
|
||||
"Ваше настроение после приема пищи",
|
||||
style: CustomTextStyles.bodyMediumBlack900,
|
||||
),
|
||||
Icon(state.wakeupExpanded
|
||||
Icon(state.moodExpanded
|
||||
? Icons.arrow_drop_up
|
||||
: Icons.arrow_drop_down),
|
||||
],
|
||||
@@ -843,44 +821,32 @@ class DiaryEditScreen extends StatelessWidget {
|
||||
ScaleElement(
|
||||
color: Colors.red,
|
||||
isSelected: state.selectedMood == 0,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(0));
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.orange,
|
||||
isSelected: state.selectedMood == 1,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(1));
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.yellow,
|
||||
isSelected: state.selectedMood == 2,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(2));
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.lime,
|
||||
isSelected: state.selectedMood == 3,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(3));
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.lightGreen,
|
||||
isSelected: state.selectedMood == 4,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(4));
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
ScaleElement(
|
||||
color: Colors.green,
|
||||
isSelected: state.selectedMood == 5,
|
||||
onTap: () {
|
||||
scaleBloc.add(ScaleEvent(5));
|
||||
},
|
||||
onTap: () {},
|
||||
),
|
||||
Text("😊"),
|
||||
// Остальные элементы шкалы
|
||||
|
||||
Reference in New Issue
Block a user