From d63a18226a5625184e0bfaf85b344b3955d70281 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 31 Aug 2023 17:50:41 +0300 Subject: [PATCH] ppm attachments fix --- lib/models/pantry/pentry.dart | 2 +- lib/models/visits/visit.dart | 5 +- .../pages/user/visits/visit_details.dart | 78 ++++++++++--------- lib/views/widgets/images/files_list.dart | 16 +++- 4 files changed, 58 insertions(+), 43 deletions(-) diff --git a/lib/models/pantry/pentry.dart b/lib/models/pantry/pentry.dart index 68fd85dd..57f871c1 100644 --- a/lib/models/pantry/pentry.dart +++ b/lib/models/pantry/pentry.dart @@ -120,7 +120,7 @@ class Pentry { List files = []; if (map["vAttachments"] != null) if (map["vAttachments"] is List) { List list = map["vAttachments"]; - files = list.map((e) => URLs.getFileUrl(e["name"])).toList(); + files = list.map((e) => URLs.getFileUrl(e["attachmentName"])).toList(); } List ppmCheckLists = []; if (map['vChecklists'] != null) { diff --git a/lib/models/visits/visit.dart b/lib/models/visits/visit.dart index 9d8ad663..994df35e 100644 --- a/lib/models/visits/visit.dart +++ b/lib/models/visits/visit.dart @@ -1,3 +1,4 @@ +import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/pentry.dart'; @@ -50,7 +51,9 @@ class Visit { List images = []; if (parsedJson["vAttachments"] is List) { List list = parsedJson["vAttachments"]; - images = list.map((e) => e["attachmentURL"].toString()).toList(); + images = list.map((e) { + return URLs.getFileUrl(e["attachmentURL"].toString()); + }).toList(); } return Visit( id: parsedJson["id"], diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index ddc88782..9d60fcc6 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -8,6 +9,7 @@ import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; +import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/images/images_list.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; @@ -21,6 +23,7 @@ class VisitDetailsPage extends StatelessWidget { final Visit visit; const VisitDetailsPage({Key key, this.visit}) : super(key: key); + @override Widget build(BuildContext context) { Subtitle subtitle = AppLocalization.of(context).subtitle; @@ -70,44 +73,45 @@ class VisitDetailsPage extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 16), children: [ const SizedBox(height: 8), - MaterialButton( - padding: EdgeInsets.zero, - onPressed: () { - if ((visit.images?.isNotEmpty ?? false) && (visit.images?.first?.isNotEmpty ?? false)) { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => Scaffold( - body: InteractiveViewer( - child: Center( - child: ImageLoader( - url: visit.images.first, - boxFit: BoxFit.contain, - ), - ), - ), - ), - ), - ); - } - }, - child: SizedBox( - height: 140 * AppStyle.getScaleFactor(context), - width: MediaQuery.of(context).size.width, - child: ImageLoader( - url: visit.images.isEmpty ? " " : visit.images.first, - boxFit: BoxFit.cover, + // MaterialButton( + // padding: EdgeInsets.zero, + // onPressed: () { + // if ((visit.images?.isNotEmpty ?? false) && (visit.images?.first?.isNotEmpty ?? false)) { + // Navigator.of(context).push( + // MaterialPageRoute( + // builder: (_) => Scaffold( + // body: InteractiveViewer( + // child: Center( + // child: ImageLoader( + // url: visit.images.first, + // boxFit: BoxFit.contain, + // ), + // ), + // ), + // ), + // ), + // ); + // } + // }, + // child: SizedBox( + // height: 140 * AppStyle.getScaleFactor(context), + // width: MediaQuery.of(context).size.width, + // child: ImageLoader( + // url: visit.images.isEmpty ? " " : visit.images.first, + // boxFit: BoxFit.cover, + // ), + // ), + // ), + // const SizedBox( + // height: 8, + // ), + if (visit?.images?.isNotEmpty ?? false) + SizedBox( + height: 60 * AppStyle.getScaleFactor(context), + child: FilesList( + images: visit.images, ), - ), - ), - const SizedBox( - height: 8, - ), - SizedBox( - height: 60 * AppStyle.getScaleFactor(context), - child: ImagesList( - images: visit.images, - ), - ), + ).paddingOnly(top: 4, bottom: 4), const SizedBox( height: 8, ), diff --git a/lib/views/widgets/images/files_list.dart b/lib/views/widgets/images/files_list.dart index 6cfd8a85..d7f21dff 100644 --- a/lib/views/widgets/images/files_list.dart +++ b/lib/views/widgets/images/files_list.dart @@ -21,12 +21,16 @@ class FilesList extends StatelessWidget { @override Widget build(BuildContext context) { + return ListView.separated( padding: padding ?? EdgeInsets.symmetric(horizontal: 32 * AppStyle.getScaleFactor(context)), scrollDirection: Axis.horizontal, - itemCount: images.length, + itemCount: images?.length ?? 0, separatorBuilder: (context, itemIndex) => 8.width, itemBuilder: (context, itemIndex) { + if (images[itemIndex] == null || !images[itemIndex].contains(".")) { + return Text("Bad\nFile"); + } var isImage = images[itemIndex].split(".").last.toLowerCase() == "png" || images[itemIndex].split(".").last.toLowerCase() == "jpg" || images[itemIndex].split(".").last.toLowerCase() == "jpeg"; var isPdf = images[itemIndex].split(".").last.toLowerCase() == "pdf"; @@ -59,9 +63,13 @@ class FilesList extends StatelessWidget { } else if (_isLocalUrl(images[itemIndex])) { OpenFile.open(images[itemIndex]); } else { - if (!await launchUrl(Uri.parse(images[itemIndex]), mode: LaunchMode.externalApplication)) { - Fluttertoast.showToast(msg: "UnExpected Error with file."); - throw Exception('Could not launch '); + try { + if (!await launchUrl(Uri.parse(images[itemIndex]), mode: LaunchMode.externalApplication)) { + Fluttertoast.showToast(msg: "UnExpected Error with file."); + throw Exception('Could not launch '); + } + } catch (ex) { + Fluttertoast.showToast(msg: "No Viewer found."); } } });