feat : request and request tagging
This commit is contained in:
1
assets/icons/place_holder.svg
Normal file
1
assets/icons/place_holder.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/images/place_holder.png
Normal file
BIN
assets/images/place_holder.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
80
lib/presentation/common/assets.dart
Normal file
80
lib/presentation/common/assets.dart
Normal file
@@ -0,0 +1,80 @@
|
||||
///This file is automatically generated. DO NOT EDIT, all your changes would be lost.
|
||||
class Assets {
|
||||
Assets._();
|
||||
|
||||
static const String iconsAdd = 'assets/icons/add.svg';
|
||||
static const String iconsArrowLeft = 'assets/icons/arrow_left.svg';
|
||||
static const String iconsArrowRight = 'assets/icons/arrow_right.svg';
|
||||
static const String iconsBgHeaderUserProfile = 'assets/icons/bg_header_user_profile.svg';
|
||||
static const String iconsCalendar = 'assets/icons/calendar.svg';
|
||||
static const String iconsCalendarSearch = 'assets/icons/calendar_search.svg';
|
||||
static const String iconsCall = 'assets/icons/call.svg';
|
||||
static const String iconsDiagram = 'assets/icons/diagram.svg';
|
||||
static const String iconsDownload = 'assets/icons/download.svg';
|
||||
static const String iconsEdit = 'assets/icons/edit.svg';
|
||||
static const String iconsExcelDownload = 'assets/icons/excel_download.svg';
|
||||
static const String iconsFilter = 'assets/icons/filter.svg';
|
||||
static const String iconsGps = 'assets/icons/gps.svg';
|
||||
static const String iconsInformation = 'assets/icons/information.svg';
|
||||
static const String iconsInspection = 'assets/icons/inspection.svg';
|
||||
static const String iconsKey = 'assets/icons/key.svg';
|
||||
static const String iconsLiveStock = 'assets/icons/liveStock.svg';
|
||||
static const String iconsLogout = 'assets/icons/logout.svg';
|
||||
static const String iconsMap = 'assets/icons/map.svg';
|
||||
static const String iconsMapMarker = 'assets/icons/map_marker.svg';
|
||||
static const String iconsMessageAdd = 'assets/icons/message_add.svg';
|
||||
static const String iconsPdfDownload = 'assets/icons/pdf_download.svg';
|
||||
static const String iconsPictureFrame = 'assets/icons/picture_frame.svg';
|
||||
static const String iconsPlaceHolder = 'assets/icons/place_holder.svg';
|
||||
static const String iconsProfileCircle = 'assets/icons/profile_circle.svg';
|
||||
static const String iconsProfileUser = 'assets/icons/profile_user.svg';
|
||||
static const String iconsReceiptDiscount = 'assets/icons/receipt_discount.svg';
|
||||
static const String iconsScan = 'assets/icons/scan.svg';
|
||||
static const String iconsScanBarcode = 'assets/icons/scan_barcode.svg';
|
||||
static const String iconsSearch = 'assets/icons/search.svg';
|
||||
static const String iconsSecurityTime = 'assets/icons/security_time.svg';
|
||||
static const String iconsSetting = 'assets/icons/setting.svg';
|
||||
static const String iconsTagUser = 'assets/icons/tag_user.svg';
|
||||
static const String iconsTrash = 'assets/icons/trash.svg';
|
||||
static const String iconsUser = 'assets/icons/user.svg';
|
||||
static const String iconsUserSquare = 'assets/icons/user_square.svg';
|
||||
static const String imagesInnerSplash = 'assets/images/inner_splash.webp';
|
||||
static const String imagesOutterSplash = 'assets/images/outter_splash.webp';
|
||||
static const String imagesPlaceHolder = 'assets/images/place_holder.png';
|
||||
static const String vecAddSvg = 'assets/vec/add.svg.vec';
|
||||
static const String vecArrowLeftSvg = 'assets/vec/arrow_left.svg.vec';
|
||||
static const String vecArrowRightSvg = 'assets/vec/arrow_right.svg.vec';
|
||||
static const String vecBgHeaderUserProfileSvg = 'assets/vec/bg_header_user_profile.svg.vec';
|
||||
static const String vecCalendarSearchSvg = 'assets/vec/calendar_search.svg.vec';
|
||||
static const String vecCalendarSvg = 'assets/vec/calendar.svg.vec';
|
||||
static const String vecCallSvg = 'assets/vec/call.svg.vec';
|
||||
static const String vecDiagramSvg = 'assets/vec/diagram.svg.vec';
|
||||
static const String vecDownloadSvg = 'assets/vec/download.svg.vec';
|
||||
static const String vecEditSvg = 'assets/vec/edit.svg.vec';
|
||||
static const String vecExcelDownloadSvg = 'assets/vec/excel_download.svg.vec';
|
||||
static const String vecFilterSvg = 'assets/vec/filter.svg.vec';
|
||||
static const String vecGpsSvg = 'assets/vec/gps.svg.vec';
|
||||
static const String vecInformationSvg = 'assets/vec/information.svg.vec';
|
||||
static const String vecInspectionSvg = 'assets/vec/inspection.svg.vec';
|
||||
static const String vecKeySvg = 'assets/vec/key.svg.vec';
|
||||
static const String vecLiveStockSvg = 'assets/vec/liveStock.svg.vec';
|
||||
static const String vecLogoutSvg = 'assets/vec/logout.svg.vec';
|
||||
static const String vecMapMarkerSvg = 'assets/vec/map_marker.svg.vec';
|
||||
static const String vecMapSvg = 'assets/vec/map.svg.vec';
|
||||
static const String vecMessageAddSvg = 'assets/vec/message_add.svg.vec';
|
||||
static const String vecPdfDownloadSvg = 'assets/vec/pdf_download.svg.vec';
|
||||
static const String vecPictureFrameSvg = 'assets/vec/picture_frame.svg.vec';
|
||||
static const String vecProfileCircleSvg = 'assets/vec/profile_circle.svg.vec';
|
||||
static const String vecProfileUserSvg = 'assets/vec/profile_user.svg.vec';
|
||||
static const String vecReceiptDiscountSvg = 'assets/vec/receipt_discount.svg.vec';
|
||||
static const String vecScanBarcodeSvg = 'assets/vec/scan_barcode.svg.vec';
|
||||
static const String vecScanSvg = 'assets/vec/scan.svg.vec';
|
||||
static const String vecSearchSvg = 'assets/vec/search.svg.vec';
|
||||
static const String vecSecurityTimeSvg = 'assets/vec/security_time.svg.vec';
|
||||
static const String vecSettingSvg = 'assets/vec/setting.svg.vec';
|
||||
static const String vecTagUserSvg = 'assets/vec/tag_user.svg.vec';
|
||||
static const String vecTrashSvg = 'assets/vec/trash.svg.vec';
|
||||
static const String vecUserSquareSvg = 'assets/vec/user_square.svg.vec';
|
||||
static const String vecUserSvg = 'assets/vec/user.svg.vec';
|
||||
|
||||
}
|
||||
@@ -84,6 +84,9 @@ class $AssetsIconsGen {
|
||||
/// File path: assets/icons/picture_frame.svg
|
||||
SvgGenImage get pictureFrame => const SvgGenImage('assets/icons/picture_frame.svg');
|
||||
|
||||
/// File path: assets/icons/place_holder.svg
|
||||
SvgGenImage get placeHolder => const SvgGenImage('assets/icons/place_holder.svg');
|
||||
|
||||
/// File path: assets/icons/profile_circle.svg
|
||||
SvgGenImage get profileCircle => const SvgGenImage('assets/icons/profile_circle.svg');
|
||||
|
||||
@@ -145,6 +148,7 @@ class $AssetsIconsGen {
|
||||
messageAdd,
|
||||
pdfDownload,
|
||||
pictureFrame,
|
||||
placeHolder,
|
||||
profileCircle,
|
||||
profileUser,
|
||||
receiptDiscount,
|
||||
@@ -169,8 +173,11 @@ class $AssetsImagesGen {
|
||||
/// File path: assets/images/outter_splash.webp
|
||||
AssetGenImage get outterSplash => const AssetGenImage('assets/images/outter_splash.webp');
|
||||
|
||||
/// File path: assets/images/place_holder.png
|
||||
AssetGenImage get placeHolder => const AssetGenImage('assets/images/place_holder.png');
|
||||
|
||||
/// List of all assets
|
||||
List<AssetGenImage> get values => [innerSplash, outterSplash];
|
||||
List<AssetGenImage> get values => [innerSplash, outterSplash, placeHolder];
|
||||
}
|
||||
|
||||
class $AssetsVecGen {
|
||||
|
||||
@@ -13,6 +13,7 @@ class RAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||
final TextStyle? titleTextStyle;
|
||||
final VoidCallback? onBackPressed;
|
||||
final List<Widget>? additionalActions;
|
||||
final int? leadingWidth;
|
||||
final Widget? leading;
|
||||
|
||||
const RAppBar({
|
||||
@@ -24,8 +25,9 @@ class RAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||
this.onBackPressed,
|
||||
this.additionalActions,
|
||||
this.leading,
|
||||
this.hasBack = false,
|
||||
this.hasBack = true,
|
||||
this.centerTitle = false,
|
||||
this.leadingWidth
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -41,11 +43,13 @@ class RAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||
titleTextStyle ??
|
||||
AppFonts.yekan16.copyWith(color:Colors.white),
|
||||
title: Text(title),
|
||||
leadingWidth: leadingWidth?.toDouble(),
|
||||
|
||||
leading:leading!=null ? Padding(
|
||||
padding: const EdgeInsets.only(right: 16),
|
||||
child: leading,
|
||||
) : null,
|
||||
titleSpacing: 8,
|
||||
actions: [
|
||||
if (additionalActions != null) ...additionalActions!,
|
||||
if(hasBack)...{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_core/presentation/common/app_color.dart';
|
||||
import 'package:rasadyar_core/presentation/utils/color_utils.dart';
|
||||
|
||||
import '../../common/assets.gen.dart';
|
||||
|
||||
class RFab extends StatefulWidget {
|
||||
@@ -21,10 +22,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallAdd({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.addSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.addSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.greenNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -32,10 +30,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.add({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.addSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.addSvg.svg(width: 40, height: 40),
|
||||
backgroundColor: AppColor.greenNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -46,10 +41,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallEdit({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.addSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.addSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -57,10 +49,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.edit({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.addSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.addSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -71,10 +60,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallDelete({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.trashSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.trashSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.redNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -82,10 +68,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.delete({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.trashSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.trashSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.redNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -96,10 +79,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallAction({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.scanSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.scanSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -107,10 +87,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.action({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.scanSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.scanSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -121,10 +98,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallFilter({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.scanSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.scanSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -132,10 +106,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.filter({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.scanSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.scanSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -146,10 +117,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallDownload({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.downloadSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.downloadSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -157,10 +125,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.download({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.downloadSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.downloadSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -171,10 +136,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallExcel({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.excelDownloadSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.excelDownloadSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.greenDark,
|
||||
key: key,
|
||||
);
|
||||
@@ -182,10 +144,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.excel({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.excelDownloadSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.excelDownloadSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.greenDark,
|
||||
key: key,
|
||||
);
|
||||
@@ -196,10 +155,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.smallBack({required VoidCallback? onPressed, Key? key})
|
||||
: this.small(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.arrowLeftSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.arrowLeftSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
@@ -207,10 +163,7 @@ class RFab extends StatefulWidget {
|
||||
RFab.back({required VoidCallback? onPressed, Key? key})
|
||||
: this(
|
||||
onPressed: onPressed,
|
||||
icon: Assets.vec.arrowLeftSvg.svg(
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
icon: Assets.vec.arrowLeftSvg.svg(width: 20, height: 20),
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
key: key,
|
||||
);
|
||||
|
||||
@@ -32,10 +32,10 @@ class ROutlinedElevatedIcon extends StatefulWidget {
|
||||
Widget? icon;
|
||||
|
||||
@override
|
||||
State<ROutlinedElevatedIcon> createState() => _ROutlinedElevatedStateIcon();
|
||||
State<ROutlinedElevatedIcon> createState() => _ROutlinedElevatedIconState();
|
||||
}
|
||||
|
||||
class _ROutlinedElevatedStateIcon extends State<ROutlinedElevatedIcon> {
|
||||
class _ROutlinedElevatedIconState extends State<ROutlinedElevatedIcon> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return OutlinedButton.icon(
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'draggable_bottom_sheet_controller.dart';
|
||||
|
||||
|
||||
class DraggableBottomSheet2 extends GetView<DraggableBottomSheetController> {
|
||||
final Color? backgroundColor;
|
||||
|
||||
const DraggableBottomSheet2({super.key, this.backgroundColor = Colors.white});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (controller.isVisible.value && !controller.isVisible.value) {
|
||||
controller.show();
|
||||
}
|
||||
});
|
||||
|
||||
return ObxValue((data) {
|
||||
return Stack(
|
||||
children: [
|
||||
// پسزمینه تیره
|
||||
Positioned.fill(
|
||||
child: GestureDetector(
|
||||
onTap: () {},
|
||||
child: Container(color: Colors.black54),
|
||||
),
|
||||
),
|
||||
// محتوای BottomSheet
|
||||
AnimatedPositioned(
|
||||
duration: Duration(milliseconds: 300),
|
||||
curve: Curves.easeOut,
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
child: GestureDetector(
|
||||
onVerticalDragUpdate: (details) {
|
||||
controller.updateHeight(details.primaryDelta);
|
||||
},
|
||||
child: Container(
|
||||
height: 350,
|
||||
decoration: BoxDecoration(
|
||||
color: backgroundColor,
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.black.withValues(alpha: 0.1),
|
||||
blurRadius: 10,
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
padding: EdgeInsets.all(10),
|
||||
child: Icon(Icons.drag_handle),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: controller.items[data.value],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}, controller.currentIndex);
|
||||
}
|
||||
}
|
||||
@@ -129,7 +129,8 @@ import 'draggable_bottom_sheet.dart';
|
||||
class DraggableBottomSheetController extends GetxController {
|
||||
final RxBool isVisible = false.obs;
|
||||
final RxDouble currentHeight = 200.0.obs;
|
||||
|
||||
RxList<Widget> items = <Widget>[].obs;
|
||||
RxInt currentIndex = 0.obs;
|
||||
late double initialHeight;
|
||||
late double minHeight;
|
||||
late double maxHeight;
|
||||
@@ -158,9 +159,5 @@ class DraggableBottomSheetController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
10
packages/core/lib/presentation/widget/map/custom_marker.dart
Normal file
10
packages/core/lib/presentation/widget/map/custom_marker.dart
Normal file
@@ -0,0 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
|
||||
class CustomMarker {
|
||||
final LatLng point;
|
||||
final VoidCallback? onTap;
|
||||
final int? id;
|
||||
|
||||
CustomMarker({ this.id, required this.point, this.onTap});
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/animation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:flutter_map_animations/flutter_map_animations.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
@@ -8,13 +8,16 @@ import 'package:get/get.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:rasadyar_core/utils/logger_utils.dart';
|
||||
|
||||
import 'custom_marker.dart';
|
||||
|
||||
enum ErrorLocationType { serviceDisabled, permissionDenied, none }
|
||||
|
||||
class MapWidgetLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
Rx<LatLng> currentLocation = LatLng(35.824891, 50.948025).obs;
|
||||
String tileType = 'https://tile.openstreetmap.org/{z}/{x}/{y}.png';
|
||||
|
||||
RxList<LatLng> markers = <LatLng>[].obs;
|
||||
|
||||
RxList<CustomMarker> markers = <CustomMarker>[].obs;
|
||||
RxList<LatLng> allMarkers = <LatLng>[].obs;
|
||||
Rx<MapController> mapController = MapController().obs;
|
||||
RxList<ErrorLocationType> errorLocationType = RxList();
|
||||
@@ -61,6 +64,7 @@ class MapWidgetLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
@override
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
_debounceTimer?.cancel();
|
||||
animatedMapController.dispose();
|
||||
mapController.close();
|
||||
}
|
||||
@@ -113,7 +117,9 @@ class MapWidgetLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
final latLng = LatLng(position.latitude, position.longitude);
|
||||
|
||||
currentLocation.value = latLng;
|
||||
markers.add(latLng);
|
||||
markers.add(
|
||||
CustomMarker(id: -1, point: latLng, ),
|
||||
);
|
||||
animatedMapController.animateTo(
|
||||
dest: latLng,
|
||||
zoom: 18,
|
||||
@@ -132,7 +138,7 @@ class MapWidgetLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
'radius': 1000.0,
|
||||
});
|
||||
|
||||
markers.addAll(filtered);
|
||||
// markers.addAll(filtered);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -148,4 +154,17 @@ class MapWidgetLogic extends GetxController with GetTickerProviderStateMixin {
|
||||
.where((marker) => distance(center, marker) <= radiusInMeters)
|
||||
.toList();
|
||||
}
|
||||
|
||||
void addMarker(CustomMarker marker) {
|
||||
markers.add(marker);
|
||||
}
|
||||
|
||||
void setMarkers(List<CustomMarker> newMarkers) {
|
||||
markers.value = newMarkers;
|
||||
}
|
||||
|
||||
void clearMarkers() {
|
||||
markers.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:rasadyar_core/presentation/common/app_color.dart';
|
||||
import 'package:rasadyar_core/presentation/common/app_fonts.dart';
|
||||
import 'package:rasadyar_core/presentation/common/assets.gen.dart';
|
||||
@@ -13,7 +12,16 @@ import 'package:rasadyar_core/presentation/widget/buttons/outline_elevated.dart'
|
||||
import 'logic.dart';
|
||||
|
||||
class MapWidget extends GetView<MapWidgetLogic> {
|
||||
const MapWidget({super.key});
|
||||
final VoidCallback? initOnTap;
|
||||
final Widget? initMarkerWidget;
|
||||
final Widget markerWidget;
|
||||
|
||||
const MapWidget({
|
||||
this.initOnTap,
|
||||
this.initMarkerWidget,
|
||||
required this.markerWidget,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -48,8 +56,7 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
onPressed: () async {
|
||||
var res = await Geolocator.openLocationSettings();
|
||||
if (res) {
|
||||
var service =
|
||||
await controller.locationServiceEnabled();
|
||||
var service = await controller.locationServiceEnabled();
|
||||
if (service) {
|
||||
controller.errorLocationType.remove(
|
||||
ErrorLocationType.serviceDisabled,
|
||||
@@ -59,7 +66,6 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
}
|
||||
},
|
||||
),
|
||||
|
||||
contentPadding: EdgeInsets.all(8),
|
||||
onWillPop: () async {
|
||||
return controller.errorLocationType.isEmpty;
|
||||
@@ -71,9 +77,7 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
Future.microtask(() {
|
||||
Get.defaultDialog(
|
||||
title: 'خطا',
|
||||
content: const Text(
|
||||
' دسترسی به سرویس مکانیابی غیرفعال است',
|
||||
),
|
||||
content: const Text(' دسترسی به سرویس مکانیابی غیرفعال است'),
|
||||
cancel: ROutlinedElevated(
|
||||
text: 'بررسی مجدد',
|
||||
width: 120,
|
||||
@@ -87,9 +91,7 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
textStyle: AppFonts.yekan16,
|
||||
width: 120,
|
||||
onPressed: () async {
|
||||
var res = await controller.checkPermission(
|
||||
request: true,
|
||||
);
|
||||
var res = await controller.checkPermission(request: true);
|
||||
if (res) {
|
||||
controller.errorLocationType.remove(
|
||||
ErrorLocationType.permissionDenied,
|
||||
@@ -110,7 +112,10 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
}
|
||||
return const SizedBox.shrink();
|
||||
}, controller.errorLocationType),
|
||||
_buildMap(), _buildGpsButton(), _buildFilterButton()],
|
||||
_buildMap(),
|
||||
_buildGpsButton(),
|
||||
_buildFilterButton(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -122,16 +127,30 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
initialCenter: currentLocation.value,
|
||||
initialZoom: 18,
|
||||
onPositionChanged: (camera, hasGesture) {
|
||||
controller.debouncedUpdateVisibleMarkers(center: camera.center);
|
||||
if (hasGesture) {
|
||||
controller.debouncedUpdateVisibleMarkers(center: camera.center);
|
||||
}
|
||||
//controller.debouncedUpdateVisibleMarkers(center: camera.center);
|
||||
},
|
||||
),
|
||||
children: [
|
||||
TileLayer(urlTemplate: controller.tileType),
|
||||
ObxValue((markers) {
|
||||
ObxValue((markers) {
|
||||
return MarkerLayer(
|
||||
markers:
|
||||
markers
|
||||
.map((e) => markerWidget(marker: e, onTap: () {}))
|
||||
.map(
|
||||
(e) => Marker(
|
||||
point: e.point,
|
||||
child: GestureDetector(
|
||||
onTap: e.id != -1 ? e.onTap : initOnTap,
|
||||
child:
|
||||
e.id != -1
|
||||
? markerWidget
|
||||
: initMarkerWidget ?? SizedBox.shrink(),
|
||||
),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
}, controller.markers),
|
||||
@@ -171,21 +190,18 @@ class MapWidget extends GetView<MapWidgetLogic> {
|
||||
);
|
||||
}
|
||||
|
||||
Marker markerWidget({required LatLng marker, required VoidCallback onTap}) {
|
||||
/*Marker markerWidget({required LatLng marker, required VoidCallback onTap}) {
|
||||
return Marker(
|
||||
point: marker,
|
||||
child: GestureDetector(
|
||||
onTap: onTap,
|
||||
behavior: HitTestBehavior.opaque,
|
||||
child: SizedBox(
|
||||
width: 36,
|
||||
height: 36,
|
||||
child:Assets.vec.mapMarkerSvg.svg(
|
||||
width: 30,
|
||||
height: 30,
|
||||
)
|
||||
width: 36,
|
||||
height: 36,
|
||||
child: Assets.vec.mapMarkerSvg.svg(width: 30, height: 30),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ export 'buttons/outline_elevated.dart';
|
||||
export 'buttons/outline_elevated_icon.dart';
|
||||
export 'buttons/text_button.dart';
|
||||
export 'draggable_bottom_sheet/draggable_bottom_sheet.dart';
|
||||
export 'draggable_bottom_sheet/draggable_bottom_sheet2.dart';
|
||||
export 'draggable_bottom_sheet/draggable_bottom_sheet_controller.dart';
|
||||
export 'draggable_bottom_sheet/bottom_sheet_manger.dart';
|
||||
export 'inputs/r_input.dart';
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class MapLogic extends GetxController {
|
||||
|
||||
|
||||
var ss = Get.find<DraggableBottomSheetController>();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/material.dart' as mt;
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
import 'package:rasadyar_core/presentation/widget/map/view.dart';
|
||||
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class MapPage extends GetView<MapLogic> {
|
||||
@@ -14,9 +11,20 @@ class MapPage extends GetView<MapLogic> {
|
||||
return Scaffold(
|
||||
body: Stack(
|
||||
children: [
|
||||
MapWidget(),
|
||||
MapWidget(
|
||||
markerWidget: Icon(Icons.pin_drop_rounded),
|
||||
initOnTap: () {
|
||||
|
||||
},
|
||||
initMarkerWidget: Assets.vec.mapMarkerSvg.svg(
|
||||
width: 30,
|
||||
height: 30,
|
||||
),
|
||||
),
|
||||
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
import 'package:rasadyar_livestock/presentation/page/root/logic.dart';
|
||||
|
||||
class RequestTaggingLogic extends GetxController {
|
||||
|
||||
|
||||
final TextEditingController phoneController = TextEditingController();
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
import 'package:rasadyar_livestock/presentation/routes/app_pages.dart';
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
@@ -9,37 +11,98 @@ class RequestTaggingPage extends GetView<RequestTaggingLogic> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Request Tagging'),
|
||||
centerTitle: true,
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.search),
|
||||
onPressed: () {
|
||||
// Implement search functionality
|
||||
},
|
||||
),
|
||||
],
|
||||
backgroundColor: Colors.white,
|
||||
appBar: RAppBar(
|
||||
title: 'درخواست پلاک کوبی',
|
||||
leadingWidth: 40,
|
||||
leading: Assets.vec.messageAddSvg.svg(width: 12, height: 12),
|
||||
),
|
||||
body: Column(
|
||||
children: [
|
||||
const SizedBox(height: 16),
|
||||
|
||||
const SizedBox(height: 16),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
itemCount: 10, // Replace with your data length
|
||||
itemBuilder: (context, index) {
|
||||
return ListTile(
|
||||
title: Text('Request Item $index'),
|
||||
onTap: () {
|
||||
// Handle item tap
|
||||
},
|
||||
);
|
||||
},
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 15),
|
||||
child: Column(
|
||||
children: [
|
||||
RTextField(
|
||||
controller: controller.phoneController,
|
||||
label: 'تلفن دامدار',
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
SizedBox(
|
||||
width: Get.width,
|
||||
height: 356,
|
||||
child: Card(
|
||||
color: Colors.white,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: Get.width,
|
||||
|
||||
decoration: BoxDecoration(
|
||||
color: AppColor.lightGreyNormal,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Center(
|
||||
child: Assets.images.placeHolder.image(
|
||||
height: 150,
|
||||
width: 200,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Container(
|
||||
width: Get.width,
|
||||
height: 40,
|
||||
clipBehavior: Clip.antiAlias,
|
||||
decoration: ShapeDecoration(
|
||||
color: AppColor.blueNormal,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(10.0),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
' تصویر گله',
|
||||
style: AppFonts.yekan14.copyWith(
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
Icon(
|
||||
CupertinoIcons.arrow_up_doc,
|
||||
color: Colors.white,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
Spacer(),
|
||||
|
||||
|
||||
|
||||
RElevated(
|
||||
text: 'ارسال تصویر گله',
|
||||
onPressed: () {
|
||||
Get.toNamed(LiveStockRoutes.tagging);
|
||||
},
|
||||
height: 40,
|
||||
isFullWidth: true,
|
||||
backgroundColor: AppColor.greenNormal,
|
||||
textStyle: AppFonts.yekan16.copyWith(color: Colors.white),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ class RequestsPage extends GetView<RequestsLogic> {
|
||||
itemBuilder: (context, index) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
Get.toNamed(LiveStockRoutes.requestTagging,id: 0);
|
||||
Get.toNamed(LiveStockRoutes.requestTagging);
|
||||
},
|
||||
child: Container(
|
||||
width: Get.width,
|
||||
|
||||
@@ -9,6 +9,7 @@ class RootPage extends GetView<RootLogic> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ObxValue((currentIndex) {
|
||||
|
||||
return PopScope(
|
||||
canPop: false,
|
||||
onPopInvokedWithResult: (didPop, result) {
|
||||
@@ -16,7 +17,6 @@ class RootPage extends GetView<RootLogic> {
|
||||
eLog('Pop invoked with result: $result, didPop: $didPop');
|
||||
navigatorKey?.currentState?.pop();
|
||||
|
||||
|
||||
/*eLog('Pop invoked with result: $result, didPop: $didPop');
|
||||
iLog(Get.currentRoute);
|
||||
iLog(Get.previousRoute);
|
||||
@@ -39,11 +39,11 @@ class RootPage extends GetView<RootLogic> {
|
||||
|
||||
child: Scaffold(
|
||||
body: IndexedStack(
|
||||
children: controller.pages,
|
||||
children: [...controller.pages],
|
||||
index: currentIndex.value,
|
||||
sizing: StackFit.expand,
|
||||
),
|
||||
|
||||
extendBody: true,
|
||||
bottomNavigationBar: BottomNavigation1(
|
||||
items: [
|
||||
BottomNavigation1Item(
|
||||
|
||||
15
packages/livestock/lib/presentation/page/tagging/logic.dart
Normal file
15
packages/livestock/lib/presentation/page/tagging/logic.dart
Normal file
@@ -0,0 +1,15 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class TaggingLogic extends GetxController {
|
||||
@override
|
||||
void onReady() {
|
||||
// TODO: implement onReady
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
// TODO: implement onClose
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
239
packages/livestock/lib/presentation/page/tagging/view.dart
Normal file
239
packages/livestock/lib/presentation/page/tagging/view.dart
Normal file
@@ -0,0 +1,239 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
import 'package:rasadyar_core/presentation/widget/buttons/fab.dart';
|
||||
|
||||
import 'logic.dart';
|
||||
|
||||
class TaggingPage extends GetView<TaggingLogic> {
|
||||
const TaggingPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: RAppBar(
|
||||
title: 'پلاک کوبی',
|
||||
leadingWidth: 40,
|
||||
leading: Assets.vec.messageAddSvg.svg(width: 12, height: 12),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 15),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
height: 40,
|
||||
decoration: BoxDecoration(
|
||||
color: AppColor.greenLightHover,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(color: AppColor.darkGreyLight),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text('آمار ثبت شده : سبک 5 و سنگین 8 راس'),
|
||||
),
|
||||
),
|
||||
SizedBox(width: 4),
|
||||
IconButton(
|
||||
onPressed: () {},
|
||||
style: IconButton.styleFrom(
|
||||
backgroundColor: AppColor.blueNormal,
|
||||
fixedSize: Size(40, 40),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
icon: Assets.vec.editSvg.svg(),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Expanded(
|
||||
child: Card(
|
||||
clipBehavior: Clip.hardEdge,
|
||||
color: Colors.white,
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
GridView.builder(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 20,
|
||||
vertical: 10,
|
||||
),
|
||||
itemCount: 20,
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
crossAxisSpacing: 12,
|
||||
mainAxisSpacing: 8,
|
||||
),
|
||||
itemBuilder: (context, index) {
|
||||
return Container(
|
||||
decoration: ShapeDecoration(
|
||||
color: AppColor.lightGreyLightHover,
|
||||
shape: RoundedRectangleBorder(
|
||||
side: BorderSide(
|
||||
width: 1,
|
||||
color: AppColor.blackLightHover,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Assets.vec.editSvg.svg(
|
||||
width: 16,
|
||||
height: 16,
|
||||
colorFilter: ColorFilter.mode(
|
||||
AppColor.blueNormal,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
),
|
||||
Assets.vec.trashSvg.svg(
|
||||
width: 16,
|
||||
height: 16,
|
||||
colorFilter: ColorFilter.mode(
|
||||
AppColor.error,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Text(
|
||||
'گوسفند ماده',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(
|
||||
color: AppColor.blueNormal,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
Text(
|
||||
'سن : 18 ماه',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan12.copyWith(
|
||||
color: AppColor.darkGreyNormal,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'نوع نژاد',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(
|
||||
color: AppColor.bgDark,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'1212115112512',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(
|
||||
color: AppColor.blueNormal,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'نوع پلاک',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(
|
||||
color: AppColor.bgDark,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
Positioned(
|
||||
bottom: 10,
|
||||
right: 3,
|
||||
child: RFab.add(
|
||||
onPressed: () {
|
||||
Get.bottomSheet(
|
||||
Container(
|
||||
padding: EdgeInsets.all(20),
|
||||
color: Colors.white,
|
||||
height: 300,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
height: 40,
|
||||
width: Get.width,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(
|
||||
width: 1,
|
||||
color: AppColor.darkGreyLight,
|
||||
),
|
||||
),
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
|
||||
},
|
||||
child: Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'گونه دام',
|
||||
style: AppFonts.yekan14,
|
||||
),
|
||||
Icon(CupertinoIcons.chevron_up),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
/* DropdownMenu(
|
||||
width: Get.width,
|
||||
|
||||
dropdownMenuEntries: [
|
||||
DropdownMenuEntry(
|
||||
value: 'گوسفند',
|
||||
label: 'گوسفند',
|
||||
),
|
||||
DropdownMenuEntry(
|
||||
value: 'بز',
|
||||
label: 'بز',
|
||||
),
|
||||
DropdownMenuEntry(
|
||||
value: 'گوساله',
|
||||
label: 'گوساله',
|
||||
),
|
||||
],
|
||||
),*/
|
||||
],
|
||||
),
|
||||
),
|
||||
isScrollControlled: true,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
SizedBox(height: 10),
|
||||
|
||||
RElevated(
|
||||
text: 'ثبت نهایی و ارسال به اتحادیه',
|
||||
textStyle: AppFonts.yekan18,
|
||||
height: 40,
|
||||
backgroundColor: AppColor.greenNormal,
|
||||
onPressed: () {},
|
||||
isFullWidth: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,8 @@ import 'package:rasadyar_livestock/presentation/page/request_tagging/view.dart';
|
||||
import 'package:rasadyar_livestock/presentation/page/requests/logic.dart';
|
||||
import 'package:rasadyar_livestock/presentation/page/root/logic.dart';
|
||||
import 'package:rasadyar_livestock/presentation/page/root/view.dart';
|
||||
import 'package:rasadyar_livestock/presentation/page/tagging/logic.dart';
|
||||
import 'package:rasadyar_livestock/presentation/page/tagging/view.dart';
|
||||
|
||||
part 'app_routes.dart';
|
||||
|
||||
@@ -26,18 +28,35 @@ sealed class LiveStockPages {
|
||||
Get.lazyPut(() => ProfileLogic());
|
||||
Get.lazyPut(() => ProfileLogic());
|
||||
Get.lazyPut(() => MapWidgetLogic());
|
||||
Get.lazyPut(() => DraggableBottomSheetController());
|
||||
}),
|
||||
children: [
|
||||
GetPage(
|
||||
/*GetPage(
|
||||
name: LiveStockRoutes.requestTagging,
|
||||
page: () => RequestTaggingPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
binding: BindingsBuilder(() {
|
||||
Get.lazyPut(() => RequestTaggingLogic());
|
||||
}),
|
||||
),
|
||||
]
|
||||
),*/
|
||||
],
|
||||
),
|
||||
|
||||
GetPage(
|
||||
name: LiveStockRoutes.requestTagging,
|
||||
page: () => RequestTaggingPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
binding: BindingsBuilder(() {
|
||||
Get.lazyPut(() => RequestTaggingLogic());
|
||||
}),
|
||||
),
|
||||
GetPage(
|
||||
name: LiveStockRoutes.tagging,
|
||||
page: () => TaggingPage(),
|
||||
middlewares: [AuthMiddleware()],
|
||||
binding: BindingsBuilder(() {
|
||||
Get.lazyPut(() => TaggingLogic());
|
||||
}),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -6,5 +6,8 @@ sealed class LiveStockRoutes {
|
||||
static const init = '/liveStock';
|
||||
static const requests = '/requests';
|
||||
static const profile = '/profile';
|
||||
static const requestTagging = '$init/tagging';
|
||||
|
||||
//static const requestTagging = '$init/tagging';
|
||||
static const requestTagging = '$requests/tagging';
|
||||
static const tagging = '/tagging';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user