diff --git a/assets/images/img_glass.svg b/assets/images/img_glass.svg
new file mode 100644
index 00000000..063af954
--- /dev/null
+++ b/assets/images/img_glass.svg
@@ -0,0 +1,4 @@
+
diff --git a/lib/core/utils/image_constant.dart b/lib/core/utils/image_constant.dart
index e7dd2b2a..8534fec2 100644
--- a/lib/core/utils/image_constant.dart
+++ b/lib/core/utils/image_constant.dart
@@ -14,6 +14,7 @@ class ImageConstant {
static String imageNotFound = 'assets/images/image_not_found.png';
+ static String imaGlass = 'assets/images/image_glass.svg';
// Настройки images
static String imgClose = '$imagePath/img_close.svg';
diff --git a/lib/presentation/chat/chat_screen/chat_screen.dart b/lib/presentation/chat/chat_screen/chat_screen.dart
index e78a8f38..8b1fc731 100644
--- a/lib/presentation/chat/chat_screen/chat_screen.dart
+++ b/lib/presentation/chat/chat_screen/chat_screen.dart
@@ -1,7 +1,8 @@
-import 'bloc/chat_bloc.dart';
+/*import 'bloc/chat_bloc.dart';
import 'models/chat_model.dart';
import 'package:eatvio_app/core/app_export.dart';
import 'package:flutter/material.dart';
+import 'package:eatvio_app/widgets/custom_bottom_bar.dart';
class ChatScreen extends StatelessWidget {
const ChatScreen({Key? key}) : super(key: key);
@@ -15,6 +16,710 @@ class ChatScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
mediaQueryData = MediaQuery.of(context);
- return Container();
+ return Scaffold(
+ resizeToAvoidBottomInset: false,
+ appBar: _buildAppbar(context),
+ body: SizedBox(
+ width: double.maxFinite,
+ child: Column(
+ children: [
+ SizedBox(height: 13.v),
+ Expanded(
+ child: SingleChildScrollView(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ Container(
+ height: 34.v,
+ width: 211.h,
+ margin: EdgeInsets.only(right: 17.h),
+ child: Stack(
+ alignment: Alignment.bottomRight,
+ children: [
+ CustomImageView(
+ imagePath: ImageConstant.imgPath,
+ height: 34.v,
+ width: 211.h,
+ alignment: Alignment.center,
+ ),
+ Align(
+ alignment: Alignment.bottomRight,
+ child: Padding(
+ padding: EdgeInsets.only(
+ right: 9.h,
+ bottom: 4.v,
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Padding(
+ padding: EdgeInsets.only(bottom: 1.v),
+ child: Text(
+ "msg_food_is_amazing".tr,
+ style: theme.textTheme.bodyLarge,
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 7.h,
+ top: 7.v,
+ ),
+ child: Text(
+ "lbl_10_10".tr,
+ style: theme.textTheme.bodySmall,
+ ),
+ ),
+ CustomImageView(
+ imagePath:
+ ImageConstant.imgCheckmarkBlueA400,
+ height: 7.v,
+ width: 14.h,
+ margin: EdgeInsets.only(
+ left: 2.h,
+ top: 9.v,
+ bottom: 4.v,
+ ),
+ )
+ ],
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ SizedBox(height: 8.v),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 84.h,
+ right: 17.h,
+ ),
+ child: _buildColumncheckmark(
+ context,
+ imageOne: ImageConstant.imgRectangle,
+ time: "lbl_10_15".tr,
+ ),
+ ),
+ SizedBox(height: 8.v),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 84.h,
+ right: 17.h,
+ ),
+ child: _buildColumncheckmark(
+ context,
+ imageOne: ImageConstant.imgRectangle186x254,
+ time: "lbl_10_15".tr,
+ ),
+ ),
+ SizedBox(height: 20.v),
+ Align(
+ alignment: Alignment.centerLeft,
+ child: Container(
+ margin: EdgeInsets.only(
+ left: 10.h,
+ right: 77.h,
+ ),
+ padding: EdgeInsets.symmetric(
+ horizontal: 11.h,
+ vertical: 4.v,
+ ),
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: fs.Svg(
+ ImageConstant.imgGroup14,
+ ),
+ fit: BoxFit.cover,
+ ),
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ SizedBox(height: 3.v),
+ Padding(
+ padding: EdgeInsets.only(left: 7.h),
+ child: Row(
+ children: [
+ SizedBox(
+ height: 33.v,
+ child: VerticalDivider(
+ width: 2.h,
+ thickness: 2.v,
+ endIndent: 1.h,
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(left: 8.h),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Text(
+ "lbl_martha_craig".tr,
+ style: CustomTextStyles
+ .bodyMediumLightblueA70001,
+ ),
+ Text(
+ "lbl_good_morning".tr,
+ style: CustomTextStyles
+ .bodyMediumBluegray800_1,
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ SizedBox(height: 4.v),
+ Padding(
+ padding: EdgeInsets.only(left: 6.h),
+ child: Row(
+ children: [
+ Text(
+ "msg_do_you_know_what".tr,
+ style: theme.textTheme.bodyLarge,
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 14.h,
+ top: 8.v,
+ ),
+ child: Text(
+ "lbl_11_40".tr,
+ style: CustomTextStyles
+ .bodySmallBluegray40001,
+ ),
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ SizedBox(height: 20.v),
+ Container(
+ height: 34.v,
+ width: 266.h,
+ margin: EdgeInsets.only(right: 11.h),
+ child: Stack(
+ alignment: Alignment.topCenter,
+ children: [
+ CustomImageView(
+ imagePath: ImageConstant.imgPathGray50,
+ height: 34.v,
+ width: 266.h,
+ alignment: Alignment.center,
+ ),
+ Align(
+ alignment: Alignment.topCenter,
+ child: Padding(
+ padding: EdgeInsets.only(top: 2.v),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Padding(
+ padding: EdgeInsets.only(top: 4.v),
+ child: Text(
+ "msg_it_s_morning_in".tr,
+ style: theme.textTheme.bodyLarge,
+ ),
+ ),
+ CustomImageView(
+ imagePath: ImageConstant.img,
+ height: 19.v,
+ width: 17.h,
+ margin: EdgeInsets.only(
+ left: 10.h,
+ bottom: 7.v,
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 14.h,
+ top: 12.v,
+ ),
+ child: Text(
+ "lbl_11_43".tr,
+ style: theme.textTheme.bodySmall,
+ ),
+ ),
+ CustomImageView(
+ imagePath:
+ ImageConstant.imgCheckmarkBlueA400,
+ height: 7.v,
+ width: 14.h,
+ margin: EdgeInsets.only(
+ left: 2.h,
+ top: 13.v,
+ bottom: 5.v,
+ ),
+ )
+ ],
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ SizedBox(height: 20.v),
+ Align(
+ alignment: Alignment.centerLeft,
+ child: Container(
+ width: 281.h,
+ margin: EdgeInsets.only(
+ left: 17.h,
+ right: 76.h,
+ ),
+ padding: EdgeInsets.symmetric(
+ horizontal: 11.h,
+ vertical: 2.v,
+ ),
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: fs.Svg(
+ ImageConstant.imgGroup76,
+ ),
+ fit: BoxFit.cover,
+ ),
+ ),
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Expanded(
+ child: Container(
+ width: 191.h,
+ margin: EdgeInsets.only(top: 3.v),
+ child: Text(
+ "msg_what_is_the_most".tr,
+ maxLines: 2,
+ overflow: TextOverflow.ellipsis,
+ style: theme.textTheme.bodyLarge!.copyWith(
+ height: 1.29,
+ ),
+ ),
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 38.h,
+ top: 34.v,
+ ),
+ child: Text(
+ "lbl_11_45".tr,
+ style: CustomTextStyles.bodySmallBluegray40001,
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ SizedBox(height: 8.v),
+ Align(
+ alignment: Alignment.centerLeft,
+ child: Container(
+ height: 34.v,
+ width: 178.h,
+ margin: EdgeInsets.only(left: 10.h),
+ child: Stack(
+ alignment: Alignment.bottomCenter,
+ children: [
+ CustomImageView(
+ imagePath: ImageConstant.imgGroup14,
+ height: 34.v,
+ width: 178.h,
+ alignment: Alignment.center,
+ ),
+ Align(
+ alignment: Alignment.bottomCenter,
+ child: Padding(
+ padding: EdgeInsets.only(bottom: 3.v),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Padding(
+ padding: EdgeInsets.only(bottom: 1.v),
+ child: Text(
+ "lbl_do_you_like_it".tr,
+ style: theme.textTheme.bodyLarge,
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 1.h,
+ top: 8.v,
+ ),
+ child: Text(
+ "lbl_11_45".tr,
+ style: CustomTextStyles
+ .bodySmallBluegray40001,
+ ),
+ )
+ ],
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ SizedBox(height: 20.v),
+ Container(
+ height: 34.v,
+ width: 218.h,
+ margin: EdgeInsets.only(right: 17.h),
+ child: Stack(
+ alignment: Alignment.bottomCenter,
+ children: [
+ CustomImageView(
+ imagePath: ImageConstant.imgPath,
+ height: 34.v,
+ width: 218.h,
+ alignment: Alignment.center,
+ ),
+ Align(
+ alignment: Alignment.bottomCenter,
+ child: Padding(
+ padding: EdgeInsets.only(bottom: 4.v),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ Text(
+ "msg_i_think_top_two".tr,
+ style: theme.textTheme.bodyLarge,
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 12.h,
+ top: 7.v,
+ ),
+ child: Text(
+ "lbl_11_50".tr,
+ style: theme.textTheme.bodySmall,
+ ),
+ ),
+ CustomImageView(
+ imagePath:
+ ImageConstant.imgCheckmarkBlueA400,
+ height: 7.v,
+ width: 14.h,
+ margin: EdgeInsets.only(
+ left: 2.h,
+ top: 9.v,
+ bottom: 4.v,
+ ),
+ )
+ ],
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ SizedBox(height: 8.v),
+ Container(
+ width: 235.h,
+ margin: EdgeInsets.only(
+ left: 123.h,
+ right: 16.h,
+ ),
+ padding: EdgeInsets.symmetric(
+ horizontal: 9.h,
+ vertical: 2.v,
+ ),
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: fs.Svg(
+ ImageConstant.imgGroup11,
+ ),
+ fit: BoxFit.cover,
+ ),
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SizedBox(height: 20.v),
+ Padding(
+ padding: EdgeInsets.only(left: 14.h),
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ CustomImageView(
+ imagePath: ImageConstant.imgDownload,
+ height: 40.adaptSize,
+ width: 40.adaptSize,
+ margin: EdgeInsets.only(bottom: 2.v),
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 31.h,
+ top: 5.v,
+ ),
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Text(
+ "lbl7".tr,
+ style:
+ CustomTextStyles.bodyLargeBlueA400,
+ ),
+ Text(
+ "lbl_2_8_mb".tr,
+ style:
+ CustomTextStyles.bodyMediumBlueA400,
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ SizedBox(height: 4.v),
+ _buildRowcheckmark(
+ context,
+ time: "lbl_11_51".tr,
+ )
+ ],
+ ),
+ ),
+ SizedBox(height: 30.v),
+ _buildRowattachone(context)
+ ],
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ bottomNavigationBar: _buildBottomBar(context),
+ );
+ }
+ /// Section Widget
+ _buildAppbar(BuildContext context) {
+ return CustomAppBar(
+ leadingWidth: 26.h,
+ leading: AppbarLeadingImage(
+ imagePath: ImageConstant.imgArrowLeft,
+ margin: EdgeInsets.only(
+ left: 16.h,
+ top: 18.v,
+ bottom: 25.v,
+ ),
+ onTap: () {
+ onTapArrowleftone(context);
+ },
+ ),
+ title: Padding(
+ padding: EdgeInsets.only(left: 12.h),
+ child: Row(
+ children: [
+ AppbarTitleCircleimage(
+ imagePath: ImageConstant.imgOval40x40,
+ margin: EdgeInsets.only(bottom: 3.v),
+ ),
+ Padding(
+ padding: EdgeInsets.only(
+ left: 12.h,
+ top: 2.v,
+ ),
+ child: Column(
+ children: [
+ AppbarTitle(
+ text: "lbl2".tr,
+ ),
+ SizedBox(height: 3.v),
+ AppbarSubtitle(
+ text: "msg_12_30".tr,
+ margin: EdgeInsets.only(right: 38.h),
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ styleType: Style.bgFill,
+ );
+ }
+
+ /// Section Widget
+ Widget _buildRowattachone(BuildContext context) {
+ return Container(
+ width: double.maxFinite,
+ padding: EdgeInsets.symmetric(
+ horizontal: 7.h,
+ vertical: 6.v,
+ ),
+ decoration: AppDecoration.outlineGray,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ CustomImageView(
+ imagePath: ImageConstant.imgAttach,
+ height: 29.adaptSize,
+ width: 29.adaptSize,
+ margin: EdgeInsets.only(
+ top: 1.v,
+ bottom: 6.v,
+ ),
+ ),
+ Expanded(
+ child: Padding(
+ padding: EdgeInsets.only(
+ left: 4.h,
+ bottom: 4.v,
+ ),
+ child: BlocSelector(
+ selector: (state) => state.messageController,
+ builder: (context, messageController) {
+ return CustomTextFormField(
+ controller: messageController,
+ hintText: "lbl_message".tr,
+ textInputAction: TextInputAction.done,
+ );
+ },
+ ),
+ ),
+ ),
+ CustomImageView(
+ imagePath: ImageConstant.imgMenu,
+ height: 24.v,
+ width: 18.h,
+ margin: EdgeInsets.only(
+ left: 11.h,
+ top: 4.v,
+ bottom: 8.v,
+ ),
+ )
+ ],
+ ),
+ );
+ }
+
+ /// Section Widget
+ _buildBottomBar(BuildContext context) {
+ return CustomBottomBar(onChanged: (BottomBarEnum type) {});
+ }
+
+ /// Common widget
+ Widget _buildColumncheckmark(
+ BuildContext context, {
+ required String imageOne,
+ required String time,
+ }) {
+ return Container(
+ padding: EdgeInsets.all(9.h),
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: fs.Svg(
+ ImageConstant.imgGroup11,
+ ),
+ fit: BoxFit.cover,
+ ),
+ ),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ CustomImageView(
+ imagePath: imageOne,
+ height: 186.v,
+ width: 254.h,
+ radius: BorderRadius.circular(
+ 8.h,
+ ),
+ margin: EdgeInsets.only(right: 1.h),
+ ),
+ SizedBox(height: 10.v),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ time,
+ style: theme.textTheme.bodySmall!.copyWith(
+ color: appTheme.blueA400,
+ ),
+ ),
+ CustomImageView(
+ imagePath: ImageConstant.imgCheckmarkBlueA400,
+ height: 7.v,
+ width: 14.h,
+ margin: EdgeInsets.only(
+ left: 3.h,
+ bottom: 4.v,
+ ),
+ )
+ ],
+ )
+ ],
+ ),
+ );
+ }
+
+ /// Common widget
+ Widget _buildRowcheckmark(
+ BuildContext context, {
+ required String time,
+ }) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ time,
+ style: theme.textTheme.bodySmall!.copyWith(
+ color: appTheme.blueA400,
+ ),
+ ),
+ CustomImageView(
+ imagePath: ImageConstant.imgCheckmarkBlueA400,
+ height: 7.v,
+ width: 14.h,
+ margin: EdgeInsets.only(
+ left: 2.h,
+ top: 2.v,
+ bottom: 3.v,
+ ),
+ )
+ ],
+ );
+ }
+
+ ///Handling route based on bottom click actions
+ String getCurrentRoute(BottomBarEnum type) {
+ switch (type) {
+ case BottomBarEnum.tf:
+ return AppRoutes.k1Page;
+ default:
+ return "/";
+ }
+ }
+
+ ///Handling page based on route
+ Widget getCurrentPage(
+ BuildContext context,
+ String currentRoute,
+ ) {
+ switch (currentRoute) {
+ case AppRoutes.k1Page:
+ return K1Page.builder(context);
+ default:
+ return DefaultWidget();
+ }
+ }
+
+ /// Navigates to the previous screen.
+ onTapArrowleftone(BuildContext context) {
+ NavigatorService.goBack();
}
}
+*/
\ No newline at end of file
diff --git a/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart b/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart
index 1fbde95f..04059200 100644
--- a/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart
+++ b/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart
@@ -2,6 +2,7 @@ import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import '/core/app_export.dart';
import 'package:eatvio_app/presentation/chat/chat_select_screen/models/chat_select_model.dart';
+import 'package:eatvio_app/presentation/chat/chat_select_screen/models/chat_entry.dart'; // ignore: must_be_immutable
part 'chat_select_event.dart';
part 'chat_select_state.dart';
@@ -11,11 +12,38 @@ class ChatSelectBloc extends Bloc {
on(_onInitialize);
}
+ List fillChatEntryList() {
+ return [
+ ChatItemModel(
+ userImage: ImageConstant.imgLogo,
+ username: "Ксения Обрамова",
+ dateText: "9/29",
+ greetingText: "Привет, хорошая статья"),
+ ChatItemModel(
+ userImage: ImageConstant.imgLogo,
+ username: "Ксения Обрамова",
+ dateText: "9/29",
+ greetingText: "Привет, хорошая статья"),
+ ChatItemModel(
+ userImage: ImageConstant.imgLogo,
+ username: "Данил Иванов",
+ dateText: "9/29",
+ greetingText: "Посоветуй пожалуйста рецепт..."),
+ ChatItemModel(
+ userImage: ImageConstant.imgLogo,
+ username: "Данил Иванов",
+ dateText: "9/29",
+ greetingText: "Посоветуй пожалуйста рецепт...")
+ ];
+ }
+
_onInitialize(
ChatSelectInitialEvent event,
Emitter emit,
) async {
emit(state.copyWith(
- chatSelectModelObj: state.chatSelectModelObj?.copyWith()));
+ chatSelectModelObj: state.chatSelectModelObj?.copyWith(
+ userprofileItemList: fillChatEntryList(),
+ )));
}
}
diff --git a/lib/presentation/chat/chat_select_screen/chat_search_view.dart b/lib/presentation/chat/chat_select_screen/chat_search_view.dart
new file mode 100644
index 00000000..b9447660
--- /dev/null
+++ b/lib/presentation/chat/chat_select_screen/chat_search_view.dart
@@ -0,0 +1,164 @@
+import 'package:flutter/material.dart';
+import 'package:eatvio_app/core/app_export.dart';
+
+class CustomSearchView extends StatelessWidget {
+ CustomSearchView(
+ {Key? key,
+ this.alignment,
+ this.width,
+ this.scrollPadding,
+ this.controller,
+ this.focusNode,
+ this.autofocus = false,
+ this.textStyle,
+ this.textInputType = TextInputType.text,
+ this.maxLines,
+ this.hintText,
+ this.hintStyle,
+ this.prefix,
+ this.prefixConstraints,
+ this.suffix,
+ this.suffixConstraints,
+ this.contentPadding,
+ this.borderDecoration,
+ this.fillColor,
+ this.filled = true,
+ this.validator,
+ this.onChanged})
+ : super(
+ key: key,
+ );
+
+ final Alignment? alignment;
+
+ final double? width;
+
+ final TextEditingController? scrollPadding;
+
+ final TextEditingController? controller;
+
+ final FocusNode? focusNode;
+
+ final bool? autofocus;
+
+ final TextStyle? textStyle;
+
+ final TextInputType? textInputType;
+
+ final int? maxLines;
+
+ final String? hintText;
+
+ final TextStyle? hintStyle;
+
+ final Widget? prefix;
+
+ final BoxConstraints? prefixConstraints;
+
+ final Widget? suffix;
+
+ final BoxConstraints? suffixConstraints;
+
+ final EdgeInsets? contentPadding;
+
+ final InputBorder? borderDecoration;
+
+ final Color? fillColor;
+
+ final bool? filled;
+
+ final FormFieldValidator? validator;
+
+ final Function(String)? onChanged;
+
+ @override
+ Widget build(BuildContext context) {
+ return alignment != null
+ ? Align(
+ alignment: alignment ?? Alignment.center,
+ child: searchViewWidget(context))
+ : searchViewWidget(context);
+ }
+
+ searchViewWidget(BuildContext context) => SizedBox(
+ width: width ?? double.maxFinite,
+ child: TextFormField(
+ scrollPadding:
+ EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
+ controller: controller,
+ focusNode: focusNode,
+ onTapOutside: (event) => onTapOutside(),
+ autofocus: autofocus!,
+ style: textStyle ?? CustomTextStyles.bodySmallMulishBluegray800,
+ keyboardType: textInputType,
+ maxLines: maxLines ?? 1,
+ decoration: decoration,
+ validator: validator,
+ onChanged: (String value) => onChanged?.call(value),
+ ),
+ );
+
+ void onTapOutside() {
+ if (focusNode != null) {
+ focusNode?.unfocus();
+ } else {
+ FocusManager.instance.primaryFocus?.unfocus();
+ }
+ }
+
+ InputDecoration get decoration => InputDecoration(
+ hintText: hintText ?? "",
+ hintStyle: hintStyle ?? CustomTextStyles.bodySmallMulishBluegray800,
+ prefixIcon: prefix ??
+ SizedBox(
+ child: Padding(
+ padding: EdgeInsets.only(left: 10),
+ child: Icon(Icons.search)),
+ ),
+ prefixIconConstraints: prefixConstraints ??
+ BoxConstraints(
+ maxHeight: 40.v,
+ ),
+ suffixIcon: suffix ??
+ Padding(
+ padding: EdgeInsets.only(
+ right: 15.h,
+ ),
+ child: IconButton(
+ onPressed: () => controller!.clear(),
+ icon: Icon(
+ Icons.clear,
+ color: Colors.grey.shade600,
+ ),
+ ),
+ ),
+ suffixIconConstraints: suffixConstraints ??
+ BoxConstraints(
+ maxHeight: 40.v,
+ ),
+ isDense: true,
+ contentPadding: contentPadding ??
+ EdgeInsets.only(
+ top: 11.v,
+ right: 11.h,
+ bottom: 11.v,
+ ),
+ fillColor: fillColor ?? appTheme.gray100,
+ filled: filled,
+ border: borderDecoration ??
+ OutlineInputBorder(
+ borderRadius: BorderRadius.circular(8.h),
+ borderSide: BorderSide.none,
+ ),
+ enabledBorder: borderDecoration ??
+ OutlineInputBorder(
+ borderRadius: BorderRadius.circular(8.h),
+ borderSide: BorderSide.none,
+ ),
+ focusedBorder: borderDecoration ??
+ OutlineInputBorder(
+ borderRadius: BorderRadius.circular(8.h),
+ borderSide: BorderSide.none,
+ ),
+ );
+}
diff --git a/lib/presentation/chat/chat_select_screen/chat_select_screen.dart b/lib/presentation/chat/chat_select_screen/chat_select_screen.dart
index 7b9b2f65..f92e2e3b 100644
--- a/lib/presentation/chat/chat_select_screen/chat_select_screen.dart
+++ b/lib/presentation/chat/chat_select_screen/chat_select_screen.dart
@@ -1,6 +1,8 @@
import 'bloc/chat_select_bloc.dart';
import 'models/chat_select_model.dart';
import 'package:eatvio_app/core/app_export.dart';
+import '../chat_select_screen/chat_search_view.dart';
+import 'package:eatvio_app/widgets/custom_bottom_bar.dart';
import 'package:flutter/material.dart';
import 'package:eatvio_app/presentation/chat/chat_select_screen/models/chat_entry.dart'; // ignore: must_be_immutable
import 'package:eatvio_app/presentation/chat/chat_select_screen/widgets/chat_entry_widget.dart'; // ignore: must_be_immutable
@@ -20,50 +22,61 @@ class ChatSelectScreen extends StatelessWidget {
mediaQueryData = MediaQuery.of(context);
return SafeArea(
child: Scaffold(
- resizeToAvoidBottomInset: false,
- body: Container(
- width: double.maxFinite,
- decoration: AppDecoration.fillGray,
- child: Column(
- children: [
- SizedBox(height: 30.v),
- Container(
- margin: EdgeInsets.only(
- left: 16.h,
- right: 20.h,
- ),
- padding: EdgeInsets.all(12.h),
- decoration: AppDecoration.outlinePrimary.copyWith(
- borderRadius: BorderRadiusStyle.circleBorder8,
- ),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- BlocSelector(
- selector: (state) => TextEditingController(),
- builder: (context, searchController) {
- return Container();
- },
- ),
- SizedBox(height: 20.v),
- _buildUserprofile(context)
- ],
- ),
- )
- ],
+ resizeToAvoidBottomInset: false,
+ body: Container(
+ width: double.maxFinite,
+ decoration: AppDecoration.fillGray,
+ child: Column(
+ children: [
+ SizedBox(height: 30.v),
+ Container(
+ margin: EdgeInsets.only(
+ left: 16.h,
+ right: 20.h,
+ ),
+ padding: EdgeInsets.all(12.h),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: const BorderRadius.all(Radius.circular(12)),
+ boxShadow: [
+ BoxShadow(
+ color: Colors.grey.withOpacity(0.5),
+ spreadRadius: 2,
+ blurRadius: 5,
+ offset: Offset(0, 3),
+ ),
+ ],
+ ),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ BlocSelector(
+ selector: (state) => TextEditingController(),
+ builder: (context, searchController) {
+ return CustomSearchView(
+ controller: searchController,
+ hintText: "Поиск",
+ );
+ },
+ ),
+ SizedBox(height: 20.v),
+ _buildChatList(context)
+ ],
+ ),
+ )
+ ],
+ ),
),
- ),
- ),
+ bottomNavigationBar: _buildBottomBar(context)),
);
}
- _buildUserprofile(BuildContext context) {
+ _buildChatList(BuildContext context) {
return BlocSelector(
selector: (state) => state.chatSelectModelObj,
builder: (context, chatSelectModelObj) {
return ListView.separated(
- physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
separatorBuilder: (context, index) {
return SizedBox(
@@ -72,9 +85,9 @@ class ChatSelectScreen extends StatelessWidget {
},
itemCount: chatSelectModelObj?.userprofileItemList.length ?? 0,
itemBuilder: (context, index) {
- UserprofileItemModel model =
+ ChatItemModel model =
chatSelectModelObj?.userprofileItemList[index] ??
- UserprofileItemModel();
+ ChatItemModel();
return UserprofileItemWidget(
model,
);
@@ -83,4 +96,8 @@ class ChatSelectScreen extends StatelessWidget {
},
);
}
+
+ _buildBottomBar(BuildContext context) {
+ return CustomBottomBar(onChanged: (BottomBarEnum type) {});
+ }
}
diff --git a/lib/presentation/chat/chat_select_screen/models/chat_entry.dart b/lib/presentation/chat/chat_select_screen/models/chat_entry.dart
index 2cd363fe..40fb78ef 100644
--- a/lib/presentation/chat/chat_select_screen/models/chat_entry.dart
+++ b/lib/presentation/chat/chat_select_screen/models/chat_entry.dart
@@ -3,8 +3,8 @@ import 'package:eatvio_app/core/app_export.dart';
/// This class is used in the [userprofile_item_widget] screen.
// ignore_for_file: must_be_immutable
-class UserprofileItemModel {
- UserprofileItemModel(
+class ChatItemModel {
+ ChatItemModel(
{this.userImage,
this.username,
this.dateText,
diff --git a/lib/presentation/chat/chat_select_screen/models/chat_select_model.dart b/lib/presentation/chat/chat_select_screen/models/chat_select_model.dart
index a7014788..4a3b9669 100644
--- a/lib/presentation/chat/chat_select_screen/models/chat_select_model.dart
+++ b/lib/presentation/chat/chat_select_screen/models/chat_select_model.dart
@@ -8,8 +8,8 @@ import 'package:eatvio_app/presentation/chat/chat_select_screen/models/chat_entr
class ChatSelectModel extends Equatable {
ChatSelectModel({this.userprofileItemList = const []});
- List userprofileItemList;
- ChatSelectModel copyWith({List? userprofileItemList}) {
+ List userprofileItemList;
+ ChatSelectModel copyWith({List? userprofileItemList}) {
return ChatSelectModel(
userprofileItemList: userprofileItemList ?? this.userprofileItemList,
);
diff --git a/lib/presentation/chat/chat_select_screen/widgets/chat_entry_widget.dart b/lib/presentation/chat/chat_select_screen/widgets/chat_entry_widget.dart
index 13fb8371..0df63990 100644
--- a/lib/presentation/chat/chat_select_screen/widgets/chat_entry_widget.dart
+++ b/lib/presentation/chat/chat_select_screen/widgets/chat_entry_widget.dart
@@ -10,7 +10,7 @@ class UserprofileItemWidget extends StatelessWidget {
key: key,
);
- UserprofileItemModel userprofileItemModelObj;
+ ChatItemModel userprofileItemModelObj;
@override
Widget build(BuildContext context) {
@@ -32,12 +32,14 @@ class UserprofileItemWidget extends StatelessWidget {
),
),
Expanded(
- child: Padding(
- padding: EdgeInsets.only(
- left: 12.h,
- top: 2.v,
- bottom: 11.v,
- ),
+ child: Padding(
+ padding: EdgeInsets.only(
+ left: 12.h,
+ top: 2.v,
+ bottom: 11.v,
+ ),
+ child: GestureDetector(
+ onTap: () => Navigator.pushNamed(context, AppRoutes.chatScreen),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -77,7 +79,7 @@ class UserprofileItemWidget extends StatelessWidget {
],
),
),
- )
+ ))
],
),
);
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 e742aac5..b189b214 100644
--- a/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart
+++ b/lib/presentation/diary/diary_edit_screen/diary_edit_screen.dart
@@ -13,7 +13,7 @@ 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';
-//import 'package:eatvio_app/widgets/custom_bottom_bar.dart';
+import 'package:eatvio_app/widgets/custom_bottom_bar.dart';
import 'package:carousel_slider/carousel_slider.dart';
// ignore: must_be_immutable
@@ -57,44 +57,73 @@ class DiaryEditScreen extends StatelessWidget {
BuildContext context, DiaryEditLoadedState state) {
mediaQueryData = MediaQuery.of(context);
return RefreshIndicator(
- onRefresh: refreshPage(context),
- child: FormBuilder(
+ onRefresh: refreshPage(context),
+ child: Stack(
+ children: [
+ FormBuilder(
child: SafeArea(
- child: Scaffold(
- backgroundColor: Color.fromARGB(255, 240, 242, 245),
- resizeToAvoidBottomInset: true,
- body: SizedBox(
- width: double.maxFinite,
- child: Column(
- children: [
- Expanded(
- child: SingleChildScrollView(
- child: Padding(
- padding: EdgeInsets.only(bottom: 5.v),
- child: Column(
- children: [
- _buildHeaderRow(context, state),
- SizedBox(height: 30.v),
- _buildWakupRetire(context, state),
- SizedBox(height: 30.v),
- _buildMeal(context, state),
- SizedBox(height: 20.v),
- _buildMood(context, state),
- SizedBox(height: 30.v),
- _buildNutritionChart(context, state),
- SizedBox(height: 30.v),
- _buildComment(context, state),
- ],
+ child: Scaffold(
+ backgroundColor: Color.fromARGB(255, 240, 242, 245),
+ resizeToAvoidBottomInset: true,
+ body: SizedBox(
+ width: double.maxFinite,
+ child: Column(
+ children: [
+ Expanded(
+ child: SingleChildScrollView(
+ child: Padding(
+ padding: EdgeInsets.only(bottom: 5.v),
+ child: Column(
+ children: [
+ _buildHeaderRow(context, state),
+ SizedBox(height: 30.v),
+ _buildWakupRetire(context, state),
+ SizedBox(height: 30.v),
+ _buildMeal(context, state),
+ SizedBox(height: 20.v),
+ _buildMood(context, state),
+ SizedBox(height: 30.v),
+ _buildNutritionChart(context, state),
+ SizedBox(height: 30.v),
+ _buildComment(context, state),
+ ],
+ ),
+ ),
),
),
- ),
+ ],
),
- ],
+ ),
+ bottomNavigationBar: _buildBottomBar(context),
),
),
- bottomNavigationBar: _buildEndDay(context),
),
- )));
+ Positioned(
+ left: 16.h,
+ right: 16.h,
+ bottom: 50.v, // Adjusted position to lift the button higher
+ child: _buildEndDay(context),
+ ),
+ ],
+ ),
+ );
+ }
+
+ _buildEndDay(BuildContext context) {
+ return CustomOutlinedButton(
+ text: "Закончить день",
+ margin: EdgeInsets.only(
+ left: 16.h,
+ right: 16.h,
+ bottom: 41.v,
+ ),
+ buttonStyle: CustomButtonStyles.outlinePrimaryTL15,
+ decoration: BoxDecoration(
+ color: Colors.transparent,
+ ),
+ onPressed: onFinishDayPressed(context),
+ // Установите прозрачный фон
+ );
}
refreshPage(BuildContext context) {
@@ -159,6 +188,10 @@ class DiaryEditScreen extends StatelessWidget {
};
}
+ _buildBottomBar(BuildContext context) {
+ return CustomBottomBar(onChanged: (BottomBarEnum type) {});
+ }
+
/// Section Widget
_buildAddProduct(BuildContext context, DiaryEditLoadedState state) {
return CustomOutlinedButton(
@@ -1082,22 +1115,6 @@ class DiaryEditScreen extends StatelessWidget {
}
/// Section Widget
- _buildEndDay(BuildContext context) {
- return CustomOutlinedButton(
- text: "Закончить день",
- margin: EdgeInsets.only(
- left: 16.h,
- right: 16.h,
- bottom: 41.v,
- ),
- buttonStyle: CustomButtonStyles.outlinePrimaryTL15,
- decoration: BoxDecoration(
- color: Colors.transparent,
- ),
- onPressed: onFinishDayPressed(context),
- // Установите прозрачный фон
- );
- }
Function() onFinishDayPressed(BuildContext context) {
return () {
diff --git a/lib/presentation/profile/my_profile_screen/my_profile_screen.dart b/lib/presentation/profile/my_profile_screen/my_profile_screen.dart
index 0a387801..7ac120a4 100644
--- a/lib/presentation/profile/my_profile_screen/my_profile_screen.dart
+++ b/lib/presentation/profile/my_profile_screen/my_profile_screen.dart
@@ -2,7 +2,6 @@ import 'bloc/my_profile_bloc.dart';
import 'models/my_profile_model.dart';
import 'package:eatvio_app/core/app_export.dart';
import 'package:eatvio_app/widgets/app_bar/appbar_subtitle.dart';
-import 'package:eatvio_app/widgets/app_bar/appbar_title_circleimage.dart';
import 'package:eatvio_app/widgets/app_bar/custom_app_bar.dart';
import 'package:eatvio_app/widgets/custom_bottom_bar.dart';
import 'package:eatvio_app/widgets/app_bar/exit_button.dart';
@@ -13,6 +12,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:hive/hive.dart';
import 'package:flutter/services.dart';
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:http/http.dart' as http;
import 'package:fl_chart/fl_chart.dart';
import 'package:intl/intl.dart';
@@ -55,12 +55,7 @@ class MyProfileScreen extends StatelessWidget {
mediaQueryData = MediaQuery.of(context);
return SafeArea(
child: Scaffold(
- appBar: _buildAppBar(
- context,
- ((state.userDetails?['first_name'] ?? '') +
- ' ' +
- (state.userDetails?['last_name'] ?? '')) ??
- 'loading'.tr),
+ appBar: _buildAppBar(context, state),
body: Container(
width: double.maxFinite,
padding: EdgeInsets.symmetric(horizontal: 8.h, vertical: 18.v),
@@ -83,16 +78,29 @@ class MyProfileScreen extends StatelessWidget {
}
/// Section Widget
- _buildAppBar(BuildContext context, String username) {
+ _buildAppBar(BuildContext context, MyProfileLoadedState state) {
+ print(state.user?['profile_photo_url']);
return CustomAppBar(
height: 54.v,
leadingWidth: 28.h,
title: Padding(
padding: EdgeInsets.only(left: 20.h),
child: Row(children: [
- AppbarTitleCircleimage(imagePath: ImageConstant.imgEllipse1),
+ CachedNetworkImage(
+ imageUrl: state.user?['profile_photo_url'],
+ imageBuilder: (context, imageProvider) => CircleAvatar(
+ backgroundImage: imageProvider,
+ radius: 20,
+ ),
+ placeholder: (context, url) => CircularProgressIndicator(),
+ errorWidget: (context, url, error) => CircleAvatar(
+ child: Icon(Icons.error),
+ backgroundColor: Colors.red,
+ radius: 20,
+ ),
+ ),
AppbarSubtitle(
- text: username,
+ text: state.user?['name'],
margin: EdgeInsets.only(left: 35.h, top: 12.v, bottom: 9.v))
])),
actions: [
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index 97311c58..6f988361 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -20,7 +20,7 @@ import 'package:eatvio_app/presentation/auth/auth_screen/auth_screen.dart';
import 'package:eatvio_app/presentation/profile/my_profile_screen/my_profile_screen.dart';
import 'package:eatvio_app/presentation/profile/my_profile_screen/my_settings_screen.dart';
import 'package:eatvio_app/presentation/diary/diary_edit_screen/diary_edit_screen.dart';
-import 'package:eatvio_app/presentation/chat/chat_screen/chat_screen.dart';
+//import 'package:eatvio_app/presentation/chat/chat_screen/chat_screen.dart';
import 'package:eatvio_app/presentation/chat/chat_select_screen/chat_select_screen.dart';
class AppRoutes {
@@ -101,7 +101,7 @@ class AppRoutes {
myProfile: MyProfileScreen.builder,
mySettings: MySettingsScreen.builder,
diaryEdit: DiaryEditScreen.builder,
- chatScreen: ChatScreen.builder,
+ //chatScreen: ChatScreen.builder,
chatSelectScreen: ChatSelectScreen.builder,
};
}