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,