feat(diary) Added controllers and improved form build logic

This commit is contained in:
2024-02-14 14:56:16 +03:00
parent 2fdf3979da
commit 57a7f9bd91
4 changed files with 46 additions and 11 deletions

View File

@@ -41,14 +41,16 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
// Если текущее состояние уже загружено, обновляем его
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,
));
wakeupExpanded: currentState.wakeupExpanded,
moodExpanded: currentState.moodExpanded,
wakeupController: currentState.wakeupController,
retireController: currentState.retireController,
commentController: currentState.commentController,
mealTimeController: currentState.mealTimeController,
mealNameController: currentState.mealNameController,
productNameController: currentState.productNameController,
productQuantityController: currentState.productQuantityController));
} else {
// Если текущее состояние - начальное, создаем новое загруженное состояние
emit(DiaryEditLoadedState(
@@ -56,7 +58,11 @@ class DiaryEditBloc extends Bloc<DiaryEditEvent, DiaryEditState> {
moodExpanded: true,
wakeupController: TimeOfDay.now(),
retireController: TimeOfDay.now(),
mealTimeController: TimeOfDay.now(),
mealNameController: TextEditingController(),
commentController: TextEditingController(),
productNameController: TextEditingController(),
productQuantityController: TextEditingController(),
));
}
/*} else {

View File

@@ -23,6 +23,10 @@ class DiaryEditLoadedState extends DiaryEditState {
this.wakeupController,
this.retireController,
this.commentController,
this.mealTimeController,
this.mealNameController,
this.productNameController,
this.productQuantityController,
required this.wakeupExpanded,
required this.moodExpanded})
: super(diaryEditModelObj: null);
@@ -30,7 +34,11 @@ class DiaryEditLoadedState extends DiaryEditState {
DiaryEditModel? diaryEditModelObj;
TimeOfDay? wakeupController;
TimeOfDay? retireController;
TimeOfDay? mealTimeController;
TextEditingController? mealNameController;
TextEditingController? commentController;
TextEditingController? productNameController;
TextEditingController? productQuantityController;
bool wakeupExpanded;
bool moodExpanded;
@override
@@ -40,7 +48,11 @@ class DiaryEditLoadedState extends DiaryEditState {
DiaryEditModel? diaryEditModelObj,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay? mealTimeController,
TextEditingController? mealNameController,
TextEditingController? commentController,
TextEditingController? productNameController,
TextEditingController? productQuantityController,
required bool wakeupExpanded,
required bool moodExpanded,
}) {
@@ -48,7 +60,13 @@ class DiaryEditLoadedState extends DiaryEditState {
diaryEditModelObj: diaryEditModelObj ?? this.diaryEditModelObj,
wakeupController: wakeupController ?? this.wakeupController,
retireController: retireController ?? this.retireController,
mealTimeController: mealTimeController ?? this.mealTimeController,
mealNameController: mealNameController ?? this.mealNameController,
commentController: commentController ?? this.commentController,
productNameController:
productNameController ?? this.productNameController,
productQuantityController:
productQuantityController ?? this.productQuantityController,
wakeupExpanded: wakeupExpanded,
moodExpanded: moodExpanded);
}

View File

@@ -1,6 +1,8 @@
import 'bloc/diary_edit_bloc.dart';
import 'models/diary_edit_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
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';
@@ -74,7 +76,8 @@ class DiaryEditScreen extends StatelessWidget {
Widget _buildDiaryEditScreen(
BuildContext context, DiaryEditLoadedState state) {
mediaQueryData = MediaQuery.of(context);
return SafeArea(
return FormBuilder(
child: SafeArea(
child: Scaffold(
backgroundColor: Color.fromARGB(255, 240, 242, 245),
resizeToAvoidBottomInset: true,
@@ -110,7 +113,7 @@ class DiaryEditScreen extends StatelessWidget {
),
bottomNavigationBar: _buildEndDay(context),
),
);
));
}
/// Section Widget
@@ -193,6 +196,7 @@ class DiaryEditScreen extends StatelessWidget {
}
_buildMeal(BuildContext context, DiaryEditLoadedState state) {
final digitsOnly = FilteringTextInputFormatter.digitsOnly;
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.h),
child: Container(
@@ -230,8 +234,10 @@ class DiaryEditScreen extends StatelessWidget {
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width - 247,
),
child: CustomTextFormField(
hintText: "14:52",
child: FormBuilderDateTimePicker(
name: 'mealTime',
inputType: InputType.time,
decoration: InputDecoration(),
),
),
),
@@ -256,6 +262,7 @@ class DiaryEditScreen extends StatelessWidget {
padding: EdgeInsets.symmetric(horizontal: 10.h),
child: CustomTextFormField(
hintText: "Введите названия продукта",
controller: state.productNameController,
),
),
SizedBox(height: 20.v),
@@ -268,6 +275,9 @@ class DiaryEditScreen extends StatelessWidget {
width: 146.h,
hintText: "Кол-во",
textInputAction: TextInputAction.done,
controller: state.productQuantityController,
keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[digitsOnly],
),
Padding(
padding: EdgeInsets.only(right: 30.h),

View File

@@ -23,6 +23,7 @@ dependencies:
flutter_spinkit: ^5.0.0
flutter_dotenv: ^5.1.0
carousel_slider: ^4.2.1
flutter_form_builder: ^9.2.1
dev_dependencies:
flutter_test: