diff --git a/assets/images/files.svg b/assets/images/files.svg new file mode 100644 index 0000000..dfc862e --- /dev/null +++ b/assets/images/files.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/images/gallery.svg b/assets/images/gallery.svg new file mode 100644 index 0000000..ec1c45e --- /dev/null +++ b/assets/images/gallery.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/open_camera.svg b/assets/images/open_camera.svg new file mode 100644 index 0000000..171452a --- /dev/null +++ b/assets/images/open_camera.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/lib/classes/colors.dart b/lib/classes/colors.dart index 4386960..e58a21b 100644 --- a/lib/classes/colors.dart +++ b/lib/classes/colors.dart @@ -12,6 +12,7 @@ class MyColors { static const Color grey57Color = Color(0xff575757); static const Color grey67Color = Color(0xff676767); static const Color grey77Color = Color(0xff777777); + static const Color greyF7Color = Color(0xffF7F7F7); static const Color grey80Color = Color(0xff808080); static const Color grey70Color = Color(0xff707070); static const Color greyACColor = Color(0xffACACAC); @@ -22,6 +23,7 @@ class MyColors { static const Color lightGreyE3Color = Color(0xffE3E3E3); static const Color lightGreyE6Color = Color(0xffE6E6E6); static const Color lightGreyEAColor = Color(0xffEAEAEA); + static const Color lightGreyE5Color = Color(0xffE5E5E5); static const Color darkWhiteColor = Color(0xffE0E0E0); static const Color redColor = Color(0xffD02127); static const Color yellowColor = Color(0xffF4E31C); diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 5627f4c..c51a5d2 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -21,11 +21,11 @@ extension EmailValidator on String { style: TextStyle(fontSize: 10, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), ); - Widget toText11({Color? color, bool isUnderLine = false, bool isBold = false}) => Text( + Widget toText11({Color? color, FontWeight? weight, bool isUnderLine = false, bool isBold = false}) => Text( this, style: TextStyle( fontSize: 11, - fontWeight: isBold ? FontWeight.bold : FontWeight.w600, + fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.w600), color: color ?? MyColors.darkTextColor, letterSpacing: -0.33, decoration: isUnderLine ? TextDecoration.underline : null, diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index fc4d8f4..dc3bdb7 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -42,7 +42,7 @@ extension WidgetExtensions on Widget { child: this, ); - Widget objectContainerView({String title = "", String note = "", bool disablePadding = false,double radius =15}) { + Widget objectContainerView({String title = "", String note = "", bool disablePadding = false, double radius = 15}) { return Container( padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), decoration: BoxDecoration( @@ -69,14 +69,14 @@ extension WidgetExtensions on Widget { ); } - Widget objectContainerBorderView({String title = "", String note = ""}) { + Widget objectContainerBorderView({String title = "", String note = "", bool disablePadding = false, double radius = 15, Color? color, Color borderColor = MyColors.lightGreyEFColor}) { return Container( - padding: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), - alignment: Alignment.center, + padding: disablePadding ? EdgeInsets.zero : const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), + borderRadius: BorderRadius.circular(radius), + color: color, border: Border.all( - color: MyColors.lightGreyEFColor, + color: borderColor, width: 1, ), ), diff --git a/lib/ui/screens/items_for_sale/add_new_item_for_sale.dart b/lib/ui/screens/items_for_sale/add_new_item_for_sale.dart index aac9d13..1ae7570 100644 --- a/lib/ui/screens/items_for_sale/add_new_item_for_sale.dart +++ b/lib/ui/screens/items_for_sale/add_new_item_for_sale.dart @@ -28,7 +28,7 @@ class _AddNewItemForSaleState extends State { List getSaleCategoriesList = []; late PageController _controller; ItemReviewModel? itemReviewModel; - int pageIndex = 0; + int? pageIndex; @override void initState() { @@ -43,7 +43,7 @@ class _AddNewItemForSaleState extends State { @override Widget build(BuildContext context) { - getRequestID(); + pageIndex ??= (ModalRoute.of(context)?.settings.arguments as int?) ?? 0; return Scaffold( backgroundColor: Colors.white, appBar: AppBarWidget(context, title: LocaleKeys.itemsForSale.tr(), showHomeButton: true), @@ -147,11 +147,6 @@ class _AddNewItemForSaleState extends State { ); } - void getRequestID() async { - int args = (ModalRoute.of(context)?.settings.arguments ?? {}) as int; - pageIndex = args; - } - void getItemForSaleCategory() async { try { Utils.showLoading(context); diff --git a/lib/ui/screens/items_for_sale/fragments/add_details_fragment.dart b/lib/ui/screens/items_for_sale/fragments/add_details_fragment.dart index bfb5a5e..fc655a1 100644 --- a/lib/ui/screens/items_for_sale/fragments/add_details_fragment.dart +++ b/lib/ui/screens/items_for_sale/fragments/add_details_fragment.dart @@ -188,11 +188,11 @@ class _AddItemDetailsFragmentState extends State { children: [ title.toText16().expanded, 6.width, - SimpleButton(LocaleKeys.add.tr(), () async { - ImageOptions.showImageOptions(context, (String image, File file) { - setState(() { - images.add(image); - }); + SimpleButton(LocaleKeys.add.tr(), () { + ImageOptions.showImageOptionsNew(context, (String image, File file) { + // setState(() { + // images.add(image); + // }); }); }, fontSize: 14), ], diff --git a/lib/ui/work_list/sheets/search_options_sheet.dart b/lib/ui/work_list/sheets/search_options_sheet.dart index 9b794bb..05a87d9 100644 --- a/lib/ui/work_list/sheets/search_options_sheet.dart +++ b/lib/ui/work_list/sheets/search_options_sheet.dart @@ -47,11 +47,7 @@ class SearchOptionsSheet extends StatelessWidget { }); }, separatorBuilder: (context, index) { - return Container( - width: double.infinity, - height: 1, - color: Color(0xffE3E3E3), - ); + return 1.divider; }, itemCount: searchOptions.length, physics: NeverScrollableScrollPhysics(), diff --git a/lib/widgets/bottom_sheets/attachment_options.dart b/lib/widgets/bottom_sheets/attachment_options.dart new file mode 100644 index 0000000..19a4826 --- /dev/null +++ b/lib/widgets/bottom_sheets/attachment_options.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; + +class AttachmentOptions extends StatelessWidget { + VoidCallback onCameraTap; + VoidCallback onGalleryTap; + VoidCallback onFilesTap; + + AttachmentOptions({Key? key, required this.onCameraTap, required this.onGalleryTap, required this.onFilesTap}) : super(key: key); + + @override + Widget build(BuildContext context) { + return SizedBox( + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Upload Attachment".toSectionHeading(), + "Select from gallery or open camera".toText11(weight: FontWeight.w500), + GridView( + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, childAspectRatio: 105 / 105, crossAxisSpacing: 9, mainAxisSpacing: 9), + physics: const NeverScrollableScrollPhysics(), + padding: const EdgeInsets.only(top: 21, bottom: 14), + shrinkWrap: true, + children: [ + itemView("open_camera.svg", "Open\nCamera"), + itemView("gallery.svg", "Upload from\nGallery"), + itemView("files", "Upload from\nFiles"), + ], + ) + ], + ).paddingOnly(left: 21, right: 21, bottom: 21), + ); + } + + Widget itemView(String icon, String title) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Icon(Icons.photo), + title.toText11(isBold: true), + ], + ).paddingOnly(left: 13, right: 13, top: 16, bottom: 12).expanded.objectContainerBorderView( + disablePadding: true, + radius: 10, + color: MyColors.greyF7Color.withOpacity(.48), + borderColor: MyColors.lightGreyE5Color.withOpacity(.48), + ); + } +} diff --git a/lib/widgets/image_picker.dart b/lib/widgets/image_picker.dart index ec57085..484f0a1 100644 --- a/lib/widgets/image_picker.dart +++ b/lib/widgets/image_picker.dart @@ -1,16 +1,31 @@ import 'dart:convert'; import 'dart:io'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; +import 'package:mohem_flutter_app/widgets/bottom_sheet.dart'; +import 'package:mohem_flutter_app/widgets/bottom_sheets/attachment_options.dart'; class ImageOptions { - static void showImageOptions( - BuildContext context, - Function(String, File) image, - ) { + static void showImageOptionsNew(BuildContext context, Function(String, File) image) { + showMyBottomSheet( + context, + child: AttachmentOptions( + onCameraTap: () async { + PickedFile? path = await ImagePicker.platform.pickImage(source: ImageSource.camera, imageQuality: 20); + }, + onGalleryTap: () {}, + onFilesTap: () async { + FilePickerResult? result = await FilePicker.platform.pickFiles(); + }, + ), + ); + } + + static void showImageOptions(BuildContext context, Function(String, File) image) { showModalBottomSheet( backgroundColor: Colors.transparent, context: context,