diff --git a/assets/release_notes.md b/assets/release_notes.md index a81cd42d..44cd3520 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -3,6 +3,7 @@ - Support "ON_HOLD" status for Purchase Orders - Support "ON_HOLD" status for Sales Orders +- Change base icon package from FontAwesome to TablerIcons ### 0.16.1 - July 2024 --- diff --git a/lib/api.dart b/lib/api.dart index 968e43fd..927cac40 100644 --- a/lib/api.dart +++ b/lib/api.dart @@ -10,7 +10,7 @@ import "package:one_context/one_context.dart"; import "package:open_filex/open_filex.dart"; import "package:cached_network_image/cached_network_image.dart"; import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter_cache_manager/flutter_cache_manager.dart"; import "package:path_provider/path_provider.dart"; @@ -261,7 +261,7 @@ class InvenTreeAPI { showSnackIcon( L10().notConnected, success: false, - icon: FontAwesomeIcons.server + icon: TablerIcons.server ); return false; @@ -428,7 +428,7 @@ class InvenTreeAPI { if (address.isEmpty) { showSnackIcon( L10().incompleteDetails, - icon: FontAwesomeIcons.circleExclamation, + icon: TablerIcons.exclamation_circle, success: false ); return false; @@ -637,7 +637,7 @@ class InvenTreeAPI { showSnackIcon( L10().profileSelect, success: false, - icon: FontAwesomeIcons.circleExclamation + icon: TablerIcons.exclamation_circle ); return false; } @@ -655,7 +655,7 @@ class InvenTreeAPI { if (_connected) { showSnackIcon( L10().serverConnected, - icon: FontAwesomeIcons.server, + icon: TablerIcons.server, success: true, ); @@ -1485,7 +1485,7 @@ class InvenTreeAPI { return CachedNetworkImage( imageUrl: url, placeholder: (context, url) => CircularProgressIndicator(), - errorWidget: (context, url, error) => FaIcon(FontAwesomeIcons.circleXmark, color: COLOR_DANGER), + errorWidget: (context, url, error) => Icon(TablerIcons.circle_x, color: COLOR_DANGER), httpHeaders: defaultHeaders(), height: height, width: width, @@ -1589,7 +1589,7 @@ class InvenTreeAPI { L10().locateLocation, "", fields, - icon: FontAwesomeIcons.magnifyingGlassLocation, + icon: TablerIcons.location_search, onSuccess: (Map data) async { plugin_name = (data["plugin"] ?? "") as String; } diff --git a/lib/api_form.dart b/lib/api_form.dart index f2578dff..e5278b81 100644 --- a/lib/api_form.dart +++ b/lib/api_form.dart @@ -2,7 +2,7 @@ import "dart:io"; import "package:intl/intl.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:dropdown_search/dropdown_search.dart"; import "package:datetime_picker_formfield/datetime_picker_formfield.dart"; import "package:flutter/material.dart"; @@ -335,7 +335,7 @@ class APIFormField { controller: controller, ), trailing: IconButton( - icon: Icon(Icons.qr_code), + icon: Icon(TablerIcons.qrcode), onPressed: () async { var handler = UniqueBarcodeHandler((String hash) { controller.text = hash; @@ -409,7 +409,7 @@ class APIFormField { controller: controller, ), trailing: IconButton( - icon: FaIcon(FontAwesomeIcons.circlePlus), + icon: Icon(TablerIcons.circle_plus), onPressed: () async { FilePickerDialog.pickFile( message: L10().attachmentSelect, @@ -705,7 +705,7 @@ class APIFormField { bool isGroup = (data["label"] ?? "") == "group"; return ListTile( title: Text(name), - leading: FaIcon(isGroup ? FontAwesomeIcons.users : FontAwesomeIcons.user), + leading: Icon(isGroup ? TablerIcons.users : TablerIcons.user), ); case "contact": String name = (data["name"] ?? "") as String; @@ -726,7 +726,7 @@ class APIFormField { return ListTile( title: Text(project_code.code), subtitle: Text(project_code.description), - leading: FaIcon(FontAwesomeIcons.list) + leading: Icon(TablerIcons.list) ); default: return ListTile( @@ -745,7 +745,7 @@ class APIFormField { // Construct a widget to instruct the user that no results were found Widget _renderEmptyResult() { return ListTile( - leading: FaIcon(FontAwesomeIcons.magnifyingGlass), + leading: Icon(TablerIcons.search), title: Text(L10().noResults), subtitle: Text( L10().queryNoResults, @@ -955,7 +955,7 @@ Future launchApiForm( String method = "PATCH", Function(Map)? onSuccess, Function? onCancel, - IconData icon = FontAwesomeIcons.floppyDisk, + IconData icon = TablerIcons.device_floppy }) async { showLoadingOverlay(context); @@ -979,7 +979,7 @@ Future launchApiForm( // User does not have permission to perform this action showSnackIcon( L10().response403, - icon: FontAwesomeIcons.userXmark, + icon: TablerIcons.user_x, ); hideLoadingOverlay(); @@ -1061,7 +1061,7 @@ class APIFormWidget extends StatefulWidget { Key? key, this.onSuccess, this.fileField = "", - this.icon = FontAwesomeIcons.floppyDisk, + this.icon = TablerIcons.device_floppy, } ) : super(key: key); @@ -1114,8 +1114,8 @@ class _APIFormWidgetState extends State { color: COLOR_DANGER, ), ), - leading: FaIcon( - FontAwesomeIcons.circleExclamation, + leading: Icon( + TablerIcons.exclamation_circle, color: COLOR_DANGER ), ) @@ -1487,7 +1487,7 @@ class _APIFormWidgetState extends State { title: Text(widget.title), actions: [ IconButton( - icon: FaIcon(widget.icon), + icon: Icon(widget.icon), onPressed: () { if (_formKey.currentState!.validate()) { diff --git a/lib/barcode/barcode.dart b/lib/barcode/barcode.dart index 64af533a..513cdb10 100644 --- a/lib/barcode/barcode.dart +++ b/lib/barcode/barcode.dart @@ -1,7 +1,7 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/preferences.dart"; import "package:inventree/widget/order/sales_order_detail.dart"; @@ -121,7 +121,7 @@ class BarcodeScanHandler extends BarcodeHandler { showSnackIcon( L10().barcodeNoMatch, - icon: FontAwesomeIcons.circleExclamation, + icon: TablerIcons.exclamation_circle, success: false, ); } diff --git a/lib/barcode/camera_controller.dart b/lib/barcode/camera_controller.dart index 9947c1a6..0e644d49 100644 --- a/lib/barcode/camera_controller.dart +++ b/lib/barcode/camera_controller.dart @@ -1,6 +1,6 @@ import "dart:io"; import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/preferences.dart"; @@ -124,11 +124,11 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { @override Widget build(BuildContext context) { Widget actionIcon = - FaIcon(FontAwesomeIcons.circlePause, color: COLOR_WARNING, size: 64); + Icon(TablerIcons.player_pause, color: COLOR_WARNING, size: 64); if (scanning_paused) { actionIcon = - FaIcon(FontAwesomeIcons.circlePlay, color: COLOR_ACTION, size: 64); + Icon(TablerIcons.player_play, color: COLOR_ACTION, size: 64); } String info_text = scanning_paused ? L10().barcodeScanPaused : L10().barcodeScanPause; diff --git a/lib/barcode/handler.dart b/lib/barcode/handler.dart index 3dae4847..a5e1b8ac 100644 --- a/lib/barcode/handler.dart +++ b/lib/barcode/handler.dart @@ -1,7 +1,6 @@ import "package:flutter/material.dart"; - -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/helpers.dart"; @@ -72,7 +71,7 @@ class BarcodeHandler { showSnackIcon( L10().barcodeError, - icon: FontAwesomeIcons.circleExclamation, + icon: TablerIcons.exclamation_circle, success: false ); diff --git a/lib/barcode/purchase_order.dart b/lib/barcode/purchase_order.dart index 8c91fed8..e8bba611 100644 --- a/lib/barcode/purchase_order.dart +++ b/lib/barcode/purchase_order.dart @@ -1,6 +1,5 @@ import "package:flutter/material.dart"; - -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:one_context/one_context.dart"; import "package:inventree/l10.dart"; @@ -106,7 +105,7 @@ class POReceiveBarcodeHandler extends BarcodeHandler { receive_url, fields, method: "POST", - icon: FontAwesomeIcons.rightToBracket, + icon: TablerIcons.transition_right, onSuccess: (data) async { showSnackIcon(L10().receivedItem, success: true); } diff --git a/lib/barcode/sales_order.dart b/lib/barcode/sales_order.dart index bc427467..e0e79ad0 100644 --- a/lib/barcode/sales_order.dart +++ b/lib/barcode/sales_order.dart @@ -1,5 +1,5 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api_form.dart"; import "package:inventree/inventree/part.dart"; @@ -159,7 +159,7 @@ class SOAllocateStockHandler extends BarcodeHandler { salesOrder!.allocate_url, fields, method: "POST", - icon: FontAwesomeIcons.rightToBracket, + icon: TablerIcons.transition_right, onSuccess: (data) async { showSnackIcon(L10().allocated, success: true); }); diff --git a/lib/barcode/stock.dart b/lib/barcode/stock.dart index 8de6ed5e..b9671e2f 100644 --- a/lib/barcode/stock.dart +++ b/lib/barcode/stock.dart @@ -1,5 +1,5 @@ import "package:flutter/cupertino.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api_form.dart"; import "package:inventree/preferences.dart"; import "package:one_context/one_context.dart"; @@ -149,7 +149,7 @@ class StockItemScanIntoLocationHandler extends BarcodeScanStockLocationHandler { InvenTreeStockItem.transferStockUrl(), fields, method: "POST", - icon: FontAwesomeIcons.dolly, + icon: TablerIcons.transfer, onSuccess: (data) async { showSnackIcon(L10().stockItemUpdated, success: true); } @@ -216,7 +216,7 @@ class StockLocationScanInItemsHandler extends BarcodeScanStockItemHandler { InvenTreeStockItem.transferStockUrl(), fields, method: "POST", - icon: FontAwesomeIcons.dolly, + icon: TablerIcons.transfer, onSuccess: (data) async { showSnackIcon(L10().stockItemUpdated, success: true); } diff --git a/lib/barcode/wedge_controller.dart b/lib/barcode/wedge_controller.dart index 98b9f0ce..b239c398 100644 --- a/lib/barcode/wedge_controller.dart +++ b/lib/barcode/wedge_controller.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/barcode/controller.dart"; @@ -64,7 +64,7 @@ class _WedgeBarcodeControllerState extends InvenTreeBarcodeControllerState { mainAxisAlignment: MainAxisAlignment.center, children: [ Spacer(flex: 5), - FaIcon(FontAwesomeIcons.barcode, size: 64), + Icon(TablerIcons.barcode, size: 64), Spacer(flex: 5), BarcodeKeyboardListener( useKeyDownEvent: true, diff --git a/lib/fa_icon_mapping.dart b/lib/fa_icon_mapping.dart deleted file mode 100644 index 46a84c90..00000000 --- a/lib/fa_icon_mapping.dart +++ /dev/null @@ -1,1461 +0,0 @@ - -// Map text names for icons into flutter icon data -// This file has been auto-generated (do not edit manually) -// Icon data was extracted from "font_awesome_flutter.dart" -const Map fontAwesomeIconMap = { - "500px": 0xf26e, - "accessible-icon": 0xf368, - "accusoft": 0xf369, - "acquisitions-incorporated": 0xf6af, - "ad": 0xf641, - "address-book": 0xf2b9, - "address-card": 0xf2bb, - "adjust": 0xf042, - "adn": 0xf170, - "adversal": 0xf36a, - "affiliatetheme": 0xf36b, - "air-freshener": 0xf5d0, - "airbnb": 0xf834, - "algolia": 0xf36c, - "align-center": 0xf037, - "align-justify": 0xf039, - "align-left": 0xf036, - "align-right": 0xf038, - "alipay": 0xf642, - "allergies": 0xf461, - "amazon": 0xf270, - "amazon-pay": 0xf42c, - "ambulance": 0xf0f9, - "amilia": 0xf36d, - "anchor": 0xf13d, - "android": 0xf17b, - "angellist": 0xf209, - "angle-double-down": 0xf103, - "angle-double-left": 0xf100, - "angle-double-right": 0xf101, - "angle-double-up": 0xf102, - "angle-down": 0xf107, - "angle-left": 0xf104, - "angle-right": 0xf105, - "angle-up": 0xf106, - "angry": 0xf556, - "angrycreative": 0xf36e, - "angular": 0xf420, - "ankh": 0xf644, - "app-store": 0xf36f, - "app-store-ios": 0xf370, - "apper": 0xf371, - "apple": 0xf179, - "apple-alt": 0xf5d1, - "apple-pay": 0xf415, - "archive": 0xf187, - "archway": 0xf557, - "arrow-alt-circle-down": 0xf358, - "arrow-alt-circle-left": 0xf359, - "arrow-alt-circle-right": 0xf35a, - "arrow-alt-circle-up": 0xf35b, - "arrow-circle-down": 0xf0ab, - "arrow-circle-left": 0xf0a8, - "arrow-circle-right": 0xf0a9, - "arrow-circle-up": 0xf0aa, - "arrow-down": 0xf063, - "arrow-left": 0xf060, - "arrow-right": 0xf061, - "arrow-up": 0xf062, - "arrows-alt": 0xf0b2, - "arrows-alt-h": 0xf337, - "arrows-alt-v": 0xf338, - "artstation": 0xf77a, - "assistive-listening-systems": 0xf2a2, - "asterisk": 0xf069, - "asymmetrik": 0xf372, - "at": 0xf1fa, - "atlas": 0xf558, - "atlassian": 0xf77b, - "atom": 0xf5d2, - "audible": 0xf373, - "audio-description": 0xf29e, - "autoprefixer": 0xf41c, - "avianex": 0xf374, - "aviato": 0xf421, - "award": 0xf559, - "aws": 0xf375, - "baby": 0xf77c, - "baby-carriage": 0xf77d, - "backspace": 0xf55a, - "backward": 0xf04a, - "bacon": 0xf7e5, - "bacteria": 0xe059, - "bacterium": 0xe05a, - "bahai": 0xf666, - "balance-scale": 0xf24e, - "balance-scale-left": 0xf515, - "balance-scale-right": 0xf516, - "ban": 0xf05e, - "band-aid": 0xf462, - "bandcamp": 0xf2d5, - "barcode": 0xf02a, - "bars": 0xf0c9, - "baseball-ball": 0xf433, - "basketball-ball": 0xf434, - "bath": 0xf2cd, - "battery-empty": 0xf244, - "battery-full": 0xf240, - "battery-half": 0xf242, - "battery-quarter": 0xf243, - "battery-three-quarters": 0xf241, - "battle-net": 0xf835, - "bed": 0xf236, - "beer": 0xf0fc, - "behance": 0xf1b4, - "behance-square": 0xf1b5, - "bell": 0xf0f3, - "bell-slash": 0xf1f6, - "bezier-curve": 0xf55b, - "bible": 0xf647, - "bicycle": 0xf206, - "biking": 0xf84a, - "bimobject": 0xf378, - "binoculars": 0xf1e5, - "biohazard": 0xf780, - "birthday-cake": 0xf1fd, - "bitbucket": 0xf171, - "bitcoin": 0xf379, - "bity": 0xf37a, - "black-tie": 0xf27e, - "blackberry": 0xf37b, - "blender": 0xf517, - "blender-phone": 0xf6b6, - "blind": 0xf29d, - "blog": 0xf781, - "blogger": 0xf37c, - "blogger-b": 0xf37d, - "bluetooth": 0xf293, - "bluetooth-b": 0xf294, - "bold": 0xf032, - "bolt": 0xf0e7, - "bomb": 0xf1e2, - "bone": 0xf5d7, - "bong": 0xf55c, - "book": 0xf02d, - "book-dead": 0xf6b7, - "book-medical": 0xf7e6, - "book-open": 0xf518, - "book-reader": 0xf5da, - "bookmark": 0xf02e, - "bootstrap": 0xf836, - "border-all": 0xf84c, - "border-none": 0xf850, - "border-style": 0xf853, - "bowling-ball": 0xf436, - "box": 0xf466, - "box-open": 0xf49e, - "box-tissue": 0xe05b, - "boxes": 0xf468, - "braille": 0xf2a1, - "brain": 0xf5dc, - "bread-slice": 0xf7ec, - "briefcase": 0xf0b1, - "briefcase-medical": 0xf469, - "broadcast-tower": 0xf519, - "broom": 0xf51a, - "brush": 0xf55d, - "btc": 0xf15a, - "buffer": 0xf837, - "bug": 0xf188, - "building": 0xf1ad, - "bullhorn": 0xf0a1, - "bullseye": 0xf140, - "burn": 0xf46a, - "buromobelexperte": 0xf37f, - "bus": 0xf207, - "bus-alt": 0xf55e, - "business-time": 0xf64a, - "buy-n-large": 0xf8a6, - "buysellads": 0xf20d, - "calculator": 0xf1ec, - "calendar": 0xf133, - "calendar-alt": 0xf073, - "calendar-check": 0xf274, - "calendar-day": 0xf783, - "calendar-minus": 0xf272, - "calendar-plus": 0xf271, - "calendar-times": 0xf273, - "calendar-week": 0xf784, - "camera": 0xf030, - "camera-retro": 0xf083, - "campground": 0xf6bb, - "canadian-maple-leaf": 0xf785, - "candy-cane": 0xf786, - "cannabis": 0xf55f, - "capsules": 0xf46b, - "car": 0xf1b9, - "car-alt": 0xf5de, - "car-battery": 0xf5df, - "car-crash": 0xf5e1, - "car-side": 0xf5e4, - "caravan": 0xf8ff, - "caret-down": 0xf0d7, - "caret-left": 0xf0d9, - "caret-right": 0xf0da, - "caret-square-down": 0xf150, - "caret-square-left": 0xf191, - "caret-square-right": 0xf152, - "caret-square-up": 0xf151, - "caret-up": 0xf0d8, - "carrot": 0xf787, - "cart-arrow-down": 0xf218, - "cart-plus": 0xf217, - "cash-register": 0xf788, - "cat": 0xf6be, - "cc-amazon-pay": 0xf42d, - "cc-amex": 0xf1f3, - "cc-apple-pay": 0xf416, - "cc-diners-club": 0xf24c, - "cc-discover": 0xf1f2, - "cc-jcb": 0xf24b, - "cc-mastercard": 0xf1f1, - "cc-paypal": 0xf1f4, - "cc-stripe": 0xf1f5, - "cc-visa": 0xf1f0, - "centercode": 0xf380, - "centos": 0xf789, - "certificate": 0xf0a3, - "chair": 0xf6c0, - "chalkboard": 0xf51b, - "chalkboard-teacher": 0xf51c, - "charging-station": 0xf5e7, - "chart-area": 0xf1fe, - "chart-bar": 0xf080, - "chart-line": 0xf201, - "chart-pie": 0xf200, - "check": 0xf00c, - "check-circle": 0xf058, - "check-double": 0xf560, - "check-square": 0xf14a, - "cheese": 0xf7ef, - "chess": 0xf439, - "chess-bishop": 0xf43a, - "chess-board": 0xf43c, - "chess-king": 0xf43f, - "chess-knight": 0xf441, - "chess-pawn": 0xf443, - "chess-queen": 0xf445, - "chess-rook": 0xf447, - "chevron-circle-down": 0xf13a, - "chevron-circle-left": 0xf137, - "chevron-circle-right": 0xf138, - "chevron-circle-up": 0xf139, - "chevron-down": 0xf078, - "chevron-left": 0xf053, - "chevron-right": 0xf054, - "chevron-up": 0xf077, - "child": 0xf1ae, - "chrome": 0xf268, - "chromecast": 0xf838, - "church": 0xf51d, - "circle": 0xf111, - "circle-notch": 0xf1ce, - "city": 0xf64f, - "clinic-medical": 0xf7f2, - "clipboard": 0xf328, - "clipboard-check": 0xf46c, - "clipboard-list": 0xf46d, - "clock": 0xf017, - "clone": 0xf24d, - "closed-captioning": 0xf20a, - "cloud": 0xf0c2, - "cloud-download-alt": 0xf381, - "cloud-meatball": 0xf73b, - "cloud-moon": 0xf6c3, - "cloud-moon-rain": 0xf73c, - "cloud-rain": 0xf73d, - "cloud-showers-heavy": 0xf740, - "cloud-sun": 0xf6c4, - "cloud-sun-rain": 0xf743, - "cloud-upload-alt": 0xf382, - "cloudflare": 0xe07d, - "cloudscale": 0xf383, - "cloudsmith": 0xf384, - "cloudversify": 0xf385, - "cocktail": 0xf561, - "code": 0xf121, - "code-branch": 0xf126, - "codepen": 0xf1cb, - "codiepie": 0xf284, - "coffee": 0xf0f4, - "cog": 0xf013, - "cogs": 0xf085, - "coins": 0xf51e, - "columns": 0xf0db, - "comment": 0xf075, - "comment-alt": 0xf27a, - "comment-dollar": 0xf651, - "comment-dots": 0xf4ad, - "comment-medical": 0xf7f5, - "comment-slash": 0xf4b3, - "comments": 0xf086, - "comments-dollar": 0xf653, - "compact-disc": 0xf51f, - "compass": 0xf14e, - "compress": 0xf066, - "compress-alt": 0xf422, - "compress-arrows-alt": 0xf78c, - "concierge-bell": 0xf562, - "confluence": 0xf78d, - "connectdevelop": 0xf20e, - "contao": 0xf26d, - "cookie": 0xf563, - "cookie-bite": 0xf564, - "copy": 0xf0c5, - "copyright": 0xf1f9, - "cotton-bureau": 0xf89e, - "couch": 0xf4b8, - "cpanel": 0xf388, - "creative-commons": 0xf25e, - "creative-commons-by": 0xf4e7, - "creative-commons-nc": 0xf4e8, - "creative-commons-nc-eu": 0xf4e9, - "creative-commons-nc-jp": 0xf4ea, - "creative-commons-nd": 0xf4eb, - "creative-commons-pd": 0xf4ec, - "creative-commons-pd-alt": 0xf4ed, - "creative-commons-remix": 0xf4ee, - "creative-commons-sa": 0xf4ef, - "creative-commons-sampling": 0xf4f0, - "creative-commons-share": 0xf4f2, - "creative-commons-zero": 0xf4f3, - "credit-card": 0xf09d, - "critical-role": 0xf6c9, - "crop": 0xf125, - "crop-alt": 0xf565, - "cross": 0xf654, - "crosshairs": 0xf05b, - "crow": 0xf520, - "crown": 0xf521, - "crutch": 0xf7f7, - "css3": 0xf13c, - "css3-alt": 0xf38b, - "cube": 0xf1b2, - "cubes": 0xf1b3, - "cut": 0xf0c4, - "cuttlefish": 0xf38c, - "d-and-d": 0xf38d, - "d-and-d-beyond": 0xf6ca, - "dailymotion": 0xe052, - "dashcube": 0xf210, - "database": 0xf1c0, - "deaf": 0xf2a4, - "deezer": 0xe077, - "delicious": 0xf1a5, - "democrat": 0xf747, - "deploydog": 0xf38e, - "deskpro": 0xf38f, - "desktop": 0xf108, - "dev": 0xf6cc, - "deviantart": 0xf1bd, - "dharmachakra": 0xf655, - "dhl": 0xf790, - "diagnoses": 0xf470, - "diaspora": 0xf791, - "dice": 0xf522, - "dice-d20": 0xf6cf, - "dice-d6": 0xf6d1, - "dice-five": 0xf523, - "dice-four": 0xf524, - "dice-one": 0xf525, - "dice-six": 0xf526, - "dice-three": 0xf527, - "dice-two": 0xf528, - "digg": 0xf1a6, - "digital-ocean": 0xf391, - "digital-tachograph": 0xf566, - "directions": 0xf5eb, - "discord": 0xf392, - "discourse": 0xf393, - "disease": 0xf7fa, - "divide": 0xf529, - "dizzy": 0xf567, - "dna": 0xf471, - "dochub": 0xf394, - "docker": 0xf395, - "dog": 0xf6d3, - "dollar-sign": 0xf155, - "dolly": 0xf472, - "dolly-flatbed": 0xf474, - "donate": 0xf4b9, - "door-closed": 0xf52a, - "door-open": 0xf52b, - "dot-circle": 0xf192, - "dove": 0xf4ba, - "download": 0xf019, - "draft2digital": 0xf396, - "drafting-compass": 0xf568, - "dragon": 0xf6d5, - "draw-polygon": 0xf5ee, - "dribbble": 0xf17d, - "dribbble-square": 0xf397, - "dropbox": 0xf16b, - "drum": 0xf569, - "drum-steelpan": 0xf56a, - "drumstick-bite": 0xf6d7, - "drupal": 0xf1a9, - "dumbbell": 0xf44b, - "dumpster": 0xf793, - "dumpster-fire": 0xf794, - "dungeon": 0xf6d9, - "dyalog": 0xf399, - "earlybirds": 0xf39a, - "ebay": 0xf4f4, - "edge": 0xf282, - "edge-legacy": 0xe078, - "edit": 0xf044, - "egg": 0xf7fb, - "eject": 0xf052, - "elementor": 0xf430, - "ellipsis-h": 0xf141, - "ellipsis-v": 0xf142, - "ello": 0xf5f1, - "ember": 0xf423, - "empire": 0xf1d1, - "envelope": 0xf0e0, - "envelope-open": 0xf2b6, - "envelope-open-text": 0xf658, - "envelope-square": 0xf199, - "envira": 0xf299, - "equals": 0xf52c, - "eraser": 0xf12d, - "erlang": 0xf39d, - "ethereum": 0xf42e, - "ethernet": 0xf796, - "etsy": 0xf2d7, - "euro-sign": 0xf153, - "evernote": 0xf839, - "exchange-alt": 0xf362, - "exclamation": 0xf12a, - "exclamation-circle": 0xf06a, - "exclamation-triangle": 0xf071, - "expand": 0xf065, - "expand-alt": 0xf424, - "expand-arrows-alt": 0xf31e, - "expeditedssl": 0xf23e, - "external-link-alt": 0xf35d, - "external-link-square-alt": 0xf360, - "eye": 0xf06e, - "eye-dropper": 0xf1fb, - "eye-slash": 0xf070, - "facebook": 0xf09a, - "facebook-f": 0xf39e, - "facebook-messenger": 0xf39f, - "facebook-square": 0xf082, - "fan": 0xf863, - "fantasy-flight-games": 0xf6dc, - "fast-backward": 0xf049, - "fast-forward": 0xf050, - "faucet": 0xe005, - "fax": 0xf1ac, - "feather": 0xf52d, - "feather-alt": 0xf56b, - "fedex": 0xf797, - "fedora": 0xf798, - "female": 0xf182, - "fighter-jet": 0xf0fb, - "figma": 0xf799, - "file": 0xf15b, - "file-alt": 0xf15c, - "file-archive": 0xf1c6, - "file-audio": 0xf1c7, - "file-code": 0xf1c9, - "file-contract": 0xf56c, - "file-csv": 0xf6dd, - "file-download": 0xf56d, - "file-excel": 0xf1c3, - "file-export": 0xf56e, - "file-image": 0xf1c5, - "file-import": 0xf56f, - "file-invoice": 0xf570, - "file-invoice-dollar": 0xf571, - "file-medical": 0xf477, - "file-medical-alt": 0xf478, - "file-pdf": 0xf1c1, - "file-powerpoint": 0xf1c4, - "file-prescription": 0xf572, - "file-signature": 0xf573, - "file-upload": 0xf574, - "file-video": 0xf1c8, - "file-word": 0xf1c2, - "fill": 0xf575, - "fill-drip": 0xf576, - "film": 0xf008, - "filter": 0xf0b0, - "fingerprint": 0xf577, - "fire": 0xf06d, - "fire-alt": 0xf7e4, - "fire-extinguisher": 0xf134, - "firefox": 0xf269, - "firefox-browser": 0xe007, - "first-aid": 0xf479, - "first-order": 0xf2b0, - "first-order-alt": 0xf50a, - "firstdraft": 0xf3a1, - "fish": 0xf578, - "fist-raised": 0xf6de, - "flag": 0xf024, - "flag-checkered": 0xf11e, - "flag-usa": 0xf74d, - "flask": 0xf0c3, - "flickr": 0xf16e, - "flipboard": 0xf44d, - "flushed": 0xf579, - "fly": 0xf417, - "folder": 0xf07b, - "folder-minus": 0xf65d, - "folder-open": 0xf07c, - "folder-plus": 0xf65e, - "font": 0xf031, - "font-awesome": 0xf2b4, - "font-awesome-alt": 0xf35c, - "font-awesome-flag": 0xf425, - "fonticons": 0xf280, - "fonticons-fi": 0xf3a2, - "football-ball": 0xf44e, - "fort-awesome": 0xf286, - "fort-awesome-alt": 0xf3a3, - "forumbee": 0xf211, - "forward": 0xf04e, - "foursquare": 0xf180, - "free-code-camp": 0xf2c5, - "freebsd": 0xf3a4, - "frog": 0xf52e, - "frown": 0xf119, - "frown-open": 0xf57a, - "fulcrum": 0xf50b, - "funnel-dollar": 0xf662, - "futbol": 0xf1e3, - "galactic-republic": 0xf50c, - "galactic-senate": 0xf50d, - "gamepad": 0xf11b, - "gas-pump": 0xf52f, - "gavel": 0xf0e3, - "gem": 0xf3a5, - "genderless": 0xf22d, - "get-pocket": 0xf265, - "gg": 0xf260, - "gg-circle": 0xf261, - "ghost": 0xf6e2, - "gift": 0xf06b, - "gifts": 0xf79c, - "git": 0xf1d3, - "git-alt": 0xf841, - "git-square": 0xf1d2, - "github": 0xf09b, - "github-alt": 0xf113, - "github-square": 0xf092, - "gitkraken": 0xf3a6, - "gitlab": 0xf296, - "gitter": 0xf426, - "glass-cheers": 0xf79f, - "glass-martini": 0xf000, - "glass-martini-alt": 0xf57b, - "glass-whiskey": 0xf7a0, - "glasses": 0xf530, - "glide": 0xf2a5, - "glide-g": 0xf2a6, - "globe": 0xf0ac, - "globe-africa": 0xf57c, - "globe-americas": 0xf57d, - "globe-asia": 0xf57e, - "globe-europe": 0xf7a2, - "gofore": 0xf3a7, - "golf-ball": 0xf450, - "goodreads": 0xf3a8, - "goodreads-g": 0xf3a9, - "google": 0xf1a0, - "google-drive": 0xf3aa, - "google-pay": 0xe079, - "google-play": 0xf3ab, - "google-plus": 0xf2b3, - "google-plus-g": 0xf0d5, - "google-plus-square": 0xf0d4, - "google-wallet": 0xf1ee, - "gopuram": 0xf664, - "graduation-cap": 0xf19d, - "gratipay": 0xf184, - "grav": 0xf2d6, - "greater-than": 0xf531, - "greater-than-equal": 0xf532, - "grimace": 0xf57f, - "grin": 0xf580, - "grin-alt": 0xf581, - "grin-beam": 0xf582, - "grin-beam-sweat": 0xf583, - "grin-hearts": 0xf584, - "grin-squint": 0xf585, - "grin-squint-tears": 0xf586, - "grin-stars": 0xf587, - "grin-tears": 0xf588, - "grin-tongue": 0xf589, - "grin-tongue-squint": 0xf58a, - "grin-tongue-wink": 0xf58b, - "grin-wink": 0xf58c, - "grip-horizontal": 0xf58d, - "grip-lines": 0xf7a4, - "grip-lines-vertical": 0xf7a5, - "grip-vertical": 0xf58e, - "gripfire": 0xf3ac, - "grunt": 0xf3ad, - "guilded": 0xe07e, - "guitar": 0xf7a6, - "gulp": 0xf3ae, - "h-square": 0xf0fd, - "hacker-news": 0xf1d4, - "hacker-news-square": 0xf3af, - "hackerrank": 0xf5f7, - "hamburger": 0xf805, - "hammer": 0xf6e3, - "hamsa": 0xf665, - "hand-holding": 0xf4bd, - "hand-holding-heart": 0xf4be, - "hand-holding-medical": 0xe05c, - "hand-holding-usd": 0xf4c0, - "hand-holding-water": 0xf4c1, - "hand-lizard": 0xf258, - "hand-middle-finger": 0xf806, - "hand-paper": 0xf256, - "hand-peace": 0xf25b, - "hand-point-down": 0xf0a7, - "hand-point-left": 0xf0a5, - "hand-point-right": 0xf0a4, - "hand-point-up": 0xf0a6, - "hand-pointer": 0xf25a, - "hand-rock": 0xf255, - "hand-scissors": 0xf257, - "hand-sparkles": 0xe05d, - "hand-spock": 0xf259, - "hands": 0xf4c2, - "hands-helping": 0xf4c4, - "hands-wash": 0xe05e, - "handshake": 0xf2b5, - "handshake-alt-slash": 0xe05f, - "handshake-slash": 0xe060, - "hanukiah": 0xf6e6, - "hard-hat": 0xf807, - "hashtag": 0xf292, - "hat-cowboy": 0xf8c0, - "hat-cowboy-side": 0xf8c1, - "hat-wizard": 0xf6e8, - "hdd": 0xf0a0, - "head-side-cough": 0xe061, - "head-side-cough-slash": 0xe062, - "head-side-mask": 0xe063, - "head-side-virus": 0xe064, - "heading": 0xf1dc, - "headphones": 0xf025, - "headphones-alt": 0xf58f, - "headset": 0xf590, - "heart": 0xf004, - "heart-broken": 0xf7a9, - "heartbeat": 0xf21e, - "helicopter": 0xf533, - "highlighter": 0xf591, - "hiking": 0xf6ec, - "hippo": 0xf6ed, - "hips": 0xf452, - "hire-a-helper": 0xf3b0, - "history": 0xf1da, - "hive": 0xe07f, - "hockey-puck": 0xf453, - "holly-berry": 0xf7aa, - "home": 0xf015, - "hooli": 0xf427, - "hornbill": 0xf592, - "horse": 0xf6f0, - "horse-head": 0xf7ab, - "hospital": 0xf0f8, - "hospital-alt": 0xf47d, - "hospital-symbol": 0xf47e, - "hospital-user": 0xf80d, - "hot-tub": 0xf593, - "hotdog": 0xf80f, - "hotel": 0xf594, - "hotjar": 0xf3b1, - "hourglass": 0xf254, - "hourglass-end": 0xf253, - "hourglass-half": 0xf252, - "hourglass-start": 0xf251, - "house-damage": 0xf6f1, - "house-user": 0xe065, - "houzz": 0xf27c, - "hryvnia": 0xf6f2, - "html5": 0xf13b, - "hubspot": 0xf3b2, - "i-cursor": 0xf246, - "ice-cream": 0xf810, - "icicles": 0xf7ad, - "icons": 0xf86d, - "id-badge": 0xf2c1, - "id-card": 0xf2c2, - "id-card-alt": 0xf47f, - "ideal": 0xe013, - "igloo": 0xf7ae, - "image": 0xf03e, - "images": 0xf302, - "imdb": 0xf2d8, - "inbox": 0xf01c, - "indent": 0xf03c, - "industry": 0xf275, - "infinity": 0xf534, - "info": 0xf129, - "info-circle": 0xf05a, - "innosoft": 0xe080, - "instagram": 0xf16d, - "instagram-square": 0xe055, - "instalod": 0xe081, - "intercom": 0xf7af, - "internet-explorer": 0xf26b, - "invision": 0xf7b0, - "ioxhost": 0xf208, - "italic": 0xf033, - "itch-io": 0xf83a, - "itunes": 0xf3b4, - "itunes-note": 0xf3b5, - "java": 0xf4e4, - "jedi": 0xf669, - "jedi-order": 0xf50e, - "jenkins": 0xf3b6, - "jira": 0xf7b1, - "joget": 0xf3b7, - "joint": 0xf595, - "joomla": 0xf1aa, - "journal-whills": 0xf66a, - "js": 0xf3b8, - "js-square": 0xf3b9, - "jsfiddle": 0xf1cc, - "kaaba": 0xf66b, - "kaggle": 0xf5fa, - "key": 0xf084, - "keybase": 0xf4f5, - "keyboard": 0xf11c, - "keycdn": 0xf3ba, - "khanda": 0xf66d, - "kickstarter": 0xf3bb, - "kickstarter-k": 0xf3bc, - "kiss": 0xf596, - "kiss-beam": 0xf597, - "kiss-wink-heart": 0xf598, - "kiwi-bird": 0xf535, - "korvue": 0xf42f, - "landmark": 0xf66f, - "language": 0xf1ab, - "laptop": 0xf109, - "laptop-code": 0xf5fc, - "laptop-house": 0xe066, - "laptop-medical": 0xf812, - "laravel": 0xf3bd, - "lastfm": 0xf202, - "lastfm-square": 0xf203, - "laugh": 0xf599, - "laugh-beam": 0xf59a, - "laugh-squint": 0xf59b, - "laugh-wink": 0xf59c, - "layer-group": 0xf5fd, - "leaf": 0xf06c, - "leanpub": 0xf212, - "lemon": 0xf094, - "less": 0xf41d, - "less-than": 0xf536, - "less-than-equal": 0xf537, - "level-down-alt": 0xf3be, - "level-up-alt": 0xf3bf, - "life-ring": 0xf1cd, - "lightbulb": 0xf0eb, - "line": 0xf3c0, - "link": 0xf0c1, - "linkedin": 0xf08c, - "linkedin-in": 0xf0e1, - "linode": 0xf2b8, - "linux": 0xf17c, - "lira-sign": 0xf195, - "list": 0xf03a, - "list-alt": 0xf022, - "list-ol": 0xf0cb, - "list-ul": 0xf0ca, - "location-arrow": 0xf124, - "lock": 0xf023, - "lock-open": 0xf3c1, - "long-arrow-alt-down": 0xf309, - "long-arrow-alt-left": 0xf30a, - "long-arrow-alt-right": 0xf30b, - "long-arrow-alt-up": 0xf30c, - "low-vision": 0xf2a8, - "luggage-cart": 0xf59d, - "lungs": 0xf604, - "lungs-virus": 0xe067, - "lyft": 0xf3c3, - "magento": 0xf3c4, - "magic": 0xf0d0, - "magnet": 0xf076, - "mail-bulk": 0xf674, - "mailchimp": 0xf59e, - "male": 0xf183, - "mandalorian": 0xf50f, - "map": 0xf279, - "map-marked": 0xf59f, - "map-marked-alt": 0xf5a0, - "map-marker": 0xf041, - "map-marker-alt": 0xf3c5, - "map-pin": 0xf276, - "map-signs": 0xf277, - "markdown": 0xf60f, - "marker": 0xf5a1, - "mars": 0xf222, - "mars-double": 0xf227, - "mars-stroke": 0xf229, - "mars-stroke-h": 0xf22b, - "mars-stroke-v": 0xf22a, - "mask": 0xf6fa, - "mastodon": 0xf4f6, - "maxcdn": 0xf136, - "mdb": 0xf8ca, - "medal": 0xf5a2, - "medapps": 0xf3c6, - "medium": 0xf23a, - "medium-m": 0xf3c7, - "medkit": 0xf0fa, - "medrt": 0xf3c8, - "meetup": 0xf2e0, - "megaport": 0xf5a3, - "meh": 0xf11a, - "meh-blank": 0xf5a4, - "meh-rolling-eyes": 0xf5a5, - "memory": 0xf538, - "mendeley": 0xf7b3, - "menorah": 0xf676, - "mercury": 0xf223, - "meteor": 0xf753, - "microblog": 0xe01a, - "microchip": 0xf2db, - "microphone": 0xf130, - "microphone-alt": 0xf3c9, - "microphone-alt-slash": 0xf539, - "microphone-slash": 0xf131, - "microscope": 0xf610, - "microsoft": 0xf3ca, - "minus": 0xf068, - "minus-circle": 0xf056, - "minus-square": 0xf146, - "mitten": 0xf7b5, - "mix": 0xf3cb, - "mixcloud": 0xf289, - "mixer": 0xe056, - "mizuni": 0xf3cc, - "mobile": 0xf10b, - "mobile-alt": 0xf3cd, - "modx": 0xf285, - "monero": 0xf3d0, - "money-bill": 0xf0d6, - "money-bill-alt": 0xf3d1, - "money-bill-wave": 0xf53a, - "money-bill-wave-alt": 0xf53b, - "money-check": 0xf53c, - "money-check-alt": 0xf53d, - "monument": 0xf5a6, - "moon": 0xf186, - "mortar-pestle": 0xf5a7, - "mosque": 0xf678, - "motorcycle": 0xf21c, - "mountain": 0xf6fc, - "mouse": 0xf8cc, - "mouse-pointer": 0xf245, - "mug-hot": 0xf7b6, - "music": 0xf001, - "napster": 0xf3d2, - "neos": 0xf612, - "network-wired": 0xf6ff, - "neuter": 0xf22c, - "newspaper": 0xf1ea, - "nimblr": 0xf5a8, - "node": 0xf419, - "node-js": 0xf3d3, - "not-equal": 0xf53e, - "notes-medical": 0xf481, - "npm": 0xf3d4, - "ns8": 0xf3d5, - "nutritionix": 0xf3d6, - "object-group": 0xf247, - "object-ungroup": 0xf248, - "octopus-deploy": 0xe082, - "odnoklassniki": 0xf263, - "odnoklassniki-square": 0xf264, - "oil-can": 0xf613, - "old-republic": 0xf510, - "om": 0xf679, - "opencart": 0xf23d, - "openid": 0xf19b, - "opera": 0xf26a, - "optin-monster": 0xf23c, - "orcid": 0xf8d2, - "osi": 0xf41a, - "otter": 0xf700, - "outdent": 0xf03b, - "page4": 0xf3d7, - "pagelines": 0xf18c, - "pager": 0xf815, - "paint-brush": 0xf1fc, - "paint-roller": 0xf5aa, - "palette": 0xf53f, - "palfed": 0xf3d8, - "pallet": 0xf482, - "paper-plane": 0xf1d8, - "paperclip": 0xf0c6, - "parachute-box": 0xf4cd, - "paragraph": 0xf1dd, - "parking": 0xf540, - "passport": 0xf5ab, - "pastafarianism": 0xf67b, - "paste": 0xf0ea, - "patreon": 0xf3d9, - "pause": 0xf04c, - "pause-circle": 0xf28b, - "paw": 0xf1b0, - "paypal": 0xf1ed, - "peace": 0xf67c, - "pen": 0xf304, - "pen-alt": 0xf305, - "pen-fancy": 0xf5ac, - "pen-nib": 0xf5ad, - "pen-square": 0xf14b, - "pencil-alt": 0xf303, - "pencil-ruler": 0xf5ae, - "penny-arcade": 0xf704, - "people-arrows": 0xe068, - "people-carry": 0xf4ce, - "pepper-hot": 0xf816, - "perbyte": 0xe083, - "percent": 0xf295, - "percentage": 0xf541, - "periscope": 0xf3da, - "person-booth": 0xf756, - "phabricator": 0xf3db, - "phoenix-framework": 0xf3dc, - "phoenix-squadron": 0xf511, - "phone": 0xf095, - "phone-alt": 0xf879, - "phone-slash": 0xf3dd, - "phone-square": 0xf098, - "phone-square-alt": 0xf87b, - "phone-volume": 0xf2a0, - "photo-video": 0xf87c, - "php": 0xf457, - "pied-piper": 0xf2ae, - "pied-piper-alt": 0xf1a8, - "pied-piper-hat": 0xf4e5, - "pied-piper-pp": 0xf1a7, - "pied-piper-square": 0xe01e, - "piggy-bank": 0xf4d3, - "pills": 0xf484, - "pinterest": 0xf0d2, - "pinterest-p": 0xf231, - "pinterest-square": 0xf0d3, - "pizza-slice": 0xf818, - "place-of-worship": 0xf67f, - "plane": 0xf072, - "plane-arrival": 0xf5af, - "plane-departure": 0xf5b0, - "plane-slash": 0xe069, - "play": 0xf04b, - "play-circle": 0xf144, - "playstation": 0xf3df, - "plug": 0xf1e6, - "plus": 0xf067, - "plus-circle": 0xf055, - "plus-square": 0xf0fe, - "podcast": 0xf2ce, - "poll": 0xf681, - "poll-h": 0xf682, - "poo": 0xf2fe, - "poo-storm": 0xf75a, - "poop": 0xf619, - "portrait": 0xf3e0, - "pound-sign": 0xf154, - "power-off": 0xf011, - "pray": 0xf683, - "praying-hands": 0xf684, - "prescription": 0xf5b1, - "prescription-bottle": 0xf485, - "prescription-bottle-alt": 0xf486, - "print": 0xf02f, - "procedures": 0xf487, - "product-hunt": 0xf288, - "project-diagram": 0xf542, - "pump-medical": 0xe06a, - "pump-soap": 0xe06b, - "pushed": 0xf3e1, - "puzzle-piece": 0xf12e, - "python": 0xf3e2, - "qq": 0xf1d6, - "qrcode": 0xf029, - "question": 0xf128, - "question-circle": 0xf059, - "quidditch": 0xf458, - "quinscape": 0xf459, - "quora": 0xf2c4, - "quote-left": 0xf10d, - "quote-right": 0xf10e, - "quran": 0xf687, - "r-project": 0xf4f7, - "radiation": 0xf7b9, - "radiation-alt": 0xf7ba, - "rainbow": 0xf75b, - "random": 0xf074, - "raspberry-pi": 0xf7bb, - "ravelry": 0xf2d9, - "react": 0xf41b, - "reacteurope": 0xf75d, - "readme": 0xf4d5, - "rebel": 0xf1d0, - "receipt": 0xf543, - "record-vinyl": 0xf8d9, - "recycle": 0xf1b8, - "red-river": 0xf3e3, - "reddit": 0xf1a1, - "reddit-alien": 0xf281, - "reddit-square": 0xf1a2, - "redhat": 0xf7bc, - "redo": 0xf01e, - "redo-alt": 0xf2f9, - "registered": 0xf25d, - "remove-format": 0xf87d, - "renren": 0xf18b, - "reply": 0xf3e5, - "reply-all": 0xf122, - "replyd": 0xf3e6, - "republican": 0xf75e, - "researchgate": 0xf4f8, - "resolving": 0xf3e7, - "restroom": 0xf7bd, - "retweet": 0xf079, - "rev": 0xf5b2, - "ribbon": 0xf4d6, - "ring": 0xf70b, - "road": 0xf018, - "robot": 0xf544, - "rocket": 0xf135, - "rocketchat": 0xf3e8, - "rockrms": 0xf3e9, - "route": 0xf4d7, - "rss": 0xf09e, - "rss-square": 0xf143, - "ruble-sign": 0xf158, - "ruler": 0xf545, - "ruler-combined": 0xf546, - "ruler-horizontal": 0xf547, - "ruler-vertical": 0xf548, - "running": 0xf70c, - "rupee-sign": 0xf156, - "rust": 0xe07a, - "sad-cry": 0xf5b3, - "sad-tear": 0xf5b4, - "safari": 0xf267, - "salesforce": 0xf83b, - "sass": 0xf41e, - "satellite": 0xf7bf, - "satellite-dish": 0xf7c0, - "save": 0xf0c7, - "schlix": 0xf3ea, - "school": 0xf549, - "screwdriver": 0xf54a, - "scribd": 0xf28a, - "scroll": 0xf70e, - "sd-card": 0xf7c2, - "search": 0xf002, - "search-dollar": 0xf688, - "search-location": 0xf689, - "search-minus": 0xf010, - "search-plus": 0xf00e, - "searchengin": 0xf3eb, - "seedling": 0xf4d8, - "sellcast": 0xf2da, - "sellsy": 0xf213, - "server": 0xf233, - "servicestack": 0xf3ec, - "shapes": 0xf61f, - "share": 0xf064, - "share-alt": 0xf1e0, - "share-alt-square": 0xf1e1, - "share-square": 0xf14d, - "shekel-sign": 0xf20b, - "shield-alt": 0xf3ed, - "shield-virus": 0xe06c, - "ship": 0xf21a, - "shipping-fast": 0xf48b, - "shirtsinbulk": 0xf214, - "shoe-prints": 0xf54b, - "shopify": 0xe057, - "shopping-bag": 0xf290, - "shopping-basket": 0xf291, - "shopping-cart": 0xf07a, - "shopware": 0xf5b5, - "shower": 0xf2cc, - "shuttle-van": 0xf5b6, - "sign": 0xf4d9, - "sign-in-alt": 0xf2f6, - "sign-language": 0xf2a7, - "sign-out-alt": 0xf2f5, - "signal": 0xf012, - "signature": 0xf5b7, - "sim-card": 0xf7c4, - "simplybuilt": 0xf215, - "sink": 0xe06d, - "sistrix": 0xf3ee, - "sitemap": 0xf0e8, - "sith": 0xf512, - "skating": 0xf7c5, - "sketch": 0xf7c6, - "skiing": 0xf7c9, - "skiing-nordic": 0xf7ca, - "skull": 0xf54c, - "skull-crossbones": 0xf714, - "skyatlas": 0xf216, - "skype": 0xf17e, - "slack": 0xf198, - "slack-hash": 0xf3ef, - "slash": 0xf715, - "sleigh": 0xf7cc, - "sliders-h": 0xf1de, - "slideshare": 0xf1e7, - "smile": 0xf118, - "smile-beam": 0xf5b8, - "smile-wink": 0xf4da, - "smog": 0xf75f, - "smoking": 0xf48d, - "smoking-ban": 0xf54d, - "sms": 0xf7cd, - "snapchat": 0xf2ab, - "snapchat-ghost": 0xf2ac, - "snapchat-square": 0xf2ad, - "snowboarding": 0xf7ce, - "snowflake": 0xf2dc, - "snowman": 0xf7d0, - "snowplow": 0xf7d2, - "soap": 0xe06e, - "socks": 0xf696, - "solar-panel": 0xf5ba, - "sort": 0xf0dc, - "sort-alpha-down": 0xf15d, - "sort-alpha-down-alt": 0xf881, - "sort-alpha-up": 0xf15e, - "sort-alpha-up-alt": 0xf882, - "sort-amount-down": 0xf160, - "sort-amount-down-alt": 0xf884, - "sort-amount-up": 0xf161, - "sort-amount-up-alt": 0xf885, - "sort-down": 0xf0dd, - "sort-numeric-down": 0xf162, - "sort-numeric-down-alt": 0xf886, - "sort-numeric-up": 0xf163, - "sort-numeric-up-alt": 0xf887, - "sort-up": 0xf0de, - "soundcloud": 0xf1be, - "sourcetree": 0xf7d3, - "spa": 0xf5bb, - "space-shuttle": 0xf197, - "speakap": 0xf3f3, - "speaker-deck": 0xf83c, - "spell-check": 0xf891, - "spider": 0xf717, - "spinner": 0xf110, - "splotch": 0xf5bc, - "spotify": 0xf1bc, - "spray-can": 0xf5bd, - "square": 0xf0c8, - "square-full": 0xf45c, - "square-root-alt": 0xf698, - "squarespace": 0xf5be, - "stack-exchange": 0xf18d, - "stack-overflow": 0xf16c, - "stackpath": 0xf842, - "stamp": 0xf5bf, - "star": 0xf005, - "star-and-crescent": 0xf699, - "star-half": 0xf089, - "star-half-alt": 0xf5c0, - "star-of-david": 0xf69a, - "star-of-life": 0xf621, - "staylinked": 0xf3f5, - "steam": 0xf1b6, - "steam-square": 0xf1b7, - "steam-symbol": 0xf3f6, - "step-backward": 0xf048, - "step-forward": 0xf051, - "stethoscope": 0xf0f1, - "sticker-mule": 0xf3f7, - "sticky-note": 0xf249, - "stop": 0xf04d, - "stop-circle": 0xf28d, - "stopwatch": 0xf2f2, - "stopwatch-20": 0xe06f, - "store": 0xf54e, - "store-alt": 0xf54f, - "store-alt-slash": 0xe070, - "store-slash": 0xe071, - "strava": 0xf428, - "stream": 0xf550, - "street-view": 0xf21d, - "strikethrough": 0xf0cc, - "stripe": 0xf429, - "stripe-s": 0xf42a, - "stroopwafel": 0xf551, - "studiovinari": 0xf3f8, - "stumbleupon": 0xf1a4, - "stumbleupon-circle": 0xf1a3, - "subscript": 0xf12c, - "subway": 0xf239, - "suitcase": 0xf0f2, - "suitcase-rolling": 0xf5c1, - "sun": 0xf185, - "superpowers": 0xf2dd, - "superscript": 0xf12b, - "supple": 0xf3f9, - "surprise": 0xf5c2, - "suse": 0xf7d6, - "swatchbook": 0xf5c3, - "swift": 0xf8e1, - "swimmer": 0xf5c4, - "swimming-pool": 0xf5c5, - "symfony": 0xf83d, - "synagogue": 0xf69b, - "sync": 0xf021, - "sync-alt": 0xf2f1, - "syringe": 0xf48e, - "table": 0xf0ce, - "table-tennis": 0xf45d, - "tablet": 0xf10a, - "tablet-alt": 0xf3fa, - "tablets": 0xf490, - "tachometer-alt": 0xf3fd, - "tag": 0xf02b, - "tags": 0xf02c, - "tape": 0xf4db, - "tasks": 0xf0ae, - "taxi": 0xf1ba, - "teamspeak": 0xf4f9, - "teeth": 0xf62e, - "teeth-open": 0xf62f, - "telegram": 0xf2c6, - "telegram-plane": 0xf3fe, - "temperature-high": 0xf769, - "temperature-low": 0xf76b, - "tencent-weibo": 0xf1d5, - "tenge": 0xf7d7, - "terminal": 0xf120, - "text-height": 0xf034, - "text-width": 0xf035, - "th": 0xf00a, - "th-large": 0xf009, - "th-list": 0xf00b, - "the-red-yeti": 0xf69d, - "theater-masks": 0xf630, - "themeco": 0xf5c6, - "themeisle": 0xf2b2, - "thermometer": 0xf491, - "thermometer-empty": 0xf2cb, - "thermometer-full": 0xf2c7, - "thermometer-half": 0xf2c9, - "thermometer-quarter": 0xf2ca, - "thermometer-three-quarters": 0xf2c8, - "think-peaks": 0xf731, - "thumbs-down": 0xf165, - "thumbs-up": 0xf164, - "thumbtack": 0xf08d, - "ticket-alt": 0xf3ff, - "tiktok": 0xe07b, - "times": 0xf00d, - "times-circle": 0xf057, - "tint": 0xf043, - "tint-slash": 0xf5c7, - "tired": 0xf5c8, - "toggle-off": 0xf204, - "toggle-on": 0xf205, - "toilet": 0xf7d8, - "toilet-paper": 0xf71e, - "toilet-paper-slash": 0xe072, - "toolbox": 0xf552, - "tools": 0xf7d9, - "tooth": 0xf5c9, - "torah": 0xf6a0, - "torii-gate": 0xf6a1, - "tractor": 0xf722, - "trade-federation": 0xf513, - "trademark": 0xf25c, - "traffic-light": 0xf637, - "trailer": 0xe041, - "train": 0xf238, - "tram": 0xf7da, - "transgender": 0xf224, - "transgender-alt": 0xf225, - "trash": 0xf1f8, - "trash-alt": 0xf2ed, - "trash-restore": 0xf829, - "trash-restore-alt": 0xf82a, - "tree": 0xf1bb, - "trello": 0xf181, - "trophy": 0xf091, - "truck": 0xf0d1, - "truck-loading": 0xf4de, - "truck-monster": 0xf63b, - "truck-moving": 0xf4df, - "truck-pickup": 0xf63c, - "tshirt": 0xf553, - "tty": 0xf1e4, - "tumblr": 0xf173, - "tumblr-square": 0xf174, - "tv": 0xf26c, - "twitch": 0xf1e8, - "twitter": 0xf099, - "twitter-square": 0xf081, - "typo3": 0xf42b, - "uber": 0xf402, - "ubuntu": 0xf7df, - "uikit": 0xf403, - "umbraco": 0xf8e8, - "umbrella": 0xf0e9, - "umbrella-beach": 0xf5ca, - "uncharted": 0xe084, - "underline": 0xf0cd, - "undo": 0xf0e2, - "undo-alt": 0xf2ea, - "uniregistry": 0xf404, - "unity": 0xe049, - "universal-access": 0xf29a, - "university": 0xf19c, - "unlink": 0xf127, - "unlock": 0xf09c, - "unlock-alt": 0xf13e, - "unsplash": 0xe07c, - "untappd": 0xf405, - "upload": 0xf093, - "ups": 0xf7e0, - "usb": 0xf287, - "user": 0xf007, - "user-alt": 0xf406, - "user-alt-slash": 0xf4fa, - "user-astronaut": 0xf4fb, - "user-check": 0xf4fc, - "user-circle": 0xf2bd, - "user-clock": 0xf4fd, - "user-cog": 0xf4fe, - "user-edit": 0xf4ff, - "user-friends": 0xf500, - "user-graduate": 0xf501, - "user-injured": 0xf728, - "user-lock": 0xf502, - "user-md": 0xf0f0, - "user-minus": 0xf503, - "user-ninja": 0xf504, - "user-nurse": 0xf82f, - "user-plus": 0xf234, - "user-secret": 0xf21b, - "user-shield": 0xf505, - "user-slash": 0xf506, - "user-tag": 0xf507, - "user-tie": 0xf508, - "user-times": 0xf235, - "users": 0xf0c0, - "users-cog": 0xf509, - "users-slash": 0xe073, - "usps": 0xf7e1, - "ussunnah": 0xf407, - "utensil-spoon": 0xf2e5, - "utensils": 0xf2e7, - "vaadin": 0xf408, - "vector-square": 0xf5cb, - "venus": 0xf221, - "venus-double": 0xf226, - "venus-mars": 0xf228, - "vest": 0xe085, - "vest-patches": 0xe086, - "viacoin": 0xf237, - "viadeo": 0xf2a9, - "viadeo-square": 0xf2aa, - "vial": 0xf492, - "vials": 0xf493, - "viber": 0xf409, - "video": 0xf03d, - "video-slash": 0xf4e2, - "vihara": 0xf6a7, - "vimeo": 0xf40a, - "vimeo-square": 0xf194, - "vimeo-v": 0xf27d, - "vine": 0xf1ca, - "virus": 0xe074, - "virus-slash": 0xe075, - "viruses": 0xe076, - "vk": 0xf189, - "vnv": 0xf40b, - "voicemail": 0xf897, - "volleyball-ball": 0xf45f, - "volume-down": 0xf027, - "volume-mute": 0xf6a9, - "volume-off": 0xf026, - "volume-up": 0xf028, - "vote-yea": 0xf772, - "vr-cardboard": 0xf729, - "vuejs": 0xf41f, - "walking": 0xf554, - "wallet": 0xf555, - "warehouse": 0xf494, - "watchman-monitoring": 0xe087, - "water": 0xf773, - "wave-square": 0xf83e, - "waze": 0xf83f, - "weebly": 0xf5cc, - "weibo": 0xf18a, - "weight": 0xf496, - "weight-hanging": 0xf5cd, - "weixin": 0xf1d7, - "whatsapp": 0xf232, - "whatsapp-square": 0xf40c, - "wheelchair": 0xf193, - "whmcs": 0xf40d, - "wifi": 0xf1eb, - "wikipedia-w": 0xf266, - "wind": 0xf72e, - "window-close": 0xf410, - "window-maximize": 0xf2d0, - "window-minimize": 0xf2d1, - "window-restore": 0xf2d2, - "windows": 0xf17a, - "wine-bottle": 0xf72f, - "wine-glass": 0xf4e3, - "wine-glass-alt": 0xf5ce, - "wix": 0xf5cf, - "wizards-of-the-coast": 0xf730, - "wodu": 0xe088, - "wolf-pack-battalion": 0xf514, - "won-sign": 0xf159, - "wordpress": 0xf19a, - "wordpress-simple": 0xf411, - "wpbeginner": 0xf297, - "wpexplorer": 0xf2de, - "wpforms": 0xf298, - "wpressr": 0xf3e4, - "wrench": 0xf0ad, - "x-ray": 0xf497, - "xbox": 0xf412, - "xing": 0xf168, - "xing-square": 0xf169, - "y-combinator": 0xf23b, - "yahoo": 0xf19e, - "yammer": 0xf840, - "yandex": 0xf413, - "yandex-international": 0xf414, - "yarn": 0xf7e3, - "yelp": 0xf1e9, - "yen-sign": 0xf157, - "yin-yang": 0xf6ad, - "yoast": 0xf2b1, - "youtube": 0xf167, - "youtube-square": 0xf431, - "zhihu": 0xf63f, -}; diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 35cfc121..0ad4c17d 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -1,7 +1,7 @@ import "dart:async"; import "dart:io"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter/material.dart"; import "package:inventree/widget/snacks.dart"; import "package:url_launcher/url_launcher.dart"; @@ -9,7 +9,6 @@ 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/helpers.dart"; import "package:inventree/inventree/sentry.dart"; @@ -309,49 +308,31 @@ class InvenTreeModel { * - Second part specifies the icon * */ - FaIcon? get customIcon { - String icon = (jsondata["icon"] ?? "").toString(); + IconData? get customIcon { + String icon = (jsondata["icon"] ?? "").toString().trim(); // Empty icon (default) if (icon.isEmpty) { return null; } - final split = icon.trim().split(" "); - - // Must have two distinct units - if (split.length != 2) { + // Tabler icon is of the format "ti:: items = icon.split(":"); - // Remove "fa-" leading text (if provided) - if (name.startsWith("fa-")) { - name = name.substring(3); - } - - int iconHex = fontAwesomeIconMap[name] ?? 0; - - // No match for the icon name - if (iconHex == 0) { + if (items.length < 2) { return null; } - switch (style) { - case "fas": - return FaIcon(IconDataSolid(iconHex)); - case "fab": - return FaIcon(IconDataBrands(iconHex)); - case "fa": - return FaIcon(IconDataRegular(iconHex)); - case "fal": - return FaIcon(IconDataLight(iconHex)); - default: - // No match - return null; - } + String key = items[1]; + + key = key.replaceAll("-", "_"); + + // Tabler icon lookup + return TablerIcons.all[key]; } /* Extract any custom barcode data available for the model. @@ -960,13 +941,13 @@ class InvenTreeAttachment extends InvenTreeModel { String fn = filename.toLowerCase(); if (fn.endsWith(".pdf")) { - return FontAwesomeIcons.filePdf; + return TablerIcons.file_type_pdf; } else if (fn.endsWith(".csv")) { - return FontAwesomeIcons.fileCsv; + return TablerIcons.file_type_csv; } else if (fn.endsWith(".doc") || fn.endsWith(".docx")) { - return FontAwesomeIcons.fileWord; + return TablerIcons.file_type_doc; } else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) { - return FontAwesomeIcons.fileExcel; + return TablerIcons.file_type_xls; } // Image formats @@ -980,11 +961,11 @@ class InvenTreeAttachment extends InvenTreeModel { for (String fmt in img_formats) { if (fn.endsWith(fmt)) { - return FontAwesomeIcons.fileImage; + return TablerIcons.file_type_jpg; } } - return FontAwesomeIcons.fileLines; + return TablerIcons.file; } String get comment => getString("comment"); diff --git a/lib/labels.dart b/lib/labels.dart index 668bbf9d..4d053bad 100644 --- a/lib/labels.dart +++ b/lib/labels.dart @@ -1,5 +1,5 @@ import "package:flutter/cupertino.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/widget/progress.dart"; import "package:inventree/api_form.dart"; @@ -89,7 +89,7 @@ Future selectAndPrintLabel( L10().printLabel, "", fields, - icon: FontAwesomeIcons.print, + icon: TablerIcons.printer, onSuccess: (Map data) async { int labelId = (data["label"] ?? -1) as int; var pluginKey = data["plugin"]; diff --git a/lib/settings/about.dart b/lib/settings/about.dart index 880da20b..7928eb25 100644 --- a/lib/settings/about.dart +++ b/lib/settings/about.dart @@ -4,7 +4,7 @@ import "package:inventree/settings/release.dart"; import "package:flutter/material.dart"; import "package:flutter/services.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:package_info_plus/package_info_plus.dart"; import "package:inventree/l10.dart"; @@ -91,8 +91,8 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().address), subtitle: Text(InvenTreeAPI().baseUrl.isNotEmpty ? InvenTreeAPI().baseUrl : L10().notConnected), - leading: FaIcon(FontAwesomeIcons.globe), - trailing: InvenTreeAPI().isConnected() ? FaIcon(FontAwesomeIcons.circleCheck, color: COLOR_SUCCESS) : FaIcon(FontAwesomeIcons.circleXmark, color: COLOR_DANGER), + leading: Icon(TablerIcons.globe), + trailing: InvenTreeAPI().isConnected() ? Icon(TablerIcons.circle_check, color: COLOR_SUCCESS) : Icon(TablerIcons.circle_x, color: COLOR_DANGER), ) ); @@ -100,7 +100,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().username), subtitle: Text(InvenTreeAPI().username), - leading: InvenTreeAPI().username.isNotEmpty ? FaIcon(FontAwesomeIcons.user) : FaIcon(FontAwesomeIcons.userSlash, color: COLOR_DANGER), + leading: InvenTreeAPI().username.isNotEmpty ? Icon(TablerIcons.user) : Icon(TablerIcons.user_cancel, color: COLOR_DANGER), ) ); @@ -108,7 +108,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().version), subtitle: Text(InvenTreeAPI().serverVersion.isNotEmpty ? InvenTreeAPI().serverVersion : L10().notConnected), - leading: FaIcon(FontAwesomeIcons.circleInfo), + leading: Icon(TablerIcons.info_circle), ) ); @@ -116,7 +116,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().serverInstance), subtitle: Text(InvenTreeAPI().serverInstance.isNotEmpty ? InvenTreeAPI().serverInstance : L10().notConnected), - leading: FaIcon(FontAwesomeIcons.server), + leading: Icon(TablerIcons.server), ) ); @@ -125,7 +125,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().pluginSupport), subtitle: Text(L10().pluginSupportDetail), - leading: FaIcon(FontAwesomeIcons.plug), + leading: Icon(TablerIcons.plug), ) ); @@ -137,7 +137,7 @@ class InvenTreeAboutWidget extends StatelessWidget { L10().serverNotConnected, style: TextStyle(fontStyle: FontStyle.italic), ), - leading: FaIcon(FontAwesomeIcons.circleExclamation) + leading: Icon(TablerIcons.exclamation_circle) ) ); } @@ -155,7 +155,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().packageName), subtitle: Text("${info.packageName}"), - leading: FaIcon(FontAwesomeIcons.box) + leading: Icon(TablerIcons.box) ) ); @@ -163,7 +163,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().version), subtitle: Text("${info.version} - Build ${info.buildNumber}"), - leading: FaIcon(FontAwesomeIcons.circleInfo) + leading: Icon(TablerIcons.info_circle) ) ); @@ -171,7 +171,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().releaseNotes), subtitle: Text(L10().appReleaseNotes), - leading: FaIcon(FontAwesomeIcons.fileLines, color: COLOR_ACTION), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), onTap: () { _releaseNotes(context); }, @@ -182,7 +182,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().credits), subtitle: Text(L10().appCredits), - leading: FaIcon(FontAwesomeIcons.bullhorn, color: COLOR_ACTION), + leading: Icon(TablerIcons.balloon, color: COLOR_ACTION), onTap: () { _credits(context); } @@ -193,7 +193,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().documentation), subtitle: Text("https://docs.inventree.org/app"), - leading: FaIcon(FontAwesomeIcons.book, color: COLOR_ACTION), + leading: Icon(TablerIcons.book, color: COLOR_ACTION), onTap: () { _openDocs(); }, @@ -204,7 +204,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().translate), subtitle: Text(L10().translateHelp), - leading: FaIcon(FontAwesomeIcons.language, color: COLOR_ACTION), + leading: Icon(TablerIcons.language, color: COLOR_ACTION), onTap: () { _translate(); } @@ -215,7 +215,7 @@ class InvenTreeAboutWidget extends StatelessWidget { ListTile( title: Text(L10().reportBug), subtitle: Text(L10().reportBugDescription), - leading: FaIcon(FontAwesomeIcons.bug, color: COLOR_ACTION), + leading: Icon(TablerIcons.bug, color: COLOR_ACTION), onTap: () { _reportBug(context); }, diff --git a/lib/settings/app_settings.dart b/lib/settings/app_settings.dart index f5d2ab48..f623f8f5 100644 --- a/lib/settings/app_settings.dart +++ b/lib/settings/app_settings.dart @@ -3,7 +3,7 @@ import "package:inventree/api.dart"; import "package:one_context/one_context.dart"; import "package:adaptive_theme/adaptive_theme.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:flutter_localized_locales/flutter_localized_locales.dart"; import "package:inventree/app_colors.dart"; @@ -101,7 +101,7 @@ class _InvenTreeAppSettingsState extends State { L10().languageSelect, "", fields, - icon: FontAwesomeIcons.circleCheck, + icon: TablerIcons.circle_check, onSuccess: (Map data) async { String locale_name = (data["locale"] ?? "") as String; @@ -168,12 +168,12 @@ class _InvenTreeAppSettingsState extends State { L10().appSettings, style: TextStyle(fontWeight: FontWeight.bold), ), - leading: FaIcon(FontAwesomeIcons.mobile), + leading: Icon(TablerIcons.device_mobile), ), ListTile( title: Text(L10().darkMode), subtitle: Text(L10().darkModeEnable), - leading: FaIcon(FontAwesomeIcons.moon), + leading: Icon(TablerIcons.moon), trailing: Switch( value: darkMode, onChanged: (bool value) { @@ -226,7 +226,7 @@ class _InvenTreeAppSettingsState extends State { ListTile( title: Text(L10().labelPrinting), subtitle: Text(L10().labelPrintingDetail), - leading: FaIcon(FontAwesomeIcons.print), + leading: Icon(TablerIcons.printer), trailing: Switch( value: enableLabelPrinting, onChanged: (bool value) { @@ -240,7 +240,7 @@ class _InvenTreeAppSettingsState extends State { ListTile( title: Text(L10().strictHttps), subtitle: Text(L10().strictHttpsDetails), - leading: FaIcon(FontAwesomeIcons.lock), + leading: Icon(TablerIcons.lock), trailing: Switch( value: strictHttps, onChanged: (bool value) { @@ -254,7 +254,7 @@ class _InvenTreeAppSettingsState extends State { ListTile( title: Text(L10().language), subtitle: Text(languageName), - leading: FaIcon(FontAwesomeIcons.language), + leading: Icon(TablerIcons.language), onTap: () async { _selectLocale(context); }, @@ -262,7 +262,7 @@ class _InvenTreeAppSettingsState extends State { ListTile( title: Text(L10().errorReportUpload), subtitle: Text(L10().errorReportUploadDetails), - leading: FaIcon(FontAwesomeIcons.bug), + leading: Icon(TablerIcons.bug), trailing: Switch( value: reportErrors, onChanged: (bool value) { @@ -278,13 +278,13 @@ class _InvenTreeAppSettingsState extends State { L10().sounds, style: TextStyle(fontWeight: FontWeight.bold), ), - leading: FaIcon(FontAwesomeIcons.volumeHigh), + leading: Icon(TablerIcons.volume), ), Divider(), ListTile( title: Text(L10().serverError), subtitle: Text(L10().soundOnServerError), - leading: FaIcon(FontAwesomeIcons.server), + leading: Icon(TablerIcons.server), trailing: Switch( value: serverSounds, onChanged: (bool value) { @@ -298,7 +298,7 @@ class _InvenTreeAppSettingsState extends State { ListTile( title: Text(L10().barcodeTones), subtitle: Text(L10().soundOnBarcodeAction), - leading: Icon(Icons.qr_code), + leading: Icon(TablerIcons.qrcode), trailing: Switch( value: barcodeSounds, onChanged: (bool value) { diff --git a/lib/settings/barcode_settings.dart b/lib/settings/barcode_settings.dart index ffcf4042..d8811246 100644 --- a/lib/settings/barcode_settings.dart +++ b/lib/settings/barcode_settings.dart @@ -1,5 +1,5 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/l10.dart"; import "package:inventree/preferences.dart"; @@ -105,7 +105,7 @@ class _InvenTreeBarcodeSettingsState extends State { ListTile( title: Text(L10().homeShowSubscribed), subtitle: Text(L10().homeShowSubscribedDescription), - leading: FaIcon(FontAwesomeIcons.bell), + leading: Icon(TablerIcons.bell), trailing: Switch( value: homeShowSubscribed, onChanged: (bool value) { @@ -76,7 +74,7 @@ class _HomeScreenSettingsState extends State { ListTile( title: Text(L10().homeShowPo), subtitle: Text(L10().homeShowPoDescription), - leading: FaIcon(FontAwesomeIcons.cartShopping), + leading: Icon(TablerIcons.shopping_cart), trailing: Switch( value: homeShowPo, onChanged: (bool value) { @@ -90,7 +88,7 @@ class _HomeScreenSettingsState extends State { ListTile( title: Text(L10().homeShowSo), subtitle: Text(L10().homeShowSoDescription), - leading: FaIcon(FontAwesomeIcons.truck), + leading: Icon(TablerIcons.truck), trailing: Switch( value: homeShowSo, onChanged: (bool value) { @@ -104,7 +102,7 @@ class _HomeScreenSettingsState extends State { ListTile( title: Text(L10().homeShowSuppliers), subtitle: Text(L10().homeShowSuppliersDescription), - leading: FaIcon(FontAwesomeIcons.building), + leading: Icon(TablerIcons.building), trailing: Switch( value: homeShowSuppliers, onChanged: (bool value) { @@ -121,7 +119,7 @@ class _HomeScreenSettingsState extends State { ListTile( title: Text(L10().homeShowManufacturers), subtitle: Text(L10().homeShowManufacturersDescription), - leading: FaIcon(FontAwesomeIcons.industry), + leading: Icon(TablerIcons.building_factory_2), trailing: Switch( value: homeShowManufacturers, onChanged: (bool value) { @@ -136,7 +134,7 @@ class _HomeScreenSettingsState extends State { ListTile( title: Text(L10().homeShowCustomers), subtitle: Text(L10().homeShowCustomersDescription), - leading: FaIcon(FontAwesomeIcons.userTie), + leading: Icon(TablerIcons.user), trailing: Switch( value: homeShowCustomers, onChanged: (bool value) { diff --git a/lib/settings/login.dart b/lib/settings/login.dart index 57b1c161..b895a38d 100644 --- a/lib/settings/login.dart +++ b/lib/settings/login.dart @@ -1,6 +1,7 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; + import "package:inventree/app_colors.dart"; import "package:inventree/user_profile.dart"; import "package:inventree/l10.dart"; @@ -84,12 +85,12 @@ class _InvenTreeLoginState extends State { ListTile( title: Text(L10().loginEnter), subtitle: Text(L10().loginEnterDetails), - leading: FaIcon(FontAwesomeIcons.userCheck), + leading: Icon(TablerIcons.user_check), ), ListTile( title: Text(L10().server), subtitle: Text(widget.profile.server), - leading: FaIcon(FontAwesomeIcons.server), + leading: Icon(TablerIcons.server), ), Divider(), ]; @@ -99,7 +100,7 @@ class _InvenTreeLoginState extends State { if (error.isNotEmpty) { after.add(Divider()); after.add(ListTile( - leading: FaIcon(FontAwesomeIcons.circleExclamation, color: COLOR_DANGER), + leading: Icon(TablerIcons.exclamation_circle, color: COLOR_DANGER), title: Text(L10().error, style: TextStyle(color: COLOR_DANGER)), subtitle: Text(error, style: TextStyle(color: COLOR_DANGER)), )); @@ -109,7 +110,7 @@ class _InvenTreeLoginState extends State { title: Text(L10().login), actions: [ IconButton( - icon: FaIcon(FontAwesomeIcons.arrowRightToBracket, color: COLOR_SUCCESS), + icon: Icon(TablerIcons.transition_right, color: COLOR_SUCCESS), onPressed: () async { _doLogin(context); }, @@ -150,7 +151,7 @@ class _InvenTreeLoginState extends State { labelStyle: TextStyle(fontWeight: FontWeight.bold), hintText: L10().enterPassword, suffixIcon: IconButton( - icon: _obscured ? FaIcon(FontAwesomeIcons.eye) : FaIcon(FontAwesomeIcons.solidEyeSlash), + icon: _obscured ? Icon(TablerIcons.eye) : Icon(TablerIcons.eye_off), onPressed: () { setState(() { _obscured = !_obscured; diff --git a/lib/settings/part_settings.dart b/lib/settings/part_settings.dart index d9d036f4..bae70955 100644 --- a/lib/settings/part_settings.dart +++ b/lib/settings/part_settings.dart @@ -1,6 +1,7 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; + import "package:inventree/l10.dart"; import "package:inventree/preferences.dart"; @@ -51,7 +52,7 @@ class _InvenTreePartSettingsState extends State { ListTile( title: Text(L10().parameters), subtitle: Text(L10().parametersSettingDetail), - leading: FaIcon(FontAwesomeIcons.tableList), + leading: Icon(TablerIcons.list), trailing: Switch( value: partShowParameters, onChanged: (bool value) { @@ -65,7 +66,7 @@ class _InvenTreePartSettingsState extends State { ListTile( title: Text(L10().bom), subtitle: Text(L10().bomEnable), - leading: FaIcon(FontAwesomeIcons.list), + leading: Icon(TablerIcons.list), trailing: Switch( value: partShowBom, onChanged: (bool value) { @@ -80,7 +81,7 @@ class _InvenTreePartSettingsState extends State { ListTile( title: Text(L10().stockItemHistory), subtitle: Text(L10().stockItemHistoryDetail), - leading: FaIcon(FontAwesomeIcons.clockRotateLeft), + leading: Icon(TablerIcons.history), trailing: Switch( value: stockShowHistory, onChanged: (bool value) { @@ -94,7 +95,7 @@ class _InvenTreePartSettingsState extends State { ListTile( title: Text(L10().testResults), subtitle: Text(L10().testResultsDetail), - leading: FaIcon(FontAwesomeIcons.vial), + leading: Icon(TablerIcons.test_pipe), trailing: Switch( value: stockShowTests, onChanged: (bool value) { @@ -108,7 +109,7 @@ class _InvenTreePartSettingsState extends State { ListTile( title: Text(L10().confirmScan), subtitle: Text(L10().confirmScanDetail), - leading: FaIcon(FontAwesomeIcons.qrcode), + leading: Icon(TablerIcons.qrcode), trailing: Switch( value: stockConfirmScan, onChanged: (bool value) { diff --git a/lib/settings/select_server.dart b/lib/settings/select_server.dart index cd247b67..5c941aa2 100644 --- a/lib/settings/select_server.dart +++ b/lib/settings/select_server.dart @@ -1,8 +1,9 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; -import "package:inventree/settings/login.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:one_context/one_context.dart"; +import "package:inventree/settings/login.dart"; + import "package:inventree/app_colors.dart"; import "package:inventree/widget/dialogs.dart"; import "package:inventree/widget/spinner.dart"; @@ -151,18 +152,18 @@ class _InvenTreeSelectServerState extends State { // Reflect the connection status of the server if (InvenTreeAPI().isConnected()) { - return FaIcon( - FontAwesomeIcons.circleCheck, + return Icon( + TablerIcons.circle_check, color: COLOR_SUCCESS ); } else if (InvenTreeAPI().isConnecting()) { return Spinner( - icon: FontAwesomeIcons.spinner, + icon: TablerIcons.loader_2, color: COLOR_PROGRESS, ); } else { - return FaIcon( - FontAwesomeIcons.circleXmark, + return Icon( + TablerIcons.circle_x, color: COLOR_DANGER, ); } @@ -183,7 +184,7 @@ class _InvenTreeSelectServerState extends State { ), tileColor: profile.selected ? Theme.of(context).secondaryHeaderColor : null, subtitle: Text("${profile.server}"), - leading: profile.hasToken ? FaIcon(FontAwesomeIcons.userCheck, color: COLOR_SUCCESS) : FaIcon(FontAwesomeIcons.userSlash, color: COLOR_WARNING), + leading: profile.hasToken ? Icon(TablerIcons.user_check, color: COLOR_SUCCESS) : Icon(TablerIcons.user_cancel, color: COLOR_WARNING), trailing: _getProfileIcon(profile), onTap: () { _selectProfile(context, profile); @@ -202,7 +203,7 @@ class _InvenTreeSelectServerState extends State { }, child: ListTile( title: Text(L10().profileConnect), - leading: FaIcon(FontAwesomeIcons.server), + leading: Icon(TablerIcons.server), ) ), SimpleDialogOption( @@ -212,7 +213,7 @@ class _InvenTreeSelectServerState extends State { }, child: ListTile( title: Text(L10().profileEdit), - leading: FaIcon(FontAwesomeIcons.penToSquare) + leading: Icon(TablerIcons.edit) ) ), SimpleDialogOption( @@ -222,7 +223,7 @@ class _InvenTreeSelectServerState extends State { }, child: ListTile( title: Text(L10().profileLogout), - leading: FaIcon(FontAwesomeIcons.userSlash), + leading: Icon(TablerIcons.logout), ) ), Divider(), @@ -234,7 +235,7 @@ class _InvenTreeSelectServerState extends State { L10().delete, L10().profileDelete + "?", color: Colors.red, - icon: FontAwesomeIcons.trashCan, + icon: TablerIcons.trash, onAccept: () { _deleteProfile(profile); } @@ -242,7 +243,7 @@ class _InvenTreeSelectServerState extends State { }, child: ListTile( title: Text(L10().profileDelete, style: TextStyle(color: Colors.red)), - leading: FaIcon(FontAwesomeIcons.trashCan, color: Colors.red), + leading: Icon(TablerIcons.trash, color: Colors.red), ) ) ], @@ -267,7 +268,7 @@ class _InvenTreeSelectServerState extends State { title: Text(L10().profileSelect), actions: [ IconButton( - icon: FaIcon(FontAwesomeIcons.circlePlus), + icon: Icon(TablerIcons.circle_plus), onPressed: () { _editProfile(context, createNew: true); }, @@ -316,7 +317,7 @@ class _ProfileEditState extends State { title: Text(widget.profile == null ? L10().profileAdd : L10().profileEdit), actions: [ IconButton( - icon: FaIcon(FontAwesomeIcons.floppyDisk), + icon: Icon(TablerIcons.device_floppy), onPressed: () async { if (formKey.currentState!.validate()) { formKey.currentState!.save(); diff --git a/lib/settings/settings.dart b/lib/settings/settings.dart index dbf7e7e4..595a15b8 100644 --- a/lib/settings/settings.dart +++ b/lib/settings/settings.dart @@ -1,5 +1,5 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:package_info_plus/package_info_plus.dart"; import "package:inventree/app_colors.dart"; @@ -49,7 +49,7 @@ class _InvenTreeSettingsState extends State { ListTile( title: Text(L10().server), subtitle: Text(L10().configureServer), - leading: FaIcon(FontAwesomeIcons.server, color: COLOR_ACTION), + leading: Icon(TablerIcons.server, color: COLOR_ACTION), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeSelectServerWidget())); }, @@ -57,7 +57,7 @@ class _InvenTreeSettingsState extends State { ListTile( title: Text(L10().appSettings), subtitle: Text(L10().appSettingsDetails), - leading: FaIcon(FontAwesomeIcons.gears, color: COLOR_ACTION), + leading: Icon(TablerIcons.settings, color: COLOR_ACTION), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeAppSettingsWidget())); } @@ -65,7 +65,7 @@ class _InvenTreeSettingsState extends State { ListTile( title: Text(L10().homeScreen), subtitle: Text(L10().homeScreenSettings), - leading: FaIcon(FontAwesomeIcons.house, color: COLOR_ACTION), + leading: Icon(TablerIcons.home, color: COLOR_ACTION), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreenSettingsWidget())); } @@ -73,7 +73,7 @@ class _InvenTreeSettingsState extends State { ListTile( title: Text(L10().barcodes), subtitle: Text(L10().barcodeSettings), - leading: FaIcon(FontAwesomeIcons.barcode, color: COLOR_ACTION), + leading: Icon(TablerIcons.barcode, color: COLOR_ACTION), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeBarcodeSettingsWidget())); } @@ -81,7 +81,7 @@ class _InvenTreeSettingsState extends State { ListTile( title: Text(L10().part), subtitle: Text(L10().partSettings), - leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), + leading: Icon(TablerIcons.box, color: COLOR_ACTION), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreePartSettingsWidget())); } @@ -89,7 +89,7 @@ class _InvenTreeSettingsState extends State { Divider(), ListTile( title: Text(L10().about), - leading: FaIcon(FontAwesomeIcons.circleInfo, color: COLOR_ACTION), + leading: Icon(TablerIcons.info_circle, color: COLOR_ACTION), onTap: _about, ) ] diff --git a/lib/widget/attachment_widget.dart b/lib/widget/attachment_widget.dart index e182df0f..78d4dada 100644 --- a/lib/widget/attachment_widget.dart +++ b/lib/widget/attachment_widget.dart @@ -2,7 +2,7 @@ import "dart:io"; import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:one_context/one_context.dart"; import "package:url_launcher/url_launcher.dart"; @@ -52,7 +52,7 @@ class _AttachmentWidgetState extends RefreshableState { return [ IconButton( - icon: FaIcon(FontAwesomeIcons.camera), + icon: Icon(TablerIcons.camera), onPressed: () async { FilePickerDialog.pickImageFromCamera().then((File? file) { upload(context, file); @@ -60,7 +60,7 @@ class _AttachmentWidgetState extends RefreshableState { } ), IconButton( - icon: FaIcon(FontAwesomeIcons.fileArrowUp), + icon: Icon(TablerIcons.file_upload), onPressed: () async { FilePickerDialog.pickFileFromDevice().then((File? file) { upload(context, file); @@ -122,7 +122,7 @@ class _AttachmentWidgetState extends RefreshableState { }, child: ListTile( title: Text(L10().delete), - leading: FaIcon(FontAwesomeIcons.trashCan), + leading: Icon(TablerIcons.trash), ) ) ] @@ -171,7 +171,7 @@ class _AttachmentWidgetState extends RefreshableState { tiles.add(ListTile( title: Text(attachment.filename), subtitle: Text(attachment.comment), - leading: FaIcon(attachment.icon, color: COLOR_ACTION), + leading: Icon(attachment.icon, color: COLOR_ACTION), onTap: () async { showLoadingOverlay(context); await attachment.downloadAttachment(); @@ -187,7 +187,7 @@ class _AttachmentWidgetState extends RefreshableState { tiles.add(ListTile( title: Text(attachment.link), subtitle: Text(attachment.comment), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () async { var uri = Uri.tryParse(attachment.link.trimLeft()); if (uri != null && await canLaunchUrl(uri)) { diff --git a/lib/widget/company/company_detail.dart b/lib/widget/company/company_detail.dart index 57cdc388..f79992b7 100644 --- a/lib/widget/company/company_detail.dart +++ b/lib/widget/company/company_detail.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/l10.dart"; import "package:inventree/api.dart"; @@ -57,7 +57,7 @@ class _CompanyDetailState extends RefreshableState { if (InvenTreeCompany().canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), tooltip: L10().companyEdit, onPressed: () { editCompany(context); @@ -75,7 +75,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.isCustomer && InvenTreeSalesOrder().canCreate) { actions.add(SpeedDialChild( - child: FaIcon(FontAwesomeIcons.truck), + child: Icon(TablerIcons.truck), label: L10().salesOrderCreate, onTap: () async { _createSalesOrder(context); @@ -85,7 +85,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.isSupplier && InvenTreePurchaseOrder().canCreate) { actions.add(SpeedDialChild( - child: FaIcon(FontAwesomeIcons.cartShopping), + child: Icon(TablerIcons.shopping_cart), label: L10().purchaseOrderCreate, onTap: () async { _createPurchaseOrder(context); @@ -243,8 +243,8 @@ class _CompanyDetailState extends RefreshableState { color: COLOR_DANGER ) ), - leading: FaIcon( - FontAwesomeIcons.circleExclamation, + leading: Icon( + TablerIcons.exclamation_circle, color: COLOR_DANGER ), ) @@ -254,7 +254,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.website.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.website}"), - leading: FaIcon(FontAwesomeIcons.globe, color: COLOR_ACTION), + leading: Icon(TablerIcons.globe, color: COLOR_ACTION), onTap: () async { openLink(widget.company.website); }, @@ -266,7 +266,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.email.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.email}"), - leading: FaIcon(FontAwesomeIcons.at, color: COLOR_ACTION), + leading: Icon(TablerIcons.at, color: COLOR_ACTION), onTap: () async { openLink("mailto:${widget.company.email}"); }, @@ -278,7 +278,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.phone.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.phone}"), - leading: FaIcon(FontAwesomeIcons.phone, color: COLOR_ACTION), + leading: Icon(TablerIcons.phone, color: COLOR_ACTION), onTap: () { openLink("tel:${widget.company.phone}"); }, @@ -291,7 +291,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.link.isNotEmpty) { tiles.add(ListTile( title: Text("${widget.company.link}"), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () { widget.company.openLink(); }, @@ -310,7 +310,7 @@ class _CompanyDetailState extends RefreshableState { tiles.add( ListTile( title: Text(L10().supplierParts), - leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), + leading: Icon(TablerIcons.building, color: COLOR_ACTION), trailing: Text(supplierPartCount.toString()), onTap: () { Navigator.push( @@ -329,7 +329,7 @@ class _CompanyDetailState extends RefreshableState { tiles.add( ListTile( title: Text(L10().purchaseOrders), - leading: FaIcon(FontAwesomeIcons.cartShopping, color: COLOR_ACTION), + leading: Icon(TablerIcons.shopping_cart, color: COLOR_ACTION), trailing: Text("${outstandingPurchaseOrders}"), onTap: () { Navigator.push( @@ -351,7 +351,7 @@ class _CompanyDetailState extends RefreshableState { tiles.add( ListTile( title: Text(L10().suppliedParts), - leading: FaIcon(FontAwesomeIcons.shapes), + leading: Icon(TablerIcons.box), trailing: Text("${company.partSuppliedCount}"), ) ); @@ -366,7 +366,7 @@ class _CompanyDetailState extends RefreshableState { tiles.add( ListTile( title: Text(L10().salesOrders), - leading: FaIcon(FontAwesomeIcons.truck, color: COLOR_ACTION), + leading: Icon(TablerIcons.truck, color: COLOR_ACTION), trailing: Text("${outstandingSalesOrders}"), onTap: () { Navigator.push( @@ -387,7 +387,7 @@ class _CompanyDetailState extends RefreshableState { if (widget.company.notes.isNotEmpty) { tiles.add(ListTile( title: Text(L10().notes), - leading: FaIcon(FontAwesomeIcons.noteSticky), + leading: Icon(TablerIcons.note), onTap: null, )); } @@ -395,7 +395,7 @@ class _CompanyDetailState extends RefreshableState { tiles.add(ListTile( title: Text(L10().attachments), - leading: FaIcon(FontAwesomeIcons.fileLines, color: COLOR_ACTION), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, onTap: () { Navigator.push( diff --git a/lib/widget/company/supplier_part_detail.dart b/lib/widget/company/supplier_part_detail.dart index a8268e3c..2b6a9d4c 100644 --- a/lib/widget/company/supplier_part_detail.dart +++ b/lib/widget/company/supplier_part_detail.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; @@ -78,7 +78,7 @@ class _SupplierPartDisplayState extends RefreshableState choiceDialog(String title, List items, {Function? onSelecte /* * Display a "confirmation" dialog allowing the user to accept or reject an action */ -Future confirmationDialog(String title, String text, {Color? color, IconData icon = FontAwesomeIcons.circleQuestion, String? acceptText, String? rejectText, Function? onAccept, Function? onReject}) async { +Future confirmationDialog(String title, String text, {Color? color, IconData icon = TablerIcons.help_circle, String? acceptText, String? rejectText, Function? onAccept, Function? onReject}) async { String _accept = acceptText ?? L10().ok; String _reject = rejectText ?? L10().cancel; @@ -69,7 +69,7 @@ Future confirmationDialog(String title, String text, {Color? color, IconDa iconColor: color, title: ListTile( title: Text(title, style: TextStyle(color: color)), - leading: FaIcon(icon, color: color), + leading: Icon(icon, color: color), ), content: text.isEmpty ? Text(text) : null, actions: [ @@ -109,7 +109,7 @@ Future confirmationDialog(String title, String text, {Color? color, IconDa * @description = Simple string description of error * @data = Error response (e.g from server) */ -Future showErrorDialog(String title, {String description = "", APIResponse? response, IconData icon = FontAwesomeIcons.circleExclamation, Function? onDismissed}) async { +Future showErrorDialog(String title, {String description = "", APIResponse? response, IconData icon = TablerIcons.exclamation_circle, Function? onDismissed}) async { List children = []; @@ -180,7 +180,7 @@ Future showErrorDialog(String title, {String description = "", APIResponse builder: (context) => SimpleDialog( title: ListTile( title: Text(title), - leading: FaIcon(icon), + leading: Icon(icon), ), children: children ) @@ -224,7 +224,7 @@ Future showServerError(String url, String title, String description) async showErrorDialog( L10().serverError, description: description, - icon: FontAwesomeIcons.server + icon: TablerIcons.server ); } ); diff --git a/lib/widget/drawer.dart b/lib/widget/drawer.dart index 5dd47c80..1fbbbe47 100644 --- a/lib/widget/drawer.dart +++ b/lib/widget/drawer.dart @@ -1,5 +1,5 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; @@ -120,7 +120,7 @@ class InvenTreeDrawer extends StatelessWidget { // "Home" access tiles.add(ListTile( - leading: FaIcon(FontAwesomeIcons.house, color: COLOR_ACTION), + leading: Icon(TablerIcons.home, color: COLOR_ACTION), title: Text( L10().appTitle, style: TextStyle(fontWeight: FontWeight.bold), @@ -134,7 +134,7 @@ class InvenTreeDrawer extends StatelessWidget { tiles.add( ListTile( title: Text(L10().parts), - leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), + leading: Icon(TablerIcons.box, color: COLOR_ACTION), onTap: _parts, ) ); @@ -144,7 +144,7 @@ class InvenTreeDrawer extends StatelessWidget { tiles.add( ListTile( title: Text(L10().stock), - leading: FaIcon(FontAwesomeIcons.boxesStacked, color: COLOR_ACTION), + leading: Icon(TablerIcons.package, color: COLOR_ACTION), onTap: _stock, ) ); @@ -154,7 +154,7 @@ class InvenTreeDrawer extends StatelessWidget { tiles.add( ListTile( title: Text(L10().purchaseOrders), - leading: FaIcon(FontAwesomeIcons.cartShopping, color: COLOR_ACTION), + leading: Icon(TablerIcons.shopping_cart, color: COLOR_ACTION), onTap: _purchaseOrders, ) ); @@ -164,7 +164,7 @@ class InvenTreeDrawer extends StatelessWidget { tiles.add( ListTile( title: Text(L10().salesOrders), - leading: FaIcon(FontAwesomeIcons.truck, color: COLOR_ACTION), + leading: Icon(TablerIcons.truck_delivery, color: COLOR_ACTION), onTap: _salesOrders, ) ); @@ -178,7 +178,7 @@ class InvenTreeDrawer extends StatelessWidget { tiles.add( ListTile( - leading: FaIcon(FontAwesomeIcons.bell, color: COLOR_ACTION), + leading: Icon(TablerIcons.bell, color: COLOR_ACTION), trailing: notification_count > 0 ? Text(notification_count.toString()) : null, title: Text(L10().notifications), onTap: _notifications, diff --git a/lib/widget/fields.dart b/lib/widget/fields.dart index bff9cf23..8a7d6007 100644 --- a/lib/widget/fields.dart +++ b/lib/widget/fields.dart @@ -3,7 +3,7 @@ import "dart:io"; import "package:file_picker/file_picker.dart"; import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:image_picker/image_picker.dart"; import "package:one_context/one_context.dart"; @@ -80,7 +80,7 @@ class FilePickerDialog { actions.add( SimpleDialogOption( child: ListTile( - leading: FaIcon(FontAwesomeIcons.fileArrowUp), + leading: Icon(TablerIcons.arrow_up), title: Text(allowFiles ? L10().selectFile : L10().selectImage), ), onPressed: () async { @@ -108,7 +108,7 @@ class FilePickerDialog { actions.add( SimpleDialogOption( child: ListTile( - leading: FaIcon(FontAwesomeIcons.camera), + leading: Icon(TablerIcons.camera), title: Text(L10().takePicture), ), onPressed: () async { diff --git a/lib/widget/home.dart b/lib/widget/home.dart index e9034a7b..e68c35c3 100644 --- a/lib/widget/home.dart +++ b/lib/widget/home.dart @@ -1,8 +1,7 @@ import "dart:async"; import "package:flutter/material.dart"; - -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; @@ -193,7 +192,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr horizontal: 12 ), child: ListTile( - leading: FaIcon(icon, color: connected && allowed ? COLOR_ACTION : Colors.grey), + leading: Icon(icon, color: connected && allowed ? COLOR_ACTION : Colors.grey), title: Text(label), trailing: trailing, ), @@ -202,7 +201,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr if (!allowed) { showSnackIcon( L10().permissionRequired, - icon: FontAwesomeIcons.circleExclamation, + icon: TablerIcons.exclamation_circle, success: false, ); return; @@ -229,7 +228,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().parts, - FontAwesomeIcons.shapes, + TablerIcons.box, callback: () { _showParts(context); }, @@ -241,7 +240,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().partsStarred, - FontAwesomeIcons.bell, + TablerIcons.bell, callback: () { _showStarredParts(context); } @@ -253,7 +252,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().stock, - FontAwesomeIcons.boxesStacked, + TablerIcons.package, callback: () { _showStock(context); } @@ -265,7 +264,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().purchaseOrders, - FontAwesomeIcons.cartShopping, + TablerIcons.shopping_cart, callback: () { _showPurchaseOrders(context); } @@ -276,7 +275,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().salesOrders, - FontAwesomeIcons.truck, + TablerIcons.truck_delivery, callback: () { _showSalesOrders(context); } @@ -288,7 +287,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().suppliers, - FontAwesomeIcons.building, + TablerIcons.building, callback: () { _showSuppliers(context); } @@ -304,7 +303,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().manufacturers, - FontAwesomeIcons.industry, + TablerIcons.building_factory_2, callback: () { _showManufacturers(context); } @@ -316,7 +315,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr tiles.add(_listTile( context, L10().customers, - FontAwesomeIcons.userTie, + TablerIcons.building_store, callback: () { _showCustomers(context); } @@ -336,8 +335,8 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr bool validAddress = serverAddress != null; bool connecting = !InvenTreeAPI().isConnected() && InvenTreeAPI().isConnecting(); - Widget leading = FaIcon(FontAwesomeIcons.circleExclamation, color: COLOR_DANGER); - Widget trailing = FaIcon(FontAwesomeIcons.server, color: COLOR_ACTION); + Widget leading = Icon(TablerIcons.exclamation_circle, color: COLOR_DANGER); + Widget trailing = Icon(TablerIcons.server, color: COLOR_ACTION); String title = L10().serverNotConnected; String subtitle = L10().profileSelectOrCreate; @@ -346,7 +345,7 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr } else if (connecting) { title = L10().serverConnecting; subtitle = serverAddress; - leading = Spinner(icon: FontAwesomeIcons.spinner, color: COLOR_PROGRESS); + leading = Spinner(icon: TablerIcons.loader_2, color: COLOR_PROGRESS); } return Center( @@ -400,8 +399,8 @@ class _InvenTreeHomePageState extends State with BaseWidgetPr title: Text(L10().appTitle), actions: [ IconButton( - icon: FaIcon( - FontAwesomeIcons.server, + icon: Icon( + TablerIcons.server, color: connected ? COLOR_SUCCESS : (connecting ? COLOR_PROGRESS: COLOR_DANGER), ), onPressed: _selectProfile, diff --git a/lib/widget/notes_widget.dart b/lib/widget/notes_widget.dart index a5c11465..d871dd00 100644 --- a/lib/widget/notes_widget.dart +++ b/lib/widget/notes_widget.dart @@ -1,5 +1,5 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/inventree/model.dart"; import "package:inventree/widget/refreshable_state.dart"; import "package:flutter_markdown/flutter_markdown.dart"; @@ -47,7 +47,7 @@ class _NotesState extends RefreshableState { if (widget.model.canEdit) { actions.add( IconButton( - icon: FaIcon(FontAwesomeIcons.penToSquare), + icon: Icon(TablerIcons.edit), tooltip: L10().edit, onPressed: () { widget.model.editForm( diff --git a/lib/widget/notifications.dart b/lib/widget/notifications.dart index 4c342038..9b5dabe3 100644 --- a/lib/widget/notifications.dart +++ b/lib/widget/notifications.dart @@ -1,7 +1,7 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/l10.dart"; import "package:inventree/inventree/model.dart"; @@ -80,7 +80,7 @@ class _NotificationState extends RefreshableState { L10().notifications, ), subtitle: notifications.isEmpty ? Text(L10().notificationsEmpty) : null, - leading: notifications.isEmpty ? FaIcon(FontAwesomeIcons.bellSlash) : FaIcon(FontAwesomeIcons.bell), + leading: notifications.isEmpty ? Icon(TablerIcons.bell_exclamation) : Icon(TablerIcons.bell), trailing: Text("${notifications.length}"), ) ); @@ -91,7 +91,7 @@ class _NotificationState extends RefreshableState { title: Text(notification.name), subtitle: Text(notification.message), trailing: IconButton( - icon: FaIcon(FontAwesomeIcons.bookmark), + icon: Icon(TablerIcons.bookmark), onPressed: isDismissing ? null : () async { dismissNotification(context, notification); }, diff --git a/lib/widget/order/po_line_detail.dart b/lib/widget/order/po_line_detail.dart index d5510d93..bddeb4db 100644 --- a/lib/widget/order/po_line_detail.dart +++ b/lib/widget/order/po_line_detail.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api_form.dart"; import "package:inventree/app_colors.dart"; @@ -48,7 +48,7 @@ class _POLineDetailWidgetState extends RefreshableState { if (widget.item.canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), onPressed: () { _editLineItem(context); }, @@ -68,7 +68,7 @@ class _POLineDetailWidgetState extends RefreshableState { if (!widget.item.isComplete) { buttons.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.rightToBracket, color: Colors.blue), + child: Icon(TablerIcons.transition_right, color: Colors.blue), label: L10().receiveItem, onTap: () async { receiveLineItem(context); @@ -146,7 +146,7 @@ class _POLineDetailWidgetState extends RefreshableState { order.receive_url, fields, method: "POST", - icon: FontAwesomeIcons.rightToBracket, + icon: TablerIcons.transition_right, onSuccess: (data) async { showSnackIcon(L10().receivedItem, success: true); refresh(context); @@ -167,7 +167,7 @@ class _POLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().internalPart), subtitle: Text(widget.item.partName), - leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), + leading: Icon(TablerIcons.box, color: COLOR_ACTION), trailing: api.getThumbnail(widget.item.partImage), onTap: () async { showLoadingOverlay(context); @@ -186,7 +186,7 @@ class _POLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().supplierPart), subtitle: Text(widget.item.SKU), - leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), + leading: Icon(TablerIcons.building, color: COLOR_ACTION), onTap: () async { showLoadingOverlay(context); var part = await InvenTreeSupplierPart().get(widget.item.supplierPartId); @@ -210,7 +210,7 @@ class _POLineDetailWidgetState extends RefreshableState { color: widget.item.isComplete ? COLOR_SUCCESS: COLOR_WARNING ) ), - leading: FaIcon(FontAwesomeIcons.boxOpen), + leading: Icon(TablerIcons.progress), ) ); @@ -220,7 +220,7 @@ class _POLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().reference), subtitle: Text(widget.item.reference), - leading: FaIcon(FontAwesomeIcons.hashtag), + leading: Icon(TablerIcons.hash), ) ); } @@ -229,7 +229,7 @@ class _POLineDetailWidgetState extends RefreshableState { tiles.add( ListTile( title: Text(L10().unitPrice), - leading: FaIcon(FontAwesomeIcons.dollarSign), + leading: Icon(TablerIcons.currency_dollar), trailing: Text( renderCurrency(widget.item.purchasePrice, widget.item.purchasePriceCurrency) ), @@ -242,7 +242,7 @@ class _POLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().notes), subtitle: Text(widget.item.notes), - leading: FaIcon(FontAwesomeIcons.noteSticky), + leading: Icon(TablerIcons.note), ) ); } @@ -253,7 +253,7 @@ class _POLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().link), subtitle: Text(widget.item.link), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () async { await openLink(widget.item.link); }, diff --git a/lib/widget/order/purchase_order_detail.dart b/lib/widget/order/purchase_order_detail.dart index ea0e308d..6f413f59 100644 --- a/lib/widget/order/purchase_order_detail.dart +++ b/lib/widget/order/purchase_order_detail.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/widget/dialogs.dart"; import "package:inventree/widget/order/po_line_list.dart"; @@ -57,7 +57,7 @@ class _PurchaseOrderDetailState extends RefreshableState 0 ? Text(attachmentCount.toString()) : null, onTap: () { Navigator.push( diff --git a/lib/widget/order/purchase_order_list.dart b/lib/widget/order/purchase_order_list.dart index d285f6ef..f19306c5 100644 --- a/lib/widget/order/purchase_order_list.dart +++ b/lib/widget/order/purchase_order_list.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/model.dart"; @@ -41,7 +41,7 @@ class _PurchaseOrderListWidgetState extends RefreshableState { if (widget.order.canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), onPressed: () { editOrder(context); }, @@ -105,7 +105,7 @@ class _SalesOrderDetailState extends RefreshableState { confirmationDialog( L10().issueOrder, "", - icon: FontAwesomeIcons.paperPlane, + icon: TablerIcons.send, color: Colors.blue, acceptText: L10().issue, onAccept: () async { @@ -121,7 +121,7 @@ class _SalesOrderDetailState extends RefreshableState { confirmationDialog( L10().cancelOrder, "", - icon: FontAwesomeIcons.circleXmark, + icon: TablerIcons.circle_x, color: Colors.red, acceptText: L10().cancel, onAccept: () async { @@ -139,7 +139,7 @@ class _SalesOrderDetailState extends RefreshableState { if (widget.order.isPending) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.paperPlane, color: Colors.blue), + child: Icon(TablerIcons.send, color: Colors.blue), label: L10().issueOrder, onTap: () async { _issueOrder(context); @@ -151,7 +151,7 @@ class _SalesOrderDetailState extends RefreshableState { if (widget.order.isOpen) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.circleXmark, color: Colors.red), + child: Icon(TablerIcons.circle_x, color: Colors.red), label: L10().cancelOrder, onTap: () async { _cancelOrder(context); @@ -164,7 +164,7 @@ class _SalesOrderDetailState extends RefreshableState { if (widget.order.isInProgress && InvenTreeSOLineItem().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.circlePlus, color: Colors.green), + child: Icon(TablerIcons.circle_plus, color: Colors.green), label: L10().lineItemAdd, onTap: () async { _addLineItem(context); @@ -174,7 +174,7 @@ class _SalesOrderDetailState extends RefreshableState { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.truck, color: Colors.green), + child: Icon(TablerIcons.circle_plus, color: Colors.green), label: L10().shipmentAdd, onTap: () async { _addShipment(context); @@ -207,7 +207,7 @@ class _SalesOrderDetailState extends RefreshableState { if (api.supportsBarcodeSOAllocateEndpoint) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.rightToBracket), + child: Icon(TablerIcons.transition_right), label: L10().allocateStock, onTap: () async { scanBarcode( @@ -299,7 +299,7 @@ class _SalesOrderDetailState extends RefreshableState { tiles.add(ListTile( title: Text(L10().projectCode), subtitle: Text("${widget.order.projectCode} - ${widget.order.projectCodeDescription}"), - leading: FaIcon(FontAwesomeIcons.list), + leading: Icon(TablerIcons.list), )); } @@ -307,7 +307,7 @@ class _SalesOrderDetailState extends RefreshableState { tiles.add(ListTile( title: Text(L10().customer), subtitle: Text(customer.name), - leading: FaIcon(FontAwesomeIcons.userTie, color: COLOR_ACTION), + leading: Icon(TablerIcons.user, color: COLOR_ACTION), onTap: () { Navigator.push( context, @@ -323,7 +323,7 @@ class _SalesOrderDetailState extends RefreshableState { tiles.add(ListTile( title: Text(L10().customerReference), subtitle: Text(widget.order.customerReference), - leading: FaIcon(FontAwesomeIcons.hashtag), + leading: Icon(TablerIcons.hash), )); } @@ -335,7 +335,7 @@ class _SalesOrderDetailState extends RefreshableState { widget.order.completedLineItemCount.toDouble(), maximum: widget.order.lineItemCount.toDouble() ), - leading: FaIcon(FontAwesomeIcons.clipboardCheck), + leading: Icon(TablerIcons.clipboard_check), trailing: Text("${widget.order.completedLineItemCount} / ${widget.order.lineItemCount}", style: TextStyle(color: lineColor)), )); @@ -345,7 +345,7 @@ class _SalesOrderDetailState extends RefreshableState { tiles.add(ListTile( title: Text(L10().targetDate), subtitle: Text(widget.order.targetDate), - leading: FaIcon(FontAwesomeIcons.calendarDays), + leading: Icon(TablerIcons.calendar), )); } @@ -353,7 +353,7 @@ class _SalesOrderDetailState extends RefreshableState { tiles.add( ListTile( title: Text(L10().notes), - leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), + leading: Icon(TablerIcons.note, color: COLOR_ACTION), onTap: () { Navigator.push( context, @@ -369,7 +369,7 @@ class _SalesOrderDetailState extends RefreshableState { tiles.add( ListTile( title: Text(L10().attachments), - leading: FaIcon(FontAwesomeIcons.fileLines, color: COLOR_ACTION), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, onTap: () { Navigator.push( @@ -407,4 +407,4 @@ class _SalesOrderDetailState extends RefreshableState { ]; } -} \ No newline at end of file +} diff --git a/lib/widget/order/sales_order_list.dart b/lib/widget/order/sales_order_list.dart index a97de809..37a8405b 100644 --- a/lib/widget/order/sales_order_list.dart +++ b/lib/widget/order/sales_order_list.dart @@ -1,7 +1,7 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/widget/order/sales_order_detail.dart"; import "package:inventree/widget/paginator.dart"; @@ -39,7 +39,7 @@ class _SalesOrderListWidgetState extends RefreshableState if (InvenTreeSalesOrder().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.circlePlus), + child: Icon(TablerIcons.circle_plus), label: L10().salesOrderCreate, onTap: () { _createSalesOrder(context); diff --git a/lib/widget/order/so_line_detail.dart b/lib/widget/order/so_line_detail.dart index a4168980..c2d41817 100644 --- a/lib/widget/order/so_line_detail.dart +++ b/lib/widget/order/so_line_detail.dart @@ -6,7 +6,7 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/barcode/barcode.dart"; import "package:inventree/barcode/sales_order.dart"; @@ -52,7 +52,7 @@ class _SOLineDetailWidgetState extends RefreshableState { if (widget.item.canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), onPressed: () { _editLineItem(context); }), @@ -87,7 +87,7 @@ class _SOLineDetailWidgetState extends RefreshableState { order!.allocate_url, fields, method: "POST", - icon: FontAwesomeIcons.rightToBracket, + icon: TablerIcons.transition_right, onSuccess: (data) async { refresh(context); } @@ -122,7 +122,7 @@ class _SOLineDetailWidgetState extends RefreshableState { if (order != null && order!.isOpen) { buttons.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.rightToBracket, color: Colors.blue), + child: Icon(TablerIcons.transition_right, color: Colors.blue), label: L10().allocateStock, onTap: () async { _allocateStock(context); @@ -143,7 +143,7 @@ class _SOLineDetailWidgetState extends RefreshableState { if (api.supportsBarcodeSOAllocateEndpoint) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.rightToBracket), + child: Icon(TablerIcons.transition_right), label: L10().allocateStock, onTap: () async { scanBarcode( @@ -184,7 +184,7 @@ class _SOLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().part), subtitle: Text(widget.item.partName), - leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), + leading: Icon(TablerIcons.box, color: COLOR_ACTION), trailing: api.getThumbnail(widget.item.partImage), onTap: () async { showLoadingOverlay(context); @@ -202,7 +202,7 @@ class _SOLineDetailWidgetState extends RefreshableState { tiles.add( ListTile( title: Text(L10().availableStock), - leading: FaIcon(FontAwesomeIcons.boxesStacked), + leading: Icon(TablerIcons.packages), trailing: Text(simpleNumberString(widget.item.availableStock)) ) ); @@ -210,7 +210,7 @@ class _SOLineDetailWidgetState extends RefreshableState { // Allocated quantity tiles.add( ListTile( - leading: FaIcon(FontAwesomeIcons.clipboardCheck), + leading: Icon(TablerIcons.clipboard_check), title: Text(L10().allocated), subtitle: ProgressBar(widget.item.allocatedRatio), trailing: Text( @@ -233,7 +233,7 @@ class _SOLineDetailWidgetState extends RefreshableState { color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING ), ), - leading: FaIcon(FontAwesomeIcons.truck) + leading: Icon(TablerIcons.truck) ) ); @@ -243,7 +243,7 @@ class _SOLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().reference), subtitle: Text(widget.item.reference), - leading: FaIcon(FontAwesomeIcons.hashtag) + leading: Icon(TablerIcons.hash) ) ); } @@ -254,7 +254,7 @@ class _SOLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().notes), subtitle: Text(widget.item.notes), - leading: FaIcon(FontAwesomeIcons.noteSticky), + leading: Icon(TablerIcons.note), ) ); } @@ -265,7 +265,7 @@ class _SOLineDetailWidgetState extends RefreshableState { ListTile( title: Text(L10().link), subtitle: Text(widget.item.link), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () async { await openLink(widget.item.link); }, diff --git a/lib/widget/order/so_shipment_list.dart b/lib/widget/order/so_shipment_list.dart index 92ddc9f9..a1e0dc74 100644 --- a/lib/widget/order/so_shipment_list.dart +++ b/lib/widget/order/so_shipment_list.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/inventree/sales_order.dart"; import "package:inventree/widget/paginator.dart"; @@ -47,7 +47,7 @@ class _PaginatedSOShipmentListState extends PaginatedSearchState extends Sta L10().filteringOptions, "", fields, - icon: FontAwesomeIcons.circleCheck, + icon: TablerIcons.circle_check, onSuccess: (Map data) async { // Extract data from the processed form @@ -487,8 +487,8 @@ abstract class PaginatedSearchState extends Sta Widget buildSearchInput(BuildContext context) { return ListTile( trailing: GestureDetector( - child: FaIcon( - searchController.text.isEmpty ? FontAwesomeIcons.magnifyingGlass : FontAwesomeIcons.deleteLeft, + child: Icon( + searchController.text.isEmpty ? TablerIcons.search : TablerIcons.backspace, color: searchController.text.isNotEmpty ? COLOR_DANGER : COLOR_ACTION, ), onTap: () { @@ -526,7 +526,7 @@ class NoResultsWidget extends StatelessWidget { description, style: TextStyle(fontStyle: FontStyle.italic), ), - leading: FaIcon(FontAwesomeIcons.circleExclamation, color: COLOR_WARNING), + leading: Icon(TablerIcons.exclamation_circle, color: COLOR_WARNING), ); } diff --git a/lib/widget/part/bom_list.dart b/lib/widget/part/bom_list.dart index d9e16bb3..b599a628 100644 --- a/lib/widget/part/bom_list.dart +++ b/lib/widget/part/bom_list.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/helpers.dart"; @@ -48,7 +48,7 @@ class _BillOfMaterialsState extends RefreshableState { @override List appBarActions(BuildContext context) => [ IconButton( - icon: FaIcon(FontAwesomeIcons.filter), + icon: Icon(TablerIcons.filter), onPressed: () async { setState(() { showFilterOptions = !showFilterOptions; diff --git a/lib/widget/part/category_display.dart b/lib/widget/part/category_display.dart index 35be18cb..bc7ab089 100644 --- a/lib/widget/part/category_display.dart +++ b/lib/widget/part/category_display.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/l10.dart"; @@ -41,7 +41,7 @@ class _CategoryDisplayState extends RefreshableState { if (InvenTreePartCategory().canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), tooltip: L10().editCategory, onPressed: () { _editCategoryDialog(context); @@ -61,7 +61,7 @@ class _CategoryDisplayState extends RefreshableState { if (InvenTreePart().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.shapes), + child: Icon(TablerIcons.box), label: L10().partCreateDetail, onTap: _newPart, ) @@ -71,7 +71,7 @@ class _CategoryDisplayState extends RefreshableState { if (InvenTreePartCategory().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.sitemap), + child: Icon(TablerIcons.sitemap), label: L10().categoryCreateDetail, onTap: () { _newCategory(context); @@ -123,7 +123,7 @@ class _CategoryDisplayState extends RefreshableState { if (widget.category == null) { return Card( child: ListTile( - leading: FaIcon(FontAwesomeIcons.shapes), + leading: Icon(TablerIcons.packages), title: Text( L10().partCategoryTopLevel, style: TextStyle(fontStyle: FontStyle.italic), @@ -138,7 +138,7 @@ class _CategoryDisplayState extends RefreshableState { style: TextStyle(fontWeight: FontWeight.bold) ), subtitle: Text("${widget.category?.description}"), - leading: widget.category!.customIcon ?? FaIcon(FontAwesomeIcons.sitemap), + leading: widget.category!.customIcon != null ? Icon(widget.category!.customIcon) : Icon(TablerIcons.sitemap) ), ]; @@ -147,8 +147,8 @@ class _CategoryDisplayState extends RefreshableState { ListTile( title: Text(L10().parentCategory), subtitle: Text("${widget.category?.parentPathString}"), - leading: FaIcon( - FontAwesomeIcons.turnUp, + leading: Icon( + TablerIcons.arrow_move_up, color: COLOR_ACTION, ), onTap: () async { diff --git a/lib/widget/part/category_list.dart b/lib/widget/part/category_list.dart index a2031027..cc5a40e2 100644 --- a/lib/widget/part/category_list.dart +++ b/lib/widget/part/category_list.dart @@ -98,7 +98,7 @@ class _PaginatedPartCategoryListState extends PaginatedSearchState { if (InvenTreePart().canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), tooltip: L10().editPart, onPressed: () { _editPartDialog(context); @@ -109,7 +108,7 @@ class _PartDisplayState extends RefreshableState { if (InvenTreeStockItem().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.box), + child: Icon(TablerIcons.packages), label: L10().stockItemCreate, onTap: () { _newStockItem(context); @@ -121,7 +120,7 @@ class _PartDisplayState extends RefreshableState { if (labels.isNotEmpty) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.print), + child: Icon(TablerIcons.printer), label: L10().printLabel, onTap: () async { selectAndPrintLabel( @@ -329,8 +328,8 @@ class _PartDisplayState extends RefreshableState { color: COLOR_DANGER ) ), - leading: FaIcon( - FontAwesomeIcons.circleExclamation, + leading: Icon( + TablerIcons.exclamation_circle, color: COLOR_DANGER ), ) @@ -363,7 +362,7 @@ class _PartDisplayState extends RefreshableState { ListTile( title: Text(L10().partCategory), subtitle: Text("${part.categoryName}"), - leading: FaIcon(FontAwesomeIcons.sitemap, color: COLOR_ACTION), + leading: Icon(TablerIcons.sitemap, color: COLOR_ACTION), onTap: () async { if (part.categoryId > 0) { @@ -384,7 +383,7 @@ class _PartDisplayState extends RefreshableState { ListTile( title: Text(L10().partCategory), subtitle: Text(L10().partCategoryTopLevel), - leading: FaIcon(FontAwesomeIcons.sitemap, color: COLOR_ACTION), + leading: Icon(TablerIcons.sitemap, color: COLOR_ACTION), onTap: () { Navigator.push(context, MaterialPageRoute( builder: (context) => CategoryDisplayWidget(null))); @@ -398,7 +397,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().variants), - leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), + leading: Icon(TablerIcons.versions, color: COLOR_ACTION), trailing: Text(variantCount.toString()), onTap: () { Navigator.push( @@ -421,7 +420,7 @@ class _PartDisplayState extends RefreshableState { ListTile( title: Text(L10().availableStock), subtitle: Text(L10().stockDetails), - leading: FaIcon(FontAwesomeIcons.boxesStacked), + leading: Icon(TablerIcons.packages), trailing: Text( part.stockString(), style: TextStyle( @@ -439,7 +438,7 @@ class _PartDisplayState extends RefreshableState { ListTile( title: Text(L10().onOrder), subtitle: Text(L10().onOrderDetails), - leading: FaIcon(FontAwesomeIcons.cartShopping), + leading: Icon(TablerIcons.shopping_cart), trailing: Text("${part.onOrderString}"), onTap: () { // TODO - Order views @@ -456,7 +455,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().billOfMaterials), - leading: FaIcon(FontAwesomeIcons.tableList, color: COLOR_ACTION), + leading: Icon(TablerIcons.list_tree, color: COLOR_ACTION), trailing: Text(bomCount.toString()), onTap: () { Navigator.push(context, MaterialPageRoute( @@ -471,7 +470,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().building), - leading: FaIcon(FontAwesomeIcons.screwdriverWrench), + leading: Icon(TablerIcons.tools), trailing: Text("${simpleNumberString(part.building)}"), onTap: () { // TODO @@ -487,7 +486,7 @@ class _PartDisplayState extends RefreshableState { ListTile( title: Text(L10().usedIn), subtitle: Text(L10().usedInDetails), - leading: FaIcon(FontAwesomeIcons.layerGroup, color: COLOR_ACTION), + leading: Icon(TablerIcons.stack_2, color: COLOR_ACTION), trailing: Text(usedInCount.toString()), onTap: () { Navigator.push( @@ -507,7 +506,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text("${part.keywords}"), - leading: FaIcon(FontAwesomeIcons.tags), + leading: Icon(TablerIcons.tags), ) ); } @@ -517,7 +516,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text("${part.link}"), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () { part.openLink(); }, @@ -532,7 +531,7 @@ class _PartDisplayState extends RefreshableState { ListTile( title: Text(L10().usedIn), subtitle: Text(L10().usedInDetails), - leading: FaIcon(FontAwesomeIcons.sitemap), + leading: Icon(TablerIcons.sitemap), trailing: Text("${part.usedInCount}"), onTap: () { // TODO @@ -547,7 +546,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().suppliers), - leading: FaIcon(FontAwesomeIcons.industry, color: COLOR_ACTION), + leading: Icon(TablerIcons.building_factory, color: COLOR_ACTION), trailing: Text("${part.supplierCount}"), onTap: () { Navigator.push( @@ -566,7 +565,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().notes), - leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), + leading: Icon(TablerIcons.note, color: COLOR_ACTION), trailing: Text(""), onTap: () { Navigator.push( @@ -580,7 +579,7 @@ class _PartDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().attachments), - leading: FaIcon(FontAwesomeIcons.fileLines, color: COLOR_ACTION), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, onTap: () { Navigator.push( diff --git a/lib/widget/part/part_image_widget.dart b/lib/widget/part/part_image_widget.dart index 68b12bde..41da3714 100644 --- a/lib/widget/part/part_image_widget.dart +++ b/lib/widget/part/part_image_widget.dart @@ -1,8 +1,7 @@ import "dart:io"; import "package:flutter/material.dart"; - -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/inventree/part.dart"; @@ -47,7 +46,7 @@ class _PartImageState extends RefreshableState { // File upload actions.add( IconButton( - icon: FaIcon(FontAwesomeIcons.fileArrowUp), + icon: Icon(TablerIcons.file_upload), onPressed: () async { FilePickerDialog.pickFile( diff --git a/lib/widget/refreshable_state.dart b/lib/widget/refreshable_state.dart index c2ce12b9..8296b7e1 100644 --- a/lib/widget/refreshable_state.dart +++ b/lib/widget/refreshable_state.dart @@ -1,5 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; @@ -85,7 +86,7 @@ mixin BaseWidgetProperties { }, ), IconButton( - icon: Icon(Icons.search, color: COLOR_ACTION), + icon: Icon(TablerIcons.search, color: COLOR_ACTION), iconSize: iconSize, onPressed: () { if (InvenTreeAPI().checkConnection()) { diff --git a/lib/widget/search.dart b/lib/widget/search.dart index a899c83c..dfa0d138 100644 --- a/lib/widget/search.dart +++ b/lib/widget/search.dart @@ -1,7 +1,7 @@ import "dart:async"; import "package:async/async.dart"; import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; @@ -357,8 +357,8 @@ class _SearchDisplayState extends RefreshableState { }, ), trailing: GestureDetector( - child: FaIcon( - searchController.text.isEmpty ? FontAwesomeIcons.magnifyingGlass : FontAwesomeIcons.deleteLeft, + child: Icon( + searchController.text.isEmpty ? TablerIcons.search : TablerIcons.backspace, color: searchController.text.isEmpty ? COLOR_ACTION : COLOR_DANGER, ), onTap: () { @@ -379,7 +379,7 @@ class _SearchDisplayState extends RefreshableState { results.add( ListTile( title: Text(L10().parts), - leading: FaIcon(FontAwesomeIcons.shapes), + leading: Icon(TablerIcons.box), trailing: Text("${nPartResults}"), onTap: () { Navigator.push( @@ -402,7 +402,7 @@ class _SearchDisplayState extends RefreshableState { results.add( ListTile( title: Text(L10().partCategories), - leading: FaIcon(FontAwesomeIcons.sitemap), + leading: Icon(TablerIcons.sitemap), trailing: Text("${nCategoryResults}"), onTap: () { Navigator.push( @@ -425,7 +425,7 @@ class _SearchDisplayState extends RefreshableState { results.add( ListTile( title: Text(L10().stockItems), - leading: FaIcon(FontAwesomeIcons.boxesStacked), + leading: Icon(TablerIcons.package), trailing: Text("${nStockResults}"), onTap: () { Navigator.push( @@ -448,7 +448,7 @@ class _SearchDisplayState extends RefreshableState { results.add( ListTile( title: Text(L10().stockLocations), - leading: FaIcon(FontAwesomeIcons.locationDot), + leading: Icon(TablerIcons.location), trailing: Text("${nLocationResults}"), onTap: () { Navigator.push( @@ -471,7 +471,7 @@ class _SearchDisplayState extends RefreshableState { results.add( ListTile( title: Text(L10().suppliers), - leading: FaIcon(FontAwesomeIcons.building), + leading: Icon(TablerIcons.building), trailing: Text("${nSupplierResults}"), onTap: () { Navigator.push( @@ -496,7 +496,7 @@ class _SearchDisplayState extends RefreshableState { results.add( ListTile( title: Text(L10().purchaseOrders), - leading: FaIcon(FontAwesomeIcons.cartShopping), + leading: Icon(TablerIcons.shopping_cart), trailing: Text("${nPurchaseOrderResults}"), onTap: () { Navigator.push( @@ -518,7 +518,7 @@ class _SearchDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().searching), - leading: FaIcon(FontAwesomeIcons.magnifyingGlass), + leading: Icon(TablerIcons.search), trailing: CircularProgressIndicator(), ) ); @@ -531,7 +531,7 @@ class _SearchDisplayState extends RefreshableState { L10().queryNoResults, style: TextStyle(fontStyle: FontStyle.italic), ), - leading: FaIcon(FontAwesomeIcons.magnifyingGlassMinus), + leading: Icon(TablerIcons.zoom_cancel), ) ); } else { diff --git a/lib/widget/snacks.dart b/lib/widget/snacks.dart index b5341aff..66f5f152 100644 --- a/lib/widget/snacks.dart +++ b/lib/widget/snacks.dart @@ -1,5 +1,5 @@ import "package:flutter/material.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:one_context/one_context.dart"; import "package:inventree/helpers.dart"; @@ -32,14 +32,14 @@ void showSnackIcon(String text, {IconData? icon, Function()? onAction, bool? suc // Select an icon if we do not have an action if (icon == null && onAction == null) { - icon = FontAwesomeIcons.circleCheck; + icon = TablerIcons.circle_check; } } else if (success != null && success == false) { backgroundColor = Colors.deepOrange; if (icon == null && onAction == null) { - icon = FontAwesomeIcons.circleExclamation; + icon = TablerIcons.exclamation_circle; } } @@ -51,7 +51,7 @@ void showSnackIcon(String text, {IconData? icon, Function()? onAction, bool? suc ]; if (icon != null) { - childs.add(FaIcon(icon)); + childs.add(Icon(icon)); } OneContext().showSnackBar(builder: (context) => SnackBar( diff --git a/lib/widget/spinner.dart b/lib/widget/spinner.dart index 5e9d598d..3ac68c50 100644 --- a/lib/widget/spinner.dart +++ b/lib/widget/spinner.dart @@ -1,6 +1,4 @@ import "package:flutter/material.dart"; - -import "package:font_awesome_flutter/font_awesome_flutter.dart"; import "package:inventree/app_colors.dart"; class Spinner extends StatefulWidget { @@ -31,7 +29,7 @@ class _SpinnerState extends State with SingleTickerProviderStateMixin { duration: Duration(milliseconds: 2000), ) ..repeat(); - _child = FaIcon( + _child = Icon( widget.icon, color: widget.color ); diff --git a/lib/widget/stock/location_display.dart b/lib/widget/stock/location_display.dart index 0251667d..377325fe 100644 --- a/lib/widget/stock/location_display.dart +++ b/lib/widget/stock/location_display.dart @@ -1,7 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; - -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; import "package:inventree/barcode/barcode.dart"; @@ -70,7 +69,7 @@ class _LocationDisplayState extends RefreshableState { if (location != null && InvenTreeStockLocation().canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), tooltip: L10().editLocation, onPressed: () { _editLocationDialog(context); @@ -92,7 +91,7 @@ class _LocationDisplayState extends RefreshableState { if (InvenTreeStockItem().canEdit) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.qrcode), + child: Icon(TablerIcons.qrcode), label: L10().barcodeScanItem, onTap: () { scanBarcode( @@ -125,7 +124,7 @@ class _LocationDisplayState extends RefreshableState { if (InvenTreeStockLocation().canEdit) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.qrcode), + child: Icon(TablerIcons.qrcode), label: L10().transferStockLocation, onTap: () { scanBarcode( @@ -160,7 +159,7 @@ class _LocationDisplayState extends RefreshableState { if (InvenTreeStockLocation().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.sitemap), + child: Icon(TablerIcons.sitemap), label: L10().locationCreate, onTap: () async { _newLocation(context); @@ -173,7 +172,7 @@ class _LocationDisplayState extends RefreshableState { if (InvenTreeStockItem().canCreate) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.boxesStacked), + child: Icon(TablerIcons.packages), label: L10().stockItemCreate, onTap: () async { _newStockItem(context); @@ -185,7 +184,7 @@ class _LocationDisplayState extends RefreshableState { if (widget.location != null && labels.isNotEmpty) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.print), + child: Icon(TablerIcons.printer), label: L10().printLabel, onTap: () async { selectAndPrintLabel( @@ -334,7 +333,7 @@ class _LocationDisplayState extends RefreshableState { L10().stockTopLevel, style: TextStyle(fontStyle: FontStyle.italic) ), - leading: FaIcon(FontAwesomeIcons.boxesStacked), + leading: Icon(TablerIcons.packages), ) ); } else { @@ -342,8 +341,7 @@ class _LocationDisplayState extends RefreshableState { ListTile( title: Text("${location!.name}"), subtitle: Text("${location!.description}"), - leading: location!.customIcon ?? - FaIcon(FontAwesomeIcons.boxesStacked), + leading: location!.customIcon == null ? Icon(TablerIcons.packages) : Icon(location!.customIcon) ), ]; @@ -352,7 +350,7 @@ class _LocationDisplayState extends RefreshableState { ListTile( title: Text(L10().parentLocation), subtitle: Text("${location!.parentPathString}"), - leading: FaIcon(FontAwesomeIcons.turnUp, color: COLOR_ACTION), + leading: Icon(TablerIcons.arrow_move_up, color: COLOR_ACTION), onTap: () async { int parentId = location?.parentId ?? -1; diff --git a/lib/widget/stock/location_list.dart b/lib/widget/stock/location_list.dart index a8bc2fe9..c8506a9c 100644 --- a/lib/widget/stock/location_list.dart +++ b/lib/widget/stock/location_list.dart @@ -85,7 +85,7 @@ class _PaginatedStockLocationListState extends PaginatedSearchState { if (widget.item.canEdit) { actions.add( IconButton( - icon: Icon(Icons.edit_square), + icon: Icon(TablerIcons.edit), tooltip: L10().editItem, onPressed: () { _editStockItem(context); @@ -94,7 +94,7 @@ class _StockItemDisplayState extends RefreshableState { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.circleCheck, color: Colors.blue), + child: Icon(TablerIcons.circle_check, color: Colors.blue), label: L10().countStock, onTap: _countStockDialog, ) @@ -102,7 +102,7 @@ class _StockItemDisplayState extends RefreshableState { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.circleMinus, color: Colors.red), + child: Icon(TablerIcons.circle_minus, color: Colors.red), label: L10().removeStock, onTap: _removeStockDialog, ) @@ -110,7 +110,7 @@ class _StockItemDisplayState extends RefreshableState { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.circlePlus, color: Colors.green), + child: Icon(TablerIcons.circle_plus, color: Colors.green), label: L10().addStock, onTap: _addStockDialog, ) @@ -120,7 +120,7 @@ class _StockItemDisplayState extends RefreshableState { // Transfer item actions.add( SpeedDialChild( - child: Icon(Icons.trolley), + child: Icon(TablerIcons.transfer), label: L10().transferStock, onTap: () { _transferStockDialog(context); @@ -132,7 +132,7 @@ class _StockItemDisplayState extends RefreshableState { if (labels.isNotEmpty) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.print), + child: Icon(TablerIcons.printer), label: L10().printLabel, onTap: () async { selectAndPrintLabel( @@ -150,7 +150,7 @@ class _StockItemDisplayState extends RefreshableState { if (widget.item.canDelete) { actions.add( SpeedDialChild( - child: FaIcon(FontAwesomeIcons.trashCan, color: Colors.red), + child: Icon(TablerIcons.trash, color: Colors.red), label: L10().stockItemDelete, onTap: () { _deleteItem(context); @@ -284,7 +284,7 @@ class _StockItemDisplayState extends RefreshableState { confirmationDialog( L10().stockItemDelete, L10().stockItemDeleteConfirm, - icon: FontAwesomeIcons.trashCan, + icon: TablerIcons.trash, color: Colors.red, acceptText: L10().delete, onAccept: () async { @@ -353,7 +353,7 @@ class _StockItemDisplayState extends RefreshableState { InvenTreeStockItem.addStockUrl(), fields, method: "POST", - icon: FontAwesomeIcons.circlePlus, + icon: TablerIcons.circle_plus, onSuccess: (data) async { _stockUpdateMessage(true); refresh(context); @@ -394,7 +394,7 @@ class _StockItemDisplayState extends RefreshableState { InvenTreeStockItem.removeStockUrl(), fields, method: "POST", - icon: FontAwesomeIcons.circleMinus, + icon: TablerIcons.circle_minus, onSuccess: (data) async { _stockUpdateMessage(true); refresh(context); @@ -425,7 +425,7 @@ class _StockItemDisplayState extends RefreshableState { InvenTreeStockItem.countStockUrl(), fields, method: "POST", - icon: FontAwesomeIcons.clipboardCheck, + icon: TablerIcons.clipboard_check, onSuccess: (data) async { _stockUpdateMessage(true); refresh(context); @@ -446,7 +446,7 @@ class _StockItemDisplayState extends RefreshableState { InvenTreeStockItem.transferStockUrl(), fields, method: "POST", - icon: FontAwesomeIcons.dolly, + icon: TablerIcons.transfer, onSuccess: (data) async { _stockUpdateMessage(true); refresh(context); @@ -506,8 +506,8 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(L10().stockLocation), subtitle: Text("${widget.item.locationPathString}"), - leading: FaIcon( - FontAwesomeIcons.locationDot, + leading: Icon( + TablerIcons.location, color: COLOR_ACTION, ), onTap: () async { @@ -529,7 +529,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().stockLocation), - leading: FaIcon(FontAwesomeIcons.locationDot), + leading: Icon(TablerIcons.location), subtitle: Text(L10().locationNotSet), ) ); @@ -540,7 +540,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().serialNumber), - leading: FaIcon(FontAwesomeIcons.hashtag), + leading: Icon(TablerIcons.hash), subtitle: Text("${widget.item.serialNumber}"), ) ); @@ -548,7 +548,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: widget.item.allocated > 0 ? Text(L10().quantityAvailable) : Text(L10().quantity), - leading: FaIcon(FontAwesomeIcons.cubes), + leading: Icon(TablerIcons.packages), trailing: Text("${widget.item.quantityString()}"), ) ); @@ -558,7 +558,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().status), - leading: FaIcon(FontAwesomeIcons.circleInfo), + leading: Icon(TablerIcons.help_circle), trailing: Text( api.StockStatus.label(widget.item.status), style: TextStyle( @@ -574,7 +574,7 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(L10().supplierPart), subtitle: Text(widget.item.supplierSKU), - leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), + leading: Icon(TablerIcons.building, color: COLOR_ACTION), trailing: InvenTreeAPI().getThumbnail(widget.item.supplierImage, hideIfNull: true), onTap: () async { showLoadingOverlay(context); @@ -596,7 +596,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().inProduction), - leading: FaIcon(FontAwesomeIcons.screwdriverWrench), + leading: Icon(TablerIcons.tools), subtitle: Text(L10().inProductionDetail), onTap: () { // TODO: Click through to the "build order" @@ -610,7 +610,7 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(L10().batchCode), subtitle: Text(widget.item.batch), - leading: FaIcon(FontAwesomeIcons.layerGroup), + leading: Icon(TablerIcons.clipboard_text), ) ); } @@ -620,7 +620,7 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(L10().packaging), subtitle: Text(widget.item.packaging), - leading: FaIcon(FontAwesomeIcons.boxesPacking), + leading: Icon(TablerIcons.package), ) ); } @@ -632,7 +632,7 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(L10().lastUpdated), subtitle: Text(widget.item.updatedDateString), - leading: FaIcon(FontAwesomeIcons.calendarDays) + leading: Icon(TablerIcons.calendar) ) ); } @@ -643,7 +643,7 @@ class _StockItemDisplayState extends RefreshableState { ListTile( title: Text(L10().lastStocktake), subtitle: Text(widget.item.stocktakeDateString), - leading: FaIcon(FontAwesomeIcons.calendarDays) + leading: Icon(TablerIcons.calendar) ) ); } @@ -652,7 +652,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text("${widget.item.link}"), - leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), + leading: Icon(TablerIcons.link, color: COLOR_ACTION), onTap: () { widget.item.openLink(); }, @@ -664,7 +664,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().testResults), - leading: FaIcon(FontAwesomeIcons.listCheck, color: COLOR_ACTION), + leading: Icon(TablerIcons.list_check, color: COLOR_ACTION), trailing: Text("${widget.item.testResultCount}"), onTap: () { Navigator.push( @@ -683,7 +683,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().purchasePrice), - leading: FaIcon(FontAwesomeIcons.dollarSign), + leading: Icon(TablerIcons.currency_dollar), trailing: Text( renderCurrency(widget.item.purchasePrice, widget.item.purchasePriceCurrency) ) @@ -697,7 +697,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().history), - leading: FaIcon(FontAwesomeIcons.clockRotateLeft, color: COLOR_ACTION), + leading: Icon(TablerIcons.history, color: COLOR_ACTION), trailing: Text("${widget.item.trackingItemCount}"), onTap: () { Navigator.push( @@ -716,7 +716,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().notes), - leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), + leading: Icon(TablerIcons.note, color: COLOR_ACTION), onTap: () { Navigator.push( context, @@ -729,7 +729,7 @@ class _StockItemDisplayState extends RefreshableState { tiles.add( ListTile( title: Text(L10().attachments), - leading: FaIcon(FontAwesomeIcons.fileLines, color: COLOR_ACTION), + leading: Icon(TablerIcons.file, color: COLOR_ACTION), trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, onTap: () { Navigator.push( diff --git a/lib/widget/stock/stock_item_test_results.dart b/lib/widget/stock/stock_item_test_results.dart index b6315d91..c65422d2 100644 --- a/lib/widget/stock/stock_item_test_results.dart +++ b/lib/widget/stock/stock_item_test_results.dart @@ -1,6 +1,6 @@ import "package:flutter/material.dart"; import "package:flutter_speed_dial/flutter_speed_dial.dart"; -import "package:font_awesome_flutter/font_awesome_flutter.dart"; +import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/api.dart"; import "package:inventree/app_colors.dart"; @@ -42,7 +42,7 @@ class _StockItemTestResultDisplayState extends RefreshableState