From 33da49df6c77345f087a3c3b3b8e0874fe740b88 Mon Sep 17 00:00:00 2001 From: jahongireshonqulov Date: Sat, 25 Oct 2025 12:20:00 +0500 Subject: [PATCH] feat: app text form field done --- assets/icons/Vector (8).svg | 3 + .../basket_page/widgets/w_basket_body.dart | 5 - lib/feature/browse/browse.dart | 1 + .../pages/browse_page/browse_page.dart | 3 +- .../browse_page/widgets/w_browse_body.dart | 22 +++++ .../widgets/app_text_form_field.dart | 93 +++++++++++++++++++ 6 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 assets/icons/Vector (8).svg create mode 100644 lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_body.dart create mode 100644 lib/feature/common/presentation/widgets/app_text_form_field.dart diff --git a/assets/icons/Vector (8).svg b/assets/icons/Vector (8).svg new file mode 100644 index 0000000..40fb2bf --- /dev/null +++ b/assets/icons/Vector (8).svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_body.dart b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_body.dart index 7d084e0..bfe794e 100644 --- a/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_body.dart +++ b/lib/feature/basket/presentation/pages/basket_page/widgets/w_basket_body.dart @@ -9,11 +9,6 @@ class WBasketBody extends StatelessWidget { Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { - log("qweqweqweqwe:${state.orders}"); - log("qweqweqweqwe:${state.orders.isEmpty}"); - log("qweqweqweqwe:${state.orders.isNotEmpty}"); - - return Column( children: [ WBasketHeader(), diff --git a/lib/feature/browse/browse.dart b/lib/feature/browse/browse.dart index f4d8b77..96f1a82 100644 --- a/lib/feature/browse/browse.dart +++ b/lib/feature/browse/browse.dart @@ -1 +1,2 @@ export 'presentation/pages/browse_page/browse_page.dart'; +export 'package:food_delivery_client/feature/browse/presentation/pages/browse_page/widgets/w_browse_body.dart'; diff --git a/lib/feature/browse/presentation/pages/browse_page/browse_page.dart b/lib/feature/browse/presentation/pages/browse_page/browse_page.dart index 5ac8dcb..9829d68 100644 --- a/lib/feature/browse/presentation/pages/browse_page/browse_page.dart +++ b/lib/feature/browse/presentation/pages/browse_page/browse_page.dart @@ -1,3 +1,4 @@ + import '../../../../../food_delivery_client.dart'; class BrowsePage extends StatelessWidget { @@ -6,7 +7,7 @@ class BrowsePage extends StatelessWidget { @override Widget build(BuildContext context) { return WLayout( - child: Scaffold(body: Center(child: Text(context.loc.mobileNumber))), + child: Scaffold(body:WBrowseBody() ), ); } } diff --git a/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_body.dart b/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_body.dart new file mode 100644 index 0000000..6645adc --- /dev/null +++ b/lib/feature/browse/presentation/pages/browse_page/widgets/w_browse_body.dart @@ -0,0 +1,22 @@ +import 'package:food_delivery_client/feature/common/presentation/widgets/app_text_form_field.dart'; + +import '../../../../../../food_delivery_client.dart'; + +class WBrowseBody extends StatelessWidget { + const WBrowseBody({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + 6.verticalSpace, + AppTextFormField( + controller: TextEditingController(), + prefixIcon: SvgPicture.asset( + AppIcons.icSearch, + ), + ), + ], + ).paddingSymmetric(horizontal: 16); + } +} diff --git a/lib/feature/common/presentation/widgets/app_text_form_field.dart b/lib/feature/common/presentation/widgets/app_text_form_field.dart new file mode 100644 index 0000000..81d9c7c --- /dev/null +++ b/lib/feature/common/presentation/widgets/app_text_form_field.dart @@ -0,0 +1,93 @@ +import '../../../../food_delivery_client.dart'; + +class AppTextFormField extends StatelessWidget { + AppTextFormField({ + super.key, + this.maxLines, + this.minLines, + this.textStyle, + this.onTap, + this.textAlign, + this.onChanged, + this.inputFormatters, + this.keyBoardType, + this.fillColor, + this.hintText, + this.hintTextStyle, + this.obscureText = false, + required this.controller, + this.prefixIcon, + this.prefixSvgPath, + }); + + final int? maxLines; + final int? minLines; + final TextStyle? textStyle; + final VoidCallback? onTap; + final TextAlign? textAlign; + final TextEditingController controller; + final Function(String? value)? onChanged; + final List? inputFormatters; + final TextInputType? keyBoardType; + FormFieldValidator? validator; + final bool obscureText; + final Color? fillColor; + final String? hintText; + final TextStyle? hintTextStyle; + late final Widget? prefixIcon; + final String? prefixSvgPath; + + @override + Widget build(BuildContext context) { + return TextFormField( + enabled: true, + autofocus: true, + maxLines: maxLines ?? 1, + minLines: minLines ?? 1, + onChanged: onChanged, + inputFormatters: inputFormatters, + keyboardType: keyBoardType, + style: textStyle ?? AppTextStyles.size16Regular, + onTap: onTap, + textAlign: textAlign ?? TextAlign.start, + controller: controller, + validator: validator, + autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: InputDecoration( + enabled: true, + filled: true, + fillColor: fillColor ?? AppColors.cEEEEEE, + hintText: hintText, + hintStyle: hintTextStyle, + prefixIconConstraints: BoxConstraints( + minHeight: 0, + maxHeight: 24, + maxWidth: 34, + minWidth: 0, + ), + prefixIcon: prefixIcon?.paddingOnly(left: 10).paddingAll(3), + contentPadding: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + border: OutlineInputBorder( + borderRadius: AppUtils.kBorderRadius40, + borderSide: BorderSide.none, + ), + errorBorder: OutlineInputBorder( + borderRadius: AppUtils.kBorderRadius40, + borderSide: BorderSide.none, + ), + enabledBorder: OutlineInputBorder( + borderRadius: AppUtils.kBorderRadius40, + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderRadius: AppUtils.kBorderRadius40, + borderSide: BorderSide.none, + ), + disabledBorder: OutlineInputBorder( + borderRadius: AppUtils.kBorderRadius40, + borderSide: BorderSide.none, + ), + ), + ); + } +}