1.3.3+22 uploaded

design_3.0_dark_mode v1.3.3+22
Sikander Saleem 4 months ago
parent 9b9ce8c4b2
commit 4c92525589

@ -1,7 +1,7 @@
class URLs { class URLs {
URLs._(); URLs._();
static const String appReleaseBuildNumber = "18"; static const String appReleaseBuildNumber = "19";
static const host1 = "https://atomsm.hmg.com"; // production url static const host1 = "https://atomsm.hmg.com"; // production url
// static const host1 = "https://atomsmdev.hmg.com"; // local DEV url // static const host1 = "https://atomsmdev.hmg.com"; // local DEV url

@ -59,18 +59,18 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
super.initState(); super.initState();
_partsProvider = Provider.of<PartsProvider>(context, listen: false); _partsProvider = Provider.of<PartsProvider>(context, listen: false);
_requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false); _requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
// _requestDetailProvider?.sparePartHelperModel = SparePartHelperModel( _requestDetailProvider?.sparePartHelperModel = SparePartHelperModel(
// id: _requestDetailProvider?.sparePartHelperModel?.id ?? 0, id: _requestDetailProvider?.sparePartHelperModel?.id ?? 0,
// workOrderId: _requestDetailProvider?.sparePartHelperModel?.workOrderId ?? _requestDetailProvider?.currentWorkOrder?.data?.requestId, workOrderId: _requestDetailProvider?.sparePartHelperModel?.workOrderId ?? _requestDetailProvider?.currentWorkOrder?.data?.requestId,
// sparePartAttachments: _requestDetailProvider?.sparePartHelperModel?.sparePartAttachments ?? [], sparePartAttachments: _requestDetailProvider?.sparePartHelperModel?.sparePartAttachments ?? [],
// sparePart: _requestDetailProvider?.sparePartHelperModel?.sparePart ?? SparePart(), sparePart: _requestDetailProvider?.sparePartHelperModel?.sparePart ?? SparePart(),
// quantity: _requestDetailProvider?.sparePartHelperModel?.quantity, quantity: _requestDetailProvider?.sparePartHelperModel?.quantity,
// installQty: _requestDetailProvider?.sparePartHelperModel?.installQty, installQty: _requestDetailProvider?.sparePartHelperModel?.installQty,
// returnQty: _requestDetailProvider?.sparePartHelperModel?.returnQty, returnQty: _requestDetailProvider?.sparePartHelperModel?.returnQty,
// activityStatusId: _requestDetailProvider?.sparePartHelperModel?.activityStatusId ?? statusLookup.id, activityStatusId: _requestDetailProvider?.sparePartHelperModel?.activityStatusId ?? statusLookup.id,
// activityStatus: _requestDetailProvider?.sparePartHelperModel?.activityStatus ?? statusLookup, activityStatus: _requestDetailProvider?.sparePartHelperModel?.activityStatus ?? statusLookup,
// comment: _requestDetailProvider?.sparePartHelperModel?.comment ?? '', comment: _requestDetailProvider?.sparePartHelperModel?.comment ?? '',
// ); );
_partQtyController.text = _requestDetailProvider?.sparePartHelperModel?.quantity != null ? _requestDetailProvider!.sparePartHelperModel!.quantity!.round().toString() : ''; _partQtyController.text = _requestDetailProvider?.sparePartHelperModel?.quantity != null ? _requestDetailProvider!.sparePartHelperModel!.quantity!.round().toString() : '';
_installQtyController.text = _requestDetailProvider?.sparePartHelperModel?.installQty != null ? _requestDetailProvider!.sparePartHelperModel!.installQty!.round().toString() : ''; _installQtyController.text = _requestDetailProvider?.sparePartHelperModel?.installQty != null ? _requestDetailProvider!.sparePartHelperModel!.installQty!.round().toString() : '';
_returnQtyController.text = _requestDetailProvider?.sparePartHelperModel?.returnQty != null ? _requestDetailProvider!.sparePartHelperModel!.returnQty!.round().toString() : ''; _returnQtyController.text = _requestDetailProvider?.sparePartHelperModel?.returnQty != null ? _requestDetailProvider!.sparePartHelperModel!.returnQty!.round().toString() : '';

@ -1,7 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
@ -18,7 +17,8 @@ class MultiFilesPicker extends StatefulWidget {
final String label; final String label;
final bool error; final bool error;
final List<File> files; final List<File> files;
final List<AttachmentModel> attachment ; final List<AttachmentModel> attachment;
final bool enabled, onlyImages; final bool enabled, onlyImages;
double? buttonHeight; double? buttonHeight;
Widget? buttonIcon; Widget? buttonIcon;
@ -51,7 +51,7 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if(widget.enabled)...[ if (widget.enabled) ...[
AppDashedButton( AppDashedButton(
title: widget.label, title: widget.label,
height: widget.buttonHeight, height: widget.buttonHeight,
@ -60,8 +60,8 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
onPressed: (widget.enabled == false) onPressed: (widget.enabled == false)
? () {} ? () {}
: widget.showAsGrid : widget.showAsGrid
? showFileSourceSheet ? showFileSourceSheet
: onFilePicker), : onFilePicker),
16.height, 16.height,
], ],
if (widget.files.isNotEmpty) if (widget.files.isNotEmpty)
@ -101,6 +101,9 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
if (result != null) { if (result != null) {
for (var path in result.paths) { for (var path in result.paths) {
widget.files.add(File(path!)); widget.files.add(File(path!));
if (widget.onChange != null) {
widget.onChange!(widget.files);
}
} }
setState(() {}); setState(() {});
} }
@ -112,7 +115,7 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
return; return;
} }
ImageSource source = (await showModalBottomSheet( ImageSource? source = (await showModalBottomSheet(
context: context, context: context,
shape: const RoundedRectangleBorder( shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
@ -143,8 +146,8 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
12.height, 12.height,
], ],
).paddingAll(21), ).paddingAll(21),
)) as ImageSource; )) as ImageSource?;
if (source == null) return;
final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 800, maxHeight: 800); final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 800, maxHeight: 800);
if (pickedFile != null) { if (pickedFile != null) {
@ -154,7 +157,7 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
widget.onChange!(widget.files); widget.onChange!(widget.files);
} }
setState(() {}); setState(() {});
} }
} }
Widget gridItem(IconData iconData, String title) { Widget gridItem(IconData iconData, String title) {
@ -187,28 +190,26 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
ImageSource? source = await showModalBottomSheet<ImageSource>( ImageSource? source = await showModalBottomSheet<ImageSource>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
Widget listCard({required String icon, required String label, required VoidCallback onTap}){ Widget listCard({required String icon, required String label, required VoidCallback onTap}) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
constraints: BoxConstraints(minWidth: 111.toScreenWidth,minHeight: 111.toScreenHeight), constraints: BoxConstraints(minWidth: 111.toScreenWidth, minHeight: 111.toScreenHeight),
padding: EdgeInsets.symmetric(horizontal: 12.toScreenWidth,vertical: 12.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 12.toScreenWidth, vertical: 12.toScreenHeight),
decoration: BoxDecoration( decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), border: Border.all(width: 1, color: AppColor.white70)),
borderRadius: BorderRadius.circular(12),
border: Border.all(width: 1,color:AppColor.white70)
),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
icon.toSvgAsset(), icon.toSvgAsset(),
24.height, 24.height,
label.bodyText2(context).custom(color: AppColor.black20), label.bodyText2(context).custom(color: AppColor.black20),
], ],
), ),
), ),
); );
} }
return Container( return Container(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Row( child: Row(
@ -216,7 +217,7 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
children: <Widget>[ children: <Widget>[
listCard( listCard(
icon: 'camera_icon', icon: 'camera_icon',
label: '${context.translation.open}\n${context.translation.camera}', label: '${context.translation.open}\n${context.translation.camera}',
onTap: () { onTap: () {
Navigator.of(context).pop(ImageSource.camera); Navigator.of(context).pop(ImageSource.camera);
}, },
@ -230,7 +231,7 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
), ),
listCard( listCard(
icon: 'file_icon', icon: 'file_icon',
label: '${context.translation.open}\n${context.translation.files}', label: '${context.translation.open}\n${context.translation.files}',
onTap: () async { onTap: () async {
await fromFilePicker(); await fromFilePicker();
Navigator.pop(context); Navigator.pop(context);
@ -286,36 +287,32 @@ class _MultiFilesPickerState extends State<MultiFilesPicker> {
} }
} }
class AttachmentModel {
int id = 0;
File? file;
AttachmentModel(this.id, this.file);
class AttachmentModel {
int id =0;
File ? file;
AttachmentModel(this.id,this.file);
factory AttachmentModel.fromJson(Map<String, dynamic> json) { factory AttachmentModel.fromJson(Map<String, dynamic> json) {
return AttachmentModel( return AttachmentModel(
json['id'] ?? 0, json['id'] ?? 0,
json['file'] != null ? File(json['file']) : null, json['file'] != null ? File(json['file']) : null,
); );
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
'id': id, 'id': id,
'file': file?.path, 'file': file?.path,
}; };
} }
} }
class AttachmentPicker extends StatefulWidget { class AttachmentPicker extends StatefulWidget {
final String label; final String label;
final bool error; final bool error;
final List<AttachmentModel> attachment ; final List<AttachmentModel> attachment;
final bool enabled, onlyImages; final bool enabled, onlyImages;
double? buttonHeight; double? buttonHeight;
Widget? buttonIcon; Widget? buttonIcon;
@ -325,16 +322,16 @@ class AttachmentPicker extends StatefulWidget {
AttachmentPicker( AttachmentPicker(
{Key? key, {Key? key,
this.attachment = const <AttachmentModel>[], this.attachment = const <AttachmentModel>[],
required this.label, required this.label,
this.error = false, this.error = false,
this.buttonHeight, this.buttonHeight,
this.buttonIcon, this.buttonIcon,
this.enabled = true, this.enabled = true,
this.onlyImages = false, this.onlyImages = false,
this.onChange, this.onChange,
this.showAsGrid = false, this.showAsGrid = false,
this.buttonColor}) this.buttonColor})
: super(key: key); : super(key: key);
@override @override
@ -355,15 +352,15 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
onPressed: (widget.enabled == false) onPressed: (widget.enabled == false)
? () {} ? () {}
: widget.showAsGrid : widget.showAsGrid
? showFileSourceSheet ? showFileSourceSheet
: onFilePicker), : onFilePicker),
16.height, 16.height,
if (widget.attachment.isNotEmpty) if (widget.attachment.isNotEmpty)
Wrap( Wrap(
spacing: 8.toScreenWidth, spacing: 8.toScreenWidth,
children: List.generate( children: List.generate(
widget.attachment.length, widget.attachment.length,
(index) { (index) {
File image = widget.attachment[index].file!; File image = widget.attachment[index].file!;
return MultiFilesPickerItem( return MultiFilesPickerItem(
file: image, file: image,
@ -481,16 +478,13 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
ImageSource? source = await showModalBottomSheet<ImageSource>( ImageSource? source = await showModalBottomSheet<ImageSource>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
Widget listCard({required String icon, required String label, required VoidCallback onTap}){ Widget listCard({required String icon, required String label, required VoidCallback onTap}) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
constraints: BoxConstraints(minWidth: 111.toScreenWidth,minHeight: 111.toScreenHeight), constraints: BoxConstraints(minWidth: 111.toScreenWidth, minHeight: 111.toScreenHeight),
padding: EdgeInsets.symmetric(horizontal: 12.toScreenWidth,vertical: 12.toScreenHeight), padding: EdgeInsets.symmetric(horizontal: 12.toScreenWidth, vertical: 12.toScreenHeight),
decoration: BoxDecoration( decoration: BoxDecoration(borderRadius: BorderRadius.circular(12), border: Border.all(width: 1, color: AppColor.white70)),
borderRadius: BorderRadius.circular(12),
border: Border.all(width: 1,color:AppColor.white70)
),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -503,6 +497,7 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
), ),
); );
} }
return Container( return Container(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Row( child: Row(
@ -510,7 +505,7 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
children: <Widget>[ children: <Widget>[
listCard( listCard(
icon: 'camera_icon', icon: 'camera_icon',
label: '${context.translation.open}\n${context.translation.camera}', label: '${context.translation.open}\n${context.translation.camera}',
onTap: () { onTap: () {
Navigator.of(context).pop(ImageSource.camera); Navigator.of(context).pop(ImageSource.camera);
}, },
@ -524,7 +519,7 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
), ),
listCard( listCard(
icon: 'file_icon', icon: 'file_icon',
label: '${context.translation.open}\n${context.translation.files}', label: '${context.translation.open}\n${context.translation.files}',
onTap: () async { onTap: () async {
await fromFilePicker(); await fromFilePicker();
Navigator.pop(context); Navigator.pop(context);
@ -572,7 +567,7 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
widget.onChange!(widget.attachment); widget.onChange!(widget.attachment);
} }
setState(() {}); setState(() {});
} }
setState(() {}); setState(() {});
} }

@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at # Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.3.2+21 version: 1.3.3+22
environment: environment:
sdk: ">=3.5.0 <4.0.0" sdk: ">=3.5.0 <4.0.0"

Loading…
Cancel
Save