From 57a7f9bd9190445bf25d28b29ada5935728d9d9a Mon Sep 17 00:00:00 2001 From: maxxkim Date: Wed, 14 Feb 2024 14:56:16 +0300 Subject: [PATCH] feat(diary) Added controllers and improved form build logic --- .../bloc/diary_edit_bloc.dart | 20 ++++++++++++------- .../bloc/diary_edit_state.dart | 18 +++++++++++++++++ .../diary_edit_screen/diary_edit_screen.dart | 18 +++++++++++++---- pubspec.yaml | 1 + 4 files changed, 46 insertions(+), 11 deletions(-) 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 98c218dd..801e28e3 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 @@ -41,14 +41,16 @@ class DiaryEditBloc extends Bloc { // Если текущее состояние уже загружено, обновляем его 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 { moodExpanded: true, wakeupController: TimeOfDay.now(), retireController: TimeOfDay.now(), + mealTimeController: TimeOfDay.now(), + mealNameController: TextEditingController(), commentController: TextEditingController(), + productNameController: TextEditingController(), + productQuantityController: TextEditingController(), )); } /*} else { 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 28cdd066..23c56676 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 @@ -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); } 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 d1b4c690..576a6677 100644 --- a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart +++ b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart @@ -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: [digitsOnly], ), Padding( padding: EdgeInsets.only(right: 30.h), diff --git a/pubspec.yaml b/pubspec.yaml index 5bc2b5fc..756e9229 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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: