apk provided to FM for asset image training

ui_ux_rollout_merge
Sikander Saleem 3 weeks ago
parent ace00bfa85
commit dbc53d62f8

@ -3,13 +3,13 @@ class URLs {
static const String appReleaseBuildNumber = "44"; static const String appReleaseBuildNumber = "44";
// 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
static const host1 = "https://atomsmuat.hmg.com"; // local UAT url // static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
static final String _baseUrl = "$_host/mobile"; // host local UAT // static final String _baseUrl = "$_host/mobile"; // host local UAT
// static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis // static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis
// static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM
// static final String _baseUrl = "$_host/v4/mobile"; // v4 for Demo module // static final String _baseUrl = "$_host/v4/mobile"; // v4 for Demo module
// static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation // static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation
// static final String _baseUrl = "$_host/v6/mobile"; // for asset delivery module // static final String _baseUrl = "$_host/v6/mobile"; // for asset delivery module

@ -20,6 +20,7 @@ import 'package:test_sa/modules/cm_module/views/forms/asset_retired/asset_retire
import 'package:test_sa/modules/cm_module/views/forms/cost/cost_detail_form_screen.dart'; import 'package:test_sa/modules/cm_module/views/forms/cost/cost_detail_form_screen.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/equipment/asset_detail_page.dart';
import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -135,7 +136,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
// spacing: 8, // spacing: 8,
runSpacing: 8, runSpacing: 8,
children: [ children: [
if (Provider.of<SettingProvider>(context, listen: false).showPriority&&workOrder.priority!=null) ...[ if (Provider.of<SettingProvider>(context, listen: false).showPriority && workOrder.priority != null) ...[
StatusLabel( StatusLabel(
label: workOrder.priority?.name, label: workOrder.priority?.name,
id: workOrder.priority?.value, id: workOrder.priority?.value,
@ -190,10 +191,20 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
], ],
), ),
8.height, 8.height,
Text( Row(
spacing: 4,
children: [
Flexible(
child: Text(
context.translation.assetInformation, context.translation.assetInformation,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ),
),
const Icon(Icons.open_in_new_rounded, color: AppColor.primary10, size: 21).onPress(() {
Navigator.of(context).pushNamed(AssetDetailPage.id, arguments: workOrder.asset!.id);
})
],
),
8.height, 8.height,
Text( Text(
'${context.translation.assetName}: ${workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach}', '${context.translation.assetName}: ${workOrder.assetNdModel!.name?.cleanupWhitespace?.capitalizeFirstOfEach}',

@ -9,6 +9,8 @@ class UploadingDialog extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Center( return Center(
child: Material(
borderRadius: BorderRadius.circular(20.0),
child: Container( child: Container(
height: 150.toScreenWidth, height: 150.toScreenWidth,
width: 200.toScreenWidth, width: 200.toScreenWidth,
@ -31,6 +33,7 @@ class UploadingDialog extends StatelessWidget {
], ],
), ),
), ),
),
); );
} }
} }

@ -7,6 +7,7 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset_by_id_model.dart'; import 'package:test_sa/models/device/asset_by_id_model.dart';
import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/generic_attachment_model.dart';
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
@ -168,7 +169,7 @@ class _AssetDetailPageState extends State<AssetDetailPage> {
context: context, context: context,
child: AppFilledButton( child: AppFilledButton(
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
label: "Upload Images", label: "Upload Images (AI Training)",
onPressed: _upload, onPressed: _upload,
), ),
), ),

@ -10,6 +10,7 @@ import 'package:test_sa/modules/cm_module/views/components/action_button/footer_
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/dialogs/dialog.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
class AssetImageUploadPage extends StatefulWidget { class AssetImageUploadPage extends StatefulWidget {
@ -30,6 +31,7 @@ class _AssetImageUploadPageState extends State<AssetImageUploadPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// attachments = widget.attachments;
} }
@override @override
@ -47,10 +49,11 @@ class _AssetImageUploadPageState extends State<AssetImageUploadPage> {
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
children: [ children: [
AttachmentPicker( AttachmentPicker(
label: "Upload Images", label: "Import",
attachment: attachments, attachment: attachments,
buttonColor: AppColor.black10, buttonColor: AppColor.black10,
onlyImages: true, onlyImages: true,
pickMultiple: true,
showAsListView: true, showAsListView: true,
buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120),
onChange: (_attachments) { onChange: (_attachments) {
@ -64,14 +67,23 @@ class _AssetImageUploadPageState extends State<AssetImageUploadPage> {
context: context, context: context,
child: AppFilledButton( child: AppFilledButton(
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
disableButton: attachments.length < 4,
label: "Upload Images", label: "Upload Images",
onPressed: () async { onPressed: () async {
bool result = await showDialog(
context: context,
builder: (_) => AAlertDialog(
title: context.translation.confirm,
content: "For more enhancement, these images will be used to train AI model.\n\nAre you sure you are uploading clear and high quality images?"),
);
if (result) {
Utils.showUploadingDialog(context); Utils.showUploadingDialog(context);
bool result = await Provider.of<AssetProvider>(context, listen: false).uploadAssetImages(widget.assetId, attachments); result = await Provider.of<AssetProvider>(context, listen: false).uploadAssetImages(widget.assetId, attachments);
Utils.hideLoading(context); Utils.hideLoading(context);
if (result) { if (result) {
Navigator.pop(context, result); Navigator.pop(context, result);
} }
}
}, },
), ),
), ),

@ -322,6 +322,7 @@ class AttachmentPicker extends StatefulWidget {
final Function(List<GenericAttachmentModel>)? onChange; final Function(List<GenericAttachmentModel>)? onChange;
final bool showAsGrid; final bool showAsGrid;
final bool showAsListView; final bool showAsListView;
final bool pickMultiple;
Lookup? documentType; Lookup? documentType;
AttachmentPicker( AttachmentPicker(
@ -337,6 +338,7 @@ class AttachmentPicker extends StatefulWidget {
this.documentType, this.documentType,
this.showAsGrid = false, this.showAsGrid = false,
this.showAsListView = false, this.showAsListView = false,
this.pickMultiple = false,
this.buttonColor}) this.buttonColor})
: super(key: key); : super(key: key);
@ -348,7 +350,8 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start,spacing: 12, crossAxisAlignment: CrossAxisAlignment.start,
spacing: 12,
children: [ children: [
AppDashedButton( AppDashedButton(
title: widget.label, title: widget.label,
@ -465,16 +468,21 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
).paddingAll(21), ).paddingAll(21),
)) as ImageSource; )) as ImageSource;
final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 800, maxHeight: 800); // if(widget.pickMultiple) {
final pickedFile12 = await ImagePicker().pickMultiImage(imageQuality: 70, maxWidth: 800, maxHeight: 800);
if (pickedFile != null) { // // }
File fileImage = File(pickedFile.path); //
widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path, documentTypeId: widget.documentType)); // final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 800, maxHeight: 800);
if (widget.onChange != null) { //
widget.onChange!(widget.attachment); // if (pickedFile != null) {
} // File fileImage = File(pickedFile.path);
setState(() {}); // widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path, documentTypeId: widget.documentType));
} // if (widget.onChange != null) {
// widget.onChange!(widget.attachment);
// }
// setState(() {});
// }
} }
Widget gridItem(IconData iconData, String title) { Widget gridItem(IconData iconData, String title) {
@ -632,6 +640,20 @@ class _AttachmentPickerState extends State<AttachmentPicker> {
// ); // );
if (source == null) return; if (source == null) return;
if (widget.pickMultiple && source == ImageSource.gallery) {
final pickedFiles = await ImagePicker().pickMultiImage(imageQuality: 70, maxWidth: 800, maxHeight: 800);
if (pickedFiles.isNotEmpty) {
pickedFiles.forEach((pickedFile) {
File fileImage = File(pickedFile.path);
widget.attachment.add(GenericAttachmentModel(id: 0, name: fileImage.path, documentTypeId: widget.documentType));
});
if (widget.onChange != null) {
widget.onChange!(widget.attachment);
}
setState(() {});
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) {

Loading…
Cancel
Save