From 164295c3e2183426bb6c7c77a421e6ff75f17faf Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 11 Apr 2023 22:38:57 +1000 Subject: [PATCH] Code Cleanup (#312) * Open email and telephone links for company * Cleanup imports --- ios/Runner/Info.plist | 42 ++++++++++++++++++++----------- lib/helpers.dart | 21 ++++++++++++++-- lib/inventree/bom.dart | 1 - lib/inventree/model.dart | 7 +++--- lib/inventree/part.dart | 7 +++--- lib/inventree/purchase_order.dart | 2 -- lib/inventree/sentry.dart | 2 +- lib/inventree/stock.dart | 11 ++++---- lib/settings/release.dart | 14 +++-------- lib/widget/company_detail.dart | 23 ++++++++--------- 10 files changed, 74 insertions(+), 56 deletions(-) diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index e3962ae9..edb4d158 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -12,22 +12,31 @@ 6.0 CFBundleLocalizations - de - el + cs-CZ + da-DK + de-DE + el-GR en - es - fr - he - it - ja - ko - nl - no - pl - ru - sv - tr - vi + es-ES + es-MX + fa-IR + fr-FR + he-IL + hu-HU + id-ID + it-IT + ja-JP + ko-KR + nl-NL + no-NO + pl-PL + pt-BR + pt-PT + ru-RU + sv-SE + th-TH + tr-TR + vi-VN zh-CN CFBundleName @@ -69,7 +78,10 @@ LSApplicationQueriesSchemes + http https + mailto + tel CADisableMinimumFrameDurationOnPhone diff --git a/lib/helpers.dart b/lib/helpers.dart index 3cb905e7..404e6ea1 100644 --- a/lib/helpers.dart +++ b/lib/helpers.dart @@ -9,9 +9,13 @@ import "dart:io"; import "package:currency_formatter/currency_formatter.dart"; - -import "package:audioplayers/audioplayers.dart"; import "package:one_context/one_context.dart"; +import "package:url_launcher/url_launcher.dart"; +import "package:audioplayers/audioplayers.dart"; + +import "package:inventree/l10.dart"; +import "package:inventree/widget/snacks.dart"; + List debug_messages = []; @@ -80,6 +84,19 @@ Future playAudioFile(String path) async { } +// Open an external URL +Future openLink(String url) async { + + final link = Uri.parse(url); + + try { + await launchUrl(link); + } catch (e) { + showSnackIcon(L10().error, success: false); + } +} + + /* * Helper function for rendering a money / currency object as a String */ diff --git a/lib/inventree/bom.dart b/lib/inventree/bom.dart index 55217864..ec326fef 100644 --- a/lib/inventree/bom.dart +++ b/lib/inventree/bom.dart @@ -1,5 +1,4 @@ - import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/part.dart"; diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 33d5e477..8427b58c 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -2,17 +2,16 @@ import "dart:async"; import "dart:io"; import "package:font_awesome_flutter/font_awesome_flutter.dart"; -import "package:inventree/api.dart"; import "package:flutter/material.dart"; -import "package:inventree/inventree/sentry.dart"; -import "package:inventree/widget/dialogs.dart"; import "package:url_launcher/url_launcher.dart"; - import "package:path/path.dart" as path; +import "package:inventree/api.dart"; import "package:inventree/api_form.dart"; import "package:inventree/fa_icon_mapping.dart"; import "package:inventree/l10.dart"; +import "package:inventree/inventree/sentry.dart"; +import "package:inventree/widget/dialogs.dart"; // Paginated response object diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index 762ba9d5..339382b2 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -1,12 +1,13 @@ import "dart:io"; +import "package:flutter/material.dart"; + import "package:inventree/api.dart"; import "package:inventree/helpers.dart"; -import "package:inventree/inventree/stock.dart"; -import "package:inventree/inventree/company.dart"; -import "package:flutter/material.dart"; import "package:inventree/l10.dart"; +import "package:inventree/inventree/stock.dart"; +import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/model.dart"; diff --git a/lib/inventree/purchase_order.dart b/lib/inventree/purchase_order.dart index 23f5819b..2ee14890 100644 --- a/lib/inventree/purchase_order.dart +++ b/lib/inventree/purchase_order.dart @@ -1,9 +1,7 @@ import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/part.dart"; - import "package:inventree/inventree/model.dart"; -// TODO: In the future, status codes should be retrieved from the server const int PO_STATUS_PENDING = 10; const int PO_STATUS_PLACED = 20; const int PO_STATUS_COMPLETE = 30; diff --git a/lib/inventree/sentry.dart b/lib/inventree/sentry.dart index de247338..d8becd8c 100644 --- a/lib/inventree/sentry.dart +++ b/lib/inventree/sentry.dart @@ -1,11 +1,11 @@ import "dart:io"; import "package:device_info_plus/device_info_plus.dart"; -import "package:inventree/preferences.dart"; import "package:package_info_plus/package_info_plus.dart"; import "package:sentry_flutter/sentry_flutter.dart"; import "package:inventree/api.dart"; +import "package:inventree/preferences.dart"; Future> getDeviceInfo() async { diff --git a/lib/inventree/stock.dart b/lib/inventree/stock.dart index f6e8f3b9..a52cc9bb 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -1,13 +1,14 @@ import "dart:async"; import "package:intl/intl.dart"; -import "package:inventree/helpers.dart"; -import "package:inventree/inventree/part.dart"; - -import "package:inventree/inventree/model.dart"; -import "package:inventree/l10.dart"; import "package:inventree/api.dart"; +import "package:inventree/helpers.dart"; +import "package:inventree/l10.dart"; + +import "package:inventree/inventree/part.dart"; +import "package:inventree/inventree/model.dart"; + class InvenTreeStockItemTestResult extends InvenTreeModel { diff --git a/lib/settings/release.dart b/lib/settings/release.dart index 6502a909..4358a47f 100644 --- a/lib/settings/release.dart +++ b/lib/settings/release.dart @@ -1,8 +1,10 @@ import "package:flutter/material.dart"; import "package:flutter_markdown/flutter_markdown.dart"; -import "package:inventree/l10.dart"; import "package:url_launcher/url_launcher.dart"; +import "package:inventree/l10.dart"; +import "package:inventree/helpers.dart"; + class ReleaseNotesWidget extends StatelessWidget { @@ -10,16 +12,6 @@ class ReleaseNotesWidget extends StatelessWidget { final String releaseNotes; - // Callback function when a link is clicked in the markdown - Future openLink(String url) async { - - final link = Uri.parse(url); - - if (await canLaunchUrl(link)) { - await launchUrl(link); - } - } - @override Widget build (BuildContext context) { return Scaffold( diff --git a/lib/widget/company_detail.dart b/lib/widget/company_detail.dart index be5167a8..f5cc36b8 100644 --- a/lib/widget/company_detail.dart +++ b/lib/widget/company_detail.dart @@ -5,6 +5,7 @@ import "package:font_awesome_flutter/font_awesome_flutter.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; +import "package:inventree/helpers.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/purchase_order.dart"; @@ -15,6 +16,7 @@ import "package:inventree/widget/refreshable_state.dart"; import "package:inventree/widget/snacks.dart"; import "package:inventree/widget/supplier_part_list.dart"; + /* * Widget for displaying detail view of a single Company instance */ @@ -68,7 +70,7 @@ class _CompanyDetailState extends RefreshableState { List actionButtons(BuildContext context) { List actions = []; - // TODO + // TODO - Actions for this company return actions; } @@ -147,9 +149,9 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.website.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.website}"), - leading: FaIcon(FontAwesomeIcons.globe), - onTap: () { - // TODO - Open website + leading: FaIcon(FontAwesomeIcons.globe, color: COLOR_CLICK), + onTap: () async { + openLink(widget.company.website); }, )); @@ -159,9 +161,9 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.email.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.email}"), - leading: FaIcon(FontAwesomeIcons.at), - onTap: () { - // TODO - Open email + leading: FaIcon(FontAwesomeIcons.at, color: COLOR_CLICK), + onTap: () async { + openLink("mailto:${widget.company.email}"); }, )); @@ -171,9 +173,9 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.phone.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.phone}"), - leading: FaIcon(FontAwesomeIcons.phone), + leading: FaIcon(FontAwesomeIcons.phone, color: COLOR_CLICK), onTap: () { - // TODO - Call phone number + openLink("tel:${widget.company.phone}"); }, )); @@ -256,10 +258,7 @@ class _CompanyDetailState extends RefreshableState { } if (widget.company.isCustomer) { - // TODO - Add list of sales orders - - tiles.add(Divider()); } if (widget.company.notes.isNotEmpty) {