mirror of
				https://github.com/inventree/inventree-app.git
				synced 2025-10-31 05:15:42 +00:00 
			
		
		
		
	Change from fontawesome to tabler icons (#516)
* Change from fontawesome to tabler icons - Consistent with the frontend * Cleanup conflicts * Use double quotes * remove unused import * Update release notes * Migrate some google icons to tabler icons * Icon update * Properly support display of custom icons * Fix lookup
This commit is contained in:
		| @@ -3,6 +3,7 @@ | |||||||
|  |  | ||||||
| - Support "ON_HOLD" status for Purchase Orders | - Support "ON_HOLD" status for Purchase Orders | ||||||
| - Support "ON_HOLD" status for Sales Orders | - Support "ON_HOLD" status for Sales Orders | ||||||
|  | - Change base icon package from FontAwesome to TablerIcons | ||||||
|  |  | ||||||
| ### 0.16.1 - July 2024 | ### 0.16.1 - July 2024 | ||||||
| --- | --- | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								lib/api.dart
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								lib/api.dart
									
									
									
									
									
								
							| @@ -10,7 +10,7 @@ import "package:one_context/one_context.dart"; | |||||||
| import "package:open_filex/open_filex.dart"; | import "package:open_filex/open_filex.dart"; | ||||||
| import "package:cached_network_image/cached_network_image.dart"; | import "package:cached_network_image/cached_network_image.dart"; | ||||||
| import "package:flutter/material.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:flutter_cache_manager/flutter_cache_manager.dart"; | ||||||
| import "package:path_provider/path_provider.dart"; | import "package:path_provider/path_provider.dart"; | ||||||
|  |  | ||||||
| @@ -261,7 +261,7 @@ class InvenTreeAPI { | |||||||
|       showSnackIcon( |       showSnackIcon( | ||||||
|         L10().notConnected, |         L10().notConnected, | ||||||
|         success: false, |         success: false, | ||||||
|         icon: FontAwesomeIcons.server |         icon: TablerIcons.server | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
|       return false; |       return false; | ||||||
| @@ -428,7 +428,7 @@ class InvenTreeAPI { | |||||||
|     if (address.isEmpty) { |     if (address.isEmpty) { | ||||||
|       showSnackIcon( |       showSnackIcon( | ||||||
|           L10().incompleteDetails, |           L10().incompleteDetails, | ||||||
|           icon: FontAwesomeIcons.circleExclamation, |           icon: TablerIcons.exclamation_circle, | ||||||
|           success: false |           success: false | ||||||
|       ); |       ); | ||||||
|       return false; |       return false; | ||||||
| @@ -637,7 +637,7 @@ class InvenTreeAPI { | |||||||
|       showSnackIcon( |       showSnackIcon( | ||||||
|           L10().profileSelect, |           L10().profileSelect, | ||||||
|           success: false, |           success: false, | ||||||
|           icon: FontAwesomeIcons.circleExclamation |           icon: TablerIcons.exclamation_circle | ||||||
|       ); |       ); | ||||||
|       return false; |       return false; | ||||||
|     } |     } | ||||||
| @@ -655,7 +655,7 @@ class InvenTreeAPI { | |||||||
|     if (_connected) { |     if (_connected) { | ||||||
|       showSnackIcon( |       showSnackIcon( | ||||||
|         L10().serverConnected, |         L10().serverConnected, | ||||||
|         icon: FontAwesomeIcons.server, |         icon: TablerIcons.server, | ||||||
|         success: true, |         success: true, | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
| @@ -1485,7 +1485,7 @@ class InvenTreeAPI { | |||||||
|     return CachedNetworkImage( |     return CachedNetworkImage( | ||||||
|       imageUrl: url, |       imageUrl: url, | ||||||
|       placeholder: (context, url) => CircularProgressIndicator(), |       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(), |       httpHeaders: defaultHeaders(), | ||||||
|       height: height, |       height: height, | ||||||
|       width: width, |       width: width, | ||||||
| @@ -1589,7 +1589,7 @@ class InvenTreeAPI { | |||||||
|           L10().locateLocation, |           L10().locateLocation, | ||||||
|           "", |           "", | ||||||
|           fields, |           fields, | ||||||
|           icon: FontAwesomeIcons.magnifyingGlassLocation, |           icon: TablerIcons.location_search, | ||||||
|           onSuccess: (Map<String, dynamic> data) async { |           onSuccess: (Map<String, dynamic> data) async { | ||||||
|             plugin_name = (data["plugin"] ?? "") as String; |             plugin_name = (data["plugin"] ?? "") as String; | ||||||
|           } |           } | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| import "dart:io"; | import "dart:io"; | ||||||
|  |  | ||||||
| import "package:intl/intl.dart"; | 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:dropdown_search/dropdown_search.dart"; | ||||||
| import "package:datetime_picker_formfield/datetime_picker_formfield.dart"; | import "package:datetime_picker_formfield/datetime_picker_formfield.dart"; | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| @@ -335,7 +335,7 @@ class APIFormField { | |||||||
|           controller: controller, |           controller: controller, | ||||||
|         ), |         ), | ||||||
|         trailing: IconButton( |         trailing: IconButton( | ||||||
|           icon: Icon(Icons.qr_code), |           icon: Icon(TablerIcons.qrcode), | ||||||
|           onPressed: () async { |           onPressed: () async { | ||||||
|             var handler = UniqueBarcodeHandler((String hash) { |             var handler = UniqueBarcodeHandler((String hash) { | ||||||
|               controller.text = hash; |               controller.text = hash; | ||||||
| @@ -409,7 +409,7 @@ class APIFormField { | |||||||
|           controller: controller, |           controller: controller, | ||||||
|         ), |         ), | ||||||
|         trailing: IconButton( |         trailing: IconButton( | ||||||
|           icon: FaIcon(FontAwesomeIcons.circlePlus), |           icon: Icon(TablerIcons.circle_plus), | ||||||
|           onPressed: () async { |           onPressed: () async { | ||||||
|             FilePickerDialog.pickFile( |             FilePickerDialog.pickFile( | ||||||
|               message: L10().attachmentSelect, |               message: L10().attachmentSelect, | ||||||
| @@ -705,7 +705,7 @@ class APIFormField { | |||||||
|         bool isGroup = (data["label"] ?? "") == "group"; |         bool isGroup = (data["label"] ?? "") == "group"; | ||||||
|         return ListTile( |         return ListTile( | ||||||
|           title: Text(name), |           title: Text(name), | ||||||
|           leading: FaIcon(isGroup ? FontAwesomeIcons.users : FontAwesomeIcons.user), |           leading: Icon(isGroup ? TablerIcons.users : TablerIcons.user), | ||||||
|         ); |         ); | ||||||
|       case "contact": |       case "contact": | ||||||
|         String name = (data["name"] ?? "") as String; |         String name = (data["name"] ?? "") as String; | ||||||
| @@ -726,7 +726,7 @@ class APIFormField { | |||||||
|         return ListTile( |         return ListTile( | ||||||
|             title: Text(project_code.code), |             title: Text(project_code.code), | ||||||
|             subtitle: Text(project_code.description), |             subtitle: Text(project_code.description), | ||||||
|             leading: FaIcon(FontAwesomeIcons.list) |             leading: Icon(TablerIcons.list) | ||||||
|         ); |         ); | ||||||
|       default: |       default: | ||||||
|         return ListTile( |         return ListTile( | ||||||
| @@ -745,7 +745,7 @@ class APIFormField { | |||||||
|   // Construct a widget to instruct the user that no results were found |   // Construct a widget to instruct the user that no results were found | ||||||
|   Widget _renderEmptyResult() { |   Widget _renderEmptyResult() { | ||||||
|     return ListTile( |     return ListTile( | ||||||
|       leading: FaIcon(FontAwesomeIcons.magnifyingGlass), |       leading: Icon(TablerIcons.search), | ||||||
|       title: Text(L10().noResults), |       title: Text(L10().noResults), | ||||||
|       subtitle: Text( |       subtitle: Text( | ||||||
|         L10().queryNoResults, |         L10().queryNoResults, | ||||||
| @@ -955,7 +955,7 @@ Future<void> launchApiForm( | |||||||
|       String method = "PATCH", |       String method = "PATCH", | ||||||
|       Function(Map<String, dynamic>)? onSuccess, |       Function(Map<String, dynamic>)? onSuccess, | ||||||
|       Function? onCancel, |       Function? onCancel, | ||||||
|       IconData icon = FontAwesomeIcons.floppyDisk, |       IconData icon = TablerIcons.device_floppy | ||||||
|     }) async { |     }) async { | ||||||
|  |  | ||||||
|   showLoadingOverlay(context); |   showLoadingOverlay(context); | ||||||
| @@ -979,7 +979,7 @@ Future<void> launchApiForm( | |||||||
|       // User does not have permission to perform this action |       // User does not have permission to perform this action | ||||||
|       showSnackIcon( |       showSnackIcon( | ||||||
|         L10().response403, |         L10().response403, | ||||||
|         icon: FontAwesomeIcons.userXmark, |         icon: TablerIcons.user_x, | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
|       hideLoadingOverlay(); |       hideLoadingOverlay(); | ||||||
| @@ -1061,7 +1061,7 @@ class APIFormWidget extends StatefulWidget { | |||||||
|         Key? key, |         Key? key, | ||||||
|         this.onSuccess, |         this.onSuccess, | ||||||
|         this.fileField = "", |         this.fileField = "", | ||||||
|         this.icon = FontAwesomeIcons.floppyDisk, |         this.icon = TablerIcons.device_floppy, | ||||||
|       } |       } | ||||||
|       ) : super(key: key); |       ) : super(key: key); | ||||||
|  |  | ||||||
| @@ -1114,8 +1114,8 @@ class _APIFormWidgetState extends State<APIFormWidget> { | |||||||
|                 color: COLOR_DANGER, |                 color: COLOR_DANGER, | ||||||
|               ), |               ), | ||||||
|             ), |             ), | ||||||
|             leading: FaIcon( |             leading: Icon( | ||||||
|               FontAwesomeIcons.circleExclamation, |               TablerIcons.exclamation_circle, | ||||||
|               color: COLOR_DANGER |               color: COLOR_DANGER | ||||||
|             ), |             ), | ||||||
|           ) |           ) | ||||||
| @@ -1487,7 +1487,7 @@ class _APIFormWidgetState extends State<APIFormWidget> { | |||||||
|         title: Text(widget.title), |         title: Text(widget.title), | ||||||
|         actions: [ |         actions: [ | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon: FaIcon(widget.icon), |             icon: Icon(widget.icon), | ||||||
|             onPressed: () { |             onPressed: () { | ||||||
|  |  | ||||||
|               if (_formKey.currentState!.validate()) { |               if (_formKey.currentState!.validate()) { | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  |  | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/inventree/sales_order.dart"; | ||||||
| import "package:inventree/preferences.dart"; | import "package:inventree/preferences.dart"; | ||||||
| import "package:inventree/widget/order/sales_order_detail.dart"; | import "package:inventree/widget/order/sales_order_detail.dart"; | ||||||
| @@ -121,7 +121,7 @@ class BarcodeScanHandler extends BarcodeHandler { | |||||||
|  |  | ||||||
|     showSnackIcon( |     showSnackIcon( | ||||||
|         L10().barcodeNoMatch, |         L10().barcodeNoMatch, | ||||||
|         icon: FontAwesomeIcons.circleExclamation, |         icon: TablerIcons.exclamation_circle, | ||||||
|         success: false, |         success: false, | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "dart:io"; | import "dart:io"; | ||||||
| import "package:flutter/material.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/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/preferences.dart"; | import "package:inventree/preferences.dart"; | ||||||
|  |  | ||||||
| @@ -124,11 +124,11 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { | |||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     Widget actionIcon = |     Widget actionIcon = | ||||||
|         FaIcon(FontAwesomeIcons.circlePause, color: COLOR_WARNING, size: 64); |         Icon(TablerIcons.player_pause, color: COLOR_WARNING, size: 64); | ||||||
|  |  | ||||||
|     if (scanning_paused) { |     if (scanning_paused) { | ||||||
|       actionIcon = |       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; |     String info_text = scanning_paused ? L10().barcodeScanPaused : L10().barcodeScanPause; | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
|  |  | ||||||
| import "package:inventree/api.dart"; | import "package:inventree/api.dart"; | ||||||
| import "package:inventree/helpers.dart"; | import "package:inventree/helpers.dart"; | ||||||
| @@ -72,7 +71,7 @@ class BarcodeHandler { | |||||||
|  |  | ||||||
|       showSnackIcon( |       showSnackIcon( | ||||||
|         L10().barcodeError, |         L10().barcodeError, | ||||||
|         icon: FontAwesomeIcons.circleExclamation, |         icon: TablerIcons.exclamation_circle, | ||||||
|         success: false |         success: false | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
| import "package:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| @@ -106,7 +105,7 @@ class POReceiveBarcodeHandler extends BarcodeHandler { | |||||||
|         receive_url, |         receive_url, | ||||||
|         fields, |         fields, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         icon: FontAwesomeIcons.rightToBracket, |         icon: TablerIcons.transition_right, | ||||||
|         onSuccess: (data) async { |         onSuccess: (data) async { | ||||||
|           showSnackIcon(L10().receivedItem, success: true); |           showSnackIcon(L10().receivedItem, success: true); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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_form.dart"; | import "package:inventree/api_form.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/inventree/part.dart"; | import "package:inventree/inventree/part.dart"; | ||||||
| @@ -159,7 +159,7 @@ class SOAllocateStockHandler extends BarcodeHandler { | |||||||
|       salesOrder!.allocate_url, |       salesOrder!.allocate_url, | ||||||
|     fields, |     fields, | ||||||
|     method: "POST", |     method: "POST", | ||||||
|     icon: FontAwesomeIcons.rightToBracket, |     icon: TablerIcons.transition_right, | ||||||
|     onSuccess: (data) async { |     onSuccess: (data) async { | ||||||
|         showSnackIcon(L10().allocated, success: true); |         showSnackIcon(L10().allocated, success: true); | ||||||
|     }); |     }); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/cupertino.dart"; | 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/api_form.dart"; | ||||||
| import "package:inventree/preferences.dart"; | import "package:inventree/preferences.dart"; | ||||||
| import "package:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
| @@ -149,7 +149,7 @@ class StockItemScanIntoLocationHandler extends BarcodeScanStockLocationHandler { | |||||||
|         InvenTreeStockItem.transferStockUrl(), |         InvenTreeStockItem.transferStockUrl(), | ||||||
|         fields, |         fields, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         icon: FontAwesomeIcons.dolly, |         icon: TablerIcons.transfer, | ||||||
|         onSuccess: (data) async { |         onSuccess: (data) async { | ||||||
|           showSnackIcon(L10().stockItemUpdated, success: true); |           showSnackIcon(L10().stockItemUpdated, success: true); | ||||||
|         } |         } | ||||||
| @@ -216,7 +216,7 @@ class StockLocationScanInItemsHandler extends BarcodeScanStockItemHandler { | |||||||
|               InvenTreeStockItem.transferStockUrl(), |               InvenTreeStockItem.transferStockUrl(), | ||||||
|               fields, |               fields, | ||||||
|               method: "POST", |               method: "POST", | ||||||
|               icon: FontAwesomeIcons.dolly, |               icon: TablerIcons.transfer, | ||||||
|               onSuccess: (data) async { |               onSuccess: (data) async { | ||||||
|                 showSnackIcon(L10().stockItemUpdated, success: true); |                 showSnackIcon(L10().stockItemUpdated, success: true); | ||||||
|               } |               } | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.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/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/barcode/controller.dart"; | import "package:inventree/barcode/controller.dart"; | ||||||
| @@ -64,7 +64,7 @@ class _WedgeBarcodeControllerState extends InvenTreeBarcodeControllerState { | |||||||
|           mainAxisAlignment: MainAxisAlignment.center, |           mainAxisAlignment: MainAxisAlignment.center, | ||||||
|           children: [ |           children: [ | ||||||
|             Spacer(flex: 5), |             Spacer(flex: 5), | ||||||
|             FaIcon(FontAwesomeIcons.barcode, size: 64), |             Icon(TablerIcons.barcode, size: 64), | ||||||
|             Spacer(flex: 5), |             Spacer(flex: 5), | ||||||
|             BarcodeKeyboardListener( |             BarcodeKeyboardListener( | ||||||
|               useKeyDownEvent: true, |               useKeyDownEvent: true, | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| import "dart:async"; | import "dart:async"; | ||||||
| import "dart:io"; | 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:flutter/material.dart"; | ||||||
| import "package:inventree/widget/snacks.dart"; | import "package:inventree/widget/snacks.dart"; | ||||||
| import "package:url_launcher/url_launcher.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.dart"; | ||||||
| import "package:inventree/api_form.dart"; | import "package:inventree/api_form.dart"; | ||||||
| import "package:inventree/fa_icon_mapping.dart"; |  | ||||||
| import "package:inventree/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| import "package:inventree/helpers.dart"; | import "package:inventree/helpers.dart"; | ||||||
| import "package:inventree/inventree/sentry.dart"; | import "package:inventree/inventree/sentry.dart"; | ||||||
| @@ -309,49 +308,31 @@ class InvenTreeModel { | |||||||
|    * - Second part specifies the icon |    * - Second part specifies the icon | ||||||
|    * |    * | ||||||
|    */ |    */ | ||||||
|   FaIcon? get customIcon { |   IconData? get customIcon { | ||||||
|     String icon = (jsondata["icon"] ?? "").toString(); |     String icon = (jsondata["icon"] ?? "").toString().trim(); | ||||||
|  |  | ||||||
|     // Empty icon (default) |     // Empty icon (default) | ||||||
|     if (icon.isEmpty) { |     if (icon.isEmpty) { | ||||||
|       return null; |       return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     final split = icon.trim().split(" "); |     // Tabler icon is of the format "ti:<icon>:<style" | ||||||
|  |     if (!icon.startsWith("ti:")) { | ||||||
|     // Must have two distinct units |  | ||||||
|     if (split.length != 2) { |  | ||||||
|       return null; |       return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     String style = split[0]; |     List<String> items = icon.split(":"); | ||||||
|     String name = split[1]; |  | ||||||
|  |  | ||||||
|     // Remove "fa-" leading text (if provided) |     if (items.length < 2) { | ||||||
|     if (name.startsWith("fa-")) { |  | ||||||
|       name = name.substring(3); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     int iconHex = fontAwesomeIconMap[name] ?? 0; |  | ||||||
|  |  | ||||||
|     // No match for the icon name |  | ||||||
|     if (iconHex == 0) { |  | ||||||
|       return null; |       return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     switch (style) { |     String key = items[1]; | ||||||
|       case "fas": |  | ||||||
|         return FaIcon(IconDataSolid(iconHex)); |     key = key.replaceAll("-", "_"); | ||||||
|       case "fab": |  | ||||||
|         return FaIcon(IconDataBrands(iconHex)); |     // Tabler icon lookup | ||||||
|       case "fa": |     return TablerIcons.all[key]; | ||||||
|         return FaIcon(IconDataRegular(iconHex)); |  | ||||||
|       case "fal": |  | ||||||
|         return FaIcon(IconDataLight(iconHex)); |  | ||||||
|       default: |  | ||||||
|         // No match |  | ||||||
|         return null; |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* Extract any custom barcode data available for the model. |   /* Extract any custom barcode data available for the model. | ||||||
| @@ -960,13 +941,13 @@ class InvenTreeAttachment extends InvenTreeModel { | |||||||
|     String fn = filename.toLowerCase(); |     String fn = filename.toLowerCase(); | ||||||
|  |  | ||||||
|     if (fn.endsWith(".pdf")) { |     if (fn.endsWith(".pdf")) { | ||||||
|       return FontAwesomeIcons.filePdf; |       return TablerIcons.file_type_pdf; | ||||||
|     } else if (fn.endsWith(".csv")) { |     } else if (fn.endsWith(".csv")) { | ||||||
|       return FontAwesomeIcons.fileCsv; |       return TablerIcons.file_type_csv; | ||||||
|     } else if (fn.endsWith(".doc") || fn.endsWith(".docx")) { |     } else if (fn.endsWith(".doc") || fn.endsWith(".docx")) { | ||||||
|       return FontAwesomeIcons.fileWord; |       return TablerIcons.file_type_doc; | ||||||
|     } else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) { |     } else if (fn.endsWith(".xls") || fn.endsWith(".xlsx")) { | ||||||
|       return FontAwesomeIcons.fileExcel; |       return TablerIcons.file_type_xls; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Image formats |     // Image formats | ||||||
| @@ -980,11 +961,11 @@ class InvenTreeAttachment extends InvenTreeModel { | |||||||
|  |  | ||||||
|     for (String fmt in img_formats) { |     for (String fmt in img_formats) { | ||||||
|       if (fn.endsWith(fmt)) { |       if (fn.endsWith(fmt)) { | ||||||
|         return FontAwesomeIcons.fileImage; |         return TablerIcons.file_type_jpg; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return FontAwesomeIcons.fileLines; |     return TablerIcons.file; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   String get comment => getString("comment"); |   String get comment => getString("comment"); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/cupertino.dart"; | 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/api.dart"; | ||||||
| import "package:inventree/widget/progress.dart"; | import "package:inventree/widget/progress.dart"; | ||||||
| import "package:inventree/api_form.dart"; | import "package:inventree/api_form.dart"; | ||||||
| @@ -89,7 +89,7 @@ Future<void> selectAndPrintLabel( | |||||||
|     L10().printLabel, |     L10().printLabel, | ||||||
|     "", |     "", | ||||||
|     fields, |     fields, | ||||||
|     icon: FontAwesomeIcons.print, |     icon: TablerIcons.printer, | ||||||
|     onSuccess: (Map<String, dynamic> data) async { |     onSuccess: (Map<String, dynamic> data) async { | ||||||
|       int labelId = (data["label"] ?? -1) as int; |       int labelId = (data["label"] ?? -1) as int; | ||||||
|       var pluginKey = data["plugin"]; |       var pluginKey = data["plugin"]; | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ import "package:inventree/settings/release.dart"; | |||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter/services.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:package_info_plus/package_info_plus.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| @@ -91,8 +91,8 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().address), |             title: Text(L10().address), | ||||||
|             subtitle: Text(InvenTreeAPI().baseUrl.isNotEmpty ? InvenTreeAPI().baseUrl : L10().notConnected), |             subtitle: Text(InvenTreeAPI().baseUrl.isNotEmpty ? InvenTreeAPI().baseUrl : L10().notConnected), | ||||||
|             leading: FaIcon(FontAwesomeIcons.globe), |             leading: Icon(TablerIcons.globe), | ||||||
|             trailing: InvenTreeAPI().isConnected() ? FaIcon(FontAwesomeIcons.circleCheck, color: COLOR_SUCCESS) : FaIcon(FontAwesomeIcons.circleXmark, color: COLOR_DANGER), |             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( |         ListTile( | ||||||
|           title: Text(L10().username), |           title: Text(L10().username), | ||||||
|           subtitle: Text(InvenTreeAPI().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( |         ListTile( | ||||||
|           title: Text(L10().version), |           title: Text(L10().version), | ||||||
|           subtitle: Text(InvenTreeAPI().serverVersion.isNotEmpty ? InvenTreeAPI().serverVersion : L10().notConnected), |           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( |         ListTile( | ||||||
|           title: Text(L10().serverInstance), |           title: Text(L10().serverInstance), | ||||||
|           subtitle: Text(InvenTreeAPI().serverInstance.isNotEmpty ? InvenTreeAPI().serverInstance : L10().notConnected), |           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( |         ListTile( | ||||||
|           title: Text(L10().pluginSupport), |           title: Text(L10().pluginSupport), | ||||||
|           subtitle: Text(L10().pluginSupportDetail), |           subtitle: Text(L10().pluginSupportDetail), | ||||||
|           leading: FaIcon(FontAwesomeIcons.plug), |           leading: Icon(TablerIcons.plug), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
| @@ -137,7 +137,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|             L10().serverNotConnected, |             L10().serverNotConnected, | ||||||
|             style: TextStyle(fontStyle: FontStyle.italic), |             style: TextStyle(fontStyle: FontStyle.italic), | ||||||
|           ), |           ), | ||||||
|           leading: FaIcon(FontAwesomeIcons.circleExclamation) |           leading: Icon(TablerIcons.exclamation_circle) | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -155,7 +155,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().packageName), |         title: Text(L10().packageName), | ||||||
|         subtitle: Text("${info.packageName}"), |         subtitle: Text("${info.packageName}"), | ||||||
|         leading: FaIcon(FontAwesomeIcons.box) |         leading: Icon(TablerIcons.box) | ||||||
|       ) |       ) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
| @@ -163,7 +163,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().version), |         title: Text(L10().version), | ||||||
|         subtitle: Text("${info.version} - Build ${info.buildNumber}"), |         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( |       ListTile( | ||||||
|         title: Text(L10().releaseNotes), |         title: Text(L10().releaseNotes), | ||||||
|         subtitle: Text(L10().appReleaseNotes), |         subtitle: Text(L10().appReleaseNotes), | ||||||
|         leading: FaIcon(FontAwesomeIcons.fileLines, color: COLOR_ACTION), |         leading: Icon(TablerIcons.file, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           _releaseNotes(context); |           _releaseNotes(context); | ||||||
|         }, |         }, | ||||||
| @@ -182,7 +182,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().credits), |         title: Text(L10().credits), | ||||||
|         subtitle: Text(L10().appCredits), |         subtitle: Text(L10().appCredits), | ||||||
|         leading: FaIcon(FontAwesomeIcons.bullhorn, color: COLOR_ACTION), |         leading: Icon(TablerIcons.balloon, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           _credits(context); |           _credits(context); | ||||||
|         } |         } | ||||||
| @@ -193,7 +193,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().documentation), |         title: Text(L10().documentation), | ||||||
|         subtitle: Text("https://docs.inventree.org/app"), |         subtitle: Text("https://docs.inventree.org/app"), | ||||||
|         leading: FaIcon(FontAwesomeIcons.book, color: COLOR_ACTION), |         leading: Icon(TablerIcons.book, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           _openDocs(); |           _openDocs(); | ||||||
|         }, |         }, | ||||||
| @@ -204,7 +204,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().translate), |         title: Text(L10().translate), | ||||||
|         subtitle: Text(L10().translateHelp), |         subtitle: Text(L10().translateHelp), | ||||||
|         leading: FaIcon(FontAwesomeIcons.language, color: COLOR_ACTION), |         leading: Icon(TablerIcons.language, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           _translate(); |           _translate(); | ||||||
|         } |         } | ||||||
| @@ -215,7 +215,7 @@ class InvenTreeAboutWidget extends StatelessWidget { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().reportBug), |         title: Text(L10().reportBug), | ||||||
|         subtitle: Text(L10().reportBugDescription), |         subtitle: Text(L10().reportBugDescription), | ||||||
|         leading: FaIcon(FontAwesomeIcons.bug, color: COLOR_ACTION), |         leading: Icon(TablerIcons.bug, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|         _reportBug(context); |         _reportBug(context); | ||||||
|         }, |         }, | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ import "package:inventree/api.dart"; | |||||||
| import "package:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
|  |  | ||||||
| import "package:adaptive_theme/adaptive_theme.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:flutter_localized_locales/flutter_localized_locales.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -101,7 +101,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|       L10().languageSelect, |       L10().languageSelect, | ||||||
|       "", |       "", | ||||||
|       fields, |       fields, | ||||||
|       icon: FontAwesomeIcons.circleCheck, |       icon: TablerIcons.circle_check, | ||||||
|       onSuccess: (Map<String, dynamic> data) async { |       onSuccess: (Map<String, dynamic> data) async { | ||||||
|  |  | ||||||
|         String locale_name = (data["locale"] ?? "") as String; |         String locale_name = (data["locale"] ?? "") as String; | ||||||
| @@ -168,12 +168,12 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|                 L10().appSettings, |                 L10().appSettings, | ||||||
|                 style: TextStyle(fontWeight: FontWeight.bold), |                 style: TextStyle(fontWeight: FontWeight.bold), | ||||||
|               ), |               ), | ||||||
|               leading: FaIcon(FontAwesomeIcons.mobile), |               leading: Icon(TablerIcons.device_mobile), | ||||||
|             ), |             ), | ||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().darkMode), |               title: Text(L10().darkMode), | ||||||
|               subtitle: Text(L10().darkModeEnable), |               subtitle: Text(L10().darkModeEnable), | ||||||
|               leading: FaIcon(FontAwesomeIcons.moon), |               leading: Icon(TablerIcons.moon), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: darkMode, |                 value: darkMode, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -226,7 +226,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().labelPrinting), |               title: Text(L10().labelPrinting), | ||||||
|               subtitle: Text(L10().labelPrintingDetail), |               subtitle: Text(L10().labelPrintingDetail), | ||||||
|               leading: FaIcon(FontAwesomeIcons.print), |               leading: Icon(TablerIcons.printer), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: enableLabelPrinting, |                 value: enableLabelPrinting, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -240,7 +240,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().strictHttps), |               title: Text(L10().strictHttps), | ||||||
|               subtitle: Text(L10().strictHttpsDetails), |               subtitle: Text(L10().strictHttpsDetails), | ||||||
|               leading: FaIcon(FontAwesomeIcons.lock), |               leading: Icon(TablerIcons.lock), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: strictHttps, |                 value: strictHttps, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -254,7 +254,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().language), |               title: Text(L10().language), | ||||||
|               subtitle: Text(languageName), |               subtitle: Text(languageName), | ||||||
|               leading: FaIcon(FontAwesomeIcons.language), |               leading: Icon(TablerIcons.language), | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 _selectLocale(context); |                 _selectLocale(context); | ||||||
|               }, |               }, | ||||||
| @@ -262,7 +262,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().errorReportUpload), |               title: Text(L10().errorReportUpload), | ||||||
|               subtitle: Text(L10().errorReportUploadDetails), |               subtitle: Text(L10().errorReportUploadDetails), | ||||||
|               leading: FaIcon(FontAwesomeIcons.bug), |               leading: Icon(TablerIcons.bug), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: reportErrors, |                 value: reportErrors, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -278,13 +278,13 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|                 L10().sounds, |                 L10().sounds, | ||||||
|                 style: TextStyle(fontWeight: FontWeight.bold), |                 style: TextStyle(fontWeight: FontWeight.bold), | ||||||
|               ), |               ), | ||||||
|               leading: FaIcon(FontAwesomeIcons.volumeHigh), |               leading: Icon(TablerIcons.volume), | ||||||
|             ), |             ), | ||||||
|             Divider(), |             Divider(), | ||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().serverError), |               title: Text(L10().serverError), | ||||||
|               subtitle: Text(L10().soundOnServerError), |               subtitle: Text(L10().soundOnServerError), | ||||||
|               leading: FaIcon(FontAwesomeIcons.server), |               leading: Icon(TablerIcons.server), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: serverSounds, |                 value: serverSounds, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -298,7 +298,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().barcodeTones), |               title: Text(L10().barcodeTones), | ||||||
|               subtitle: Text(L10().soundOnBarcodeAction), |               subtitle: Text(L10().soundOnBarcodeAction), | ||||||
|               leading: Icon(Icons.qr_code), |               leading: Icon(TablerIcons.qrcode), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: barcodeSounds, |                 value: barcodeSounds, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| import "package:inventree/preferences.dart"; | import "package:inventree/preferences.dart"; | ||||||
| @@ -105,7 +105,7 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge | |||||||
|         break; |         break; | ||||||
|       case BARCODE_CONTROLLER_CAMERA: |       case BARCODE_CONTROLLER_CAMERA: | ||||||
|       default: |       default: | ||||||
|         barcodeInputIcon = FaIcon(FontAwesomeIcons.camera); |         barcodeInputIcon = Icon(TablerIcons.camera); | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -126,7 +126,7 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge | |||||||
|                     ListTile( |                     ListTile( | ||||||
|                       title: Text(L10().cameraInternal), |                       title: Text(L10().cameraInternal), | ||||||
|                       subtitle: Text(L10().cameraInternalDetail), |                       subtitle: Text(L10().cameraInternalDetail), | ||||||
|                       leading: FaIcon(FontAwesomeIcons.camera), |                       leading: Icon(TablerIcons.camera), | ||||||
|                     ), |                     ), | ||||||
|                     ListTile( |                     ListTile( | ||||||
|                       title: Text(L10().scannerExternal), |                       title: Text(L10().scannerExternal), | ||||||
| @@ -147,7 +147,7 @@ class _InvenTreeBarcodeSettingsState extends State<InvenTreeBarcodeSettingsWidge | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().barcodeScanDelay), |               title: Text(L10().barcodeScanDelay), | ||||||
|               subtitle: Text(L10().barcodeScanDelayDetail), |               subtitle: Text(L10().barcodeScanDelayDetail), | ||||||
|               leading: FaIcon(FontAwesomeIcons.stopwatch), |               leading: Icon(TablerIcons.hourglass), | ||||||
|               trailing: GestureDetector( |               trailing: GestureDetector( | ||||||
|                 child: Text("${barcodeScanDelay} ms"), |                 child: Text("${barcodeScanDelay} ms"), | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|   | |||||||
| @@ -1,10 +1,8 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
|  |  | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
|  |  | ||||||
| import "package:inventree/preferences.dart"; | import "package:inventree/preferences.dart"; | ||||||
|  |  | ||||||
| class HomeScreenSettingsWidget extends StatefulWidget { | class HomeScreenSettingsWidget extends StatefulWidget { | ||||||
| @@ -62,7 +60,7 @@ class _HomeScreenSettingsState extends State<HomeScreenSettingsWidget> { | |||||||
|                   ListTile( |                   ListTile( | ||||||
|                       title: Text(L10().homeShowSubscribed), |                       title: Text(L10().homeShowSubscribed), | ||||||
|                       subtitle: Text(L10().homeShowSubscribedDescription), |                       subtitle: Text(L10().homeShowSubscribedDescription), | ||||||
|                       leading: FaIcon(FontAwesomeIcons.bell), |                       leading: Icon(TablerIcons.bell), | ||||||
|                       trailing: Switch( |                       trailing: Switch( | ||||||
|                         value: homeShowSubscribed, |                         value: homeShowSubscribed, | ||||||
|                         onChanged: (bool value) { |                         onChanged: (bool value) { | ||||||
| @@ -76,7 +74,7 @@ class _HomeScreenSettingsState extends State<HomeScreenSettingsWidget> { | |||||||
|                   ListTile( |                   ListTile( | ||||||
|                     title: Text(L10().homeShowPo), |                     title: Text(L10().homeShowPo), | ||||||
|                     subtitle: Text(L10().homeShowPoDescription), |                     subtitle: Text(L10().homeShowPoDescription), | ||||||
|                     leading: FaIcon(FontAwesomeIcons.cartShopping), |                     leading: Icon(TablerIcons.shopping_cart), | ||||||
|                     trailing: Switch( |                     trailing: Switch( | ||||||
|                       value: homeShowPo, |                       value: homeShowPo, | ||||||
|                       onChanged: (bool value) { |                       onChanged: (bool value) { | ||||||
| @@ -90,7 +88,7 @@ class _HomeScreenSettingsState extends State<HomeScreenSettingsWidget> { | |||||||
|                   ListTile( |                   ListTile( | ||||||
|                     title: Text(L10().homeShowSo), |                     title: Text(L10().homeShowSo), | ||||||
|                     subtitle: Text(L10().homeShowSoDescription), |                     subtitle: Text(L10().homeShowSoDescription), | ||||||
|                     leading: FaIcon(FontAwesomeIcons.truck), |                     leading: Icon(TablerIcons.truck), | ||||||
|                     trailing: Switch( |                     trailing: Switch( | ||||||
|                       value: homeShowSo, |                       value: homeShowSo, | ||||||
|                       onChanged: (bool value) { |                       onChanged: (bool value) { | ||||||
| @@ -104,7 +102,7 @@ class _HomeScreenSettingsState extends State<HomeScreenSettingsWidget> { | |||||||
|                   ListTile( |                   ListTile( | ||||||
|                     title: Text(L10().homeShowSuppliers), |                     title: Text(L10().homeShowSuppliers), | ||||||
|                     subtitle: Text(L10().homeShowSuppliersDescription), |                     subtitle: Text(L10().homeShowSuppliersDescription), | ||||||
|                     leading: FaIcon(FontAwesomeIcons.building), |                     leading: Icon(TablerIcons.building), | ||||||
|                     trailing: Switch( |                     trailing: Switch( | ||||||
|                       value: homeShowSuppliers, |                       value: homeShowSuppliers, | ||||||
|                       onChanged: (bool value) { |                       onChanged: (bool value) { | ||||||
| @@ -121,7 +119,7 @@ class _HomeScreenSettingsState extends State<HomeScreenSettingsWidget> { | |||||||
|                   ListTile( |                   ListTile( | ||||||
|                     title: Text(L10().homeShowManufacturers), |                     title: Text(L10().homeShowManufacturers), | ||||||
|                     subtitle: Text(L10().homeShowManufacturersDescription), |                     subtitle: Text(L10().homeShowManufacturersDescription), | ||||||
|                     leading: FaIcon(FontAwesomeIcons.industry), |                     leading: Icon(TablerIcons.building_factory_2), | ||||||
|                     trailing: Switch( |                     trailing: Switch( | ||||||
|                       value: homeShowManufacturers, |                       value: homeShowManufacturers, | ||||||
|                       onChanged: (bool value) { |                       onChanged: (bool value) { | ||||||
| @@ -136,7 +134,7 @@ class _HomeScreenSettingsState extends State<HomeScreenSettingsWidget> { | |||||||
|                   ListTile( |                   ListTile( | ||||||
|                     title: Text(L10().homeShowCustomers), |                     title: Text(L10().homeShowCustomers), | ||||||
|                     subtitle: Text(L10().homeShowCustomersDescription), |                     subtitle: Text(L10().homeShowCustomersDescription), | ||||||
|                     leading: FaIcon(FontAwesomeIcons.userTie), |                     leading: Icon(TablerIcons.user), | ||||||
|                     trailing: Switch( |                     trailing: Switch( | ||||||
|                       value: homeShowCustomers, |                       value: homeShowCustomers, | ||||||
|                       onChanged: (bool value) { |                       onChanged: (bool value) { | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.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/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/user_profile.dart"; | import "package:inventree/user_profile.dart"; | ||||||
| import "package:inventree/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| @@ -84,12 +85,12 @@ class _InvenTreeLoginState extends State<InvenTreeLoginWidget> { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().loginEnter), |         title: Text(L10().loginEnter), | ||||||
|         subtitle: Text(L10().loginEnterDetails), |         subtitle: Text(L10().loginEnterDetails), | ||||||
|         leading: FaIcon(FontAwesomeIcons.userCheck), |         leading: Icon(TablerIcons.user_check), | ||||||
|       ), |       ), | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().server), |         title: Text(L10().server), | ||||||
|         subtitle: Text(widget.profile.server), |         subtitle: Text(widget.profile.server), | ||||||
|         leading: FaIcon(FontAwesomeIcons.server), |         leading: Icon(TablerIcons.server), | ||||||
|       ), |       ), | ||||||
|       Divider(), |       Divider(), | ||||||
|     ]; |     ]; | ||||||
| @@ -99,7 +100,7 @@ class _InvenTreeLoginState extends State<InvenTreeLoginWidget> { | |||||||
|     if (error.isNotEmpty) { |     if (error.isNotEmpty) { | ||||||
|       after.add(Divider()); |       after.add(Divider()); | ||||||
|       after.add(ListTile( |       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)), |         title: Text(L10().error, style: TextStyle(color: COLOR_DANGER)), | ||||||
|         subtitle: Text(error, style: TextStyle(color: COLOR_DANGER)), |         subtitle: Text(error, style: TextStyle(color: COLOR_DANGER)), | ||||||
|       )); |       )); | ||||||
| @@ -109,7 +110,7 @@ class _InvenTreeLoginState extends State<InvenTreeLoginWidget> { | |||||||
|         title: Text(L10().login), |         title: Text(L10().login), | ||||||
|         actions: [ |         actions: [ | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon: FaIcon(FontAwesomeIcons.arrowRightToBracket, color: COLOR_SUCCESS), |             icon: Icon(TablerIcons.transition_right, color: COLOR_SUCCESS), | ||||||
|             onPressed: () async { |             onPressed: () async { | ||||||
|               _doLogin(context); |               _doLogin(context); | ||||||
|             }, |             }, | ||||||
| @@ -150,7 +151,7 @@ class _InvenTreeLoginState extends State<InvenTreeLoginWidget> { | |||||||
|                     labelStyle: TextStyle(fontWeight: FontWeight.bold), |                     labelStyle: TextStyle(fontWeight: FontWeight.bold), | ||||||
|                     hintText: L10().enterPassword, |                     hintText: L10().enterPassword, | ||||||
|                     suffixIcon: IconButton( |                     suffixIcon: IconButton( | ||||||
|                       icon: _obscured ? FaIcon(FontAwesomeIcons.eye) : FaIcon(FontAwesomeIcons.solidEyeSlash), |                       icon: _obscured ? Icon(TablerIcons.eye) : Icon(TablerIcons.eye_off), | ||||||
|                       onPressed: () { |                       onPressed: () { | ||||||
|                         setState(() { |                         setState(() { | ||||||
|                           _obscured = !_obscured; |                           _obscured = !_obscured; | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.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/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| import "package:inventree/preferences.dart"; | import "package:inventree/preferences.dart"; | ||||||
|  |  | ||||||
| @@ -51,7 +52,7 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().parameters), |               title: Text(L10().parameters), | ||||||
|               subtitle: Text(L10().parametersSettingDetail), |               subtitle: Text(L10().parametersSettingDetail), | ||||||
|               leading: FaIcon(FontAwesomeIcons.tableList), |               leading: Icon(TablerIcons.list), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: partShowParameters, |                 value: partShowParameters, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -65,7 +66,7 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().bom), |               title: Text(L10().bom), | ||||||
|               subtitle: Text(L10().bomEnable), |               subtitle: Text(L10().bomEnable), | ||||||
|               leading: FaIcon(FontAwesomeIcons.list), |               leading: Icon(TablerIcons.list), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: partShowBom, |                 value: partShowBom, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -80,7 +81,7 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().stockItemHistory), |               title: Text(L10().stockItemHistory), | ||||||
|               subtitle: Text(L10().stockItemHistoryDetail), |               subtitle: Text(L10().stockItemHistoryDetail), | ||||||
|               leading: FaIcon(FontAwesomeIcons.clockRotateLeft), |               leading: Icon(TablerIcons.history), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: stockShowHistory, |                 value: stockShowHistory, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -94,7 +95,7 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().testResults), |               title: Text(L10().testResults), | ||||||
|               subtitle: Text(L10().testResultsDetail), |               subtitle: Text(L10().testResultsDetail), | ||||||
|               leading:  FaIcon(FontAwesomeIcons.vial), |               leading:  Icon(TablerIcons.test_pipe), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: stockShowTests, |                 value: stockShowTests, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
| @@ -108,7 +109,7 @@ class _InvenTreePartSettingsState extends State<InvenTreePartSettingsWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().confirmScan), |               title: Text(L10().confirmScan), | ||||||
|               subtitle: Text(L10().confirmScanDetail), |               subtitle: Text(L10().confirmScanDetail), | ||||||
|               leading: FaIcon(FontAwesomeIcons.qrcode), |               leading: Icon(TablerIcons.qrcode), | ||||||
|               trailing: Switch( |               trailing: Switch( | ||||||
|                 value: stockConfirmScan, |                 value: stockConfirmScan, | ||||||
|                 onChanged: (bool value) { |                 onChanged: (bool value) { | ||||||
|   | |||||||
| @@ -1,8 +1,9 @@ | |||||||
| import "package:flutter/material.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/settings/login.dart"; |  | ||||||
| import "package:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
|  |  | ||||||
|  | import "package:inventree/settings/login.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/widget/dialogs.dart"; | import "package:inventree/widget/dialogs.dart"; | ||||||
| import "package:inventree/widget/spinner.dart"; | import "package:inventree/widget/spinner.dart"; | ||||||
| @@ -151,18 +152,18 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|  |  | ||||||
|     // Reflect the connection status of the server |     // Reflect the connection status of the server | ||||||
|     if (InvenTreeAPI().isConnected()) { |     if (InvenTreeAPI().isConnected()) { | ||||||
|       return FaIcon( |       return Icon( | ||||||
|         FontAwesomeIcons.circleCheck, |         TablerIcons.circle_check, | ||||||
|         color: COLOR_SUCCESS |         color: COLOR_SUCCESS | ||||||
|       ); |       ); | ||||||
|     } else if (InvenTreeAPI().isConnecting()) { |     } else if (InvenTreeAPI().isConnecting()) { | ||||||
|       return Spinner( |       return Spinner( | ||||||
|         icon: FontAwesomeIcons.spinner, |         icon: TablerIcons.loader_2, | ||||||
|         color: COLOR_PROGRESS, |         color: COLOR_PROGRESS, | ||||||
|       ); |       ); | ||||||
|     } else { |     } else { | ||||||
|       return FaIcon( |       return Icon( | ||||||
|         FontAwesomeIcons.circleXmark, |         TablerIcons.circle_x, | ||||||
|         color: COLOR_DANGER, |         color: COLOR_DANGER, | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -183,7 +184,7 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|           ), |           ), | ||||||
|           tileColor: profile.selected ? Theme.of(context).secondaryHeaderColor : null, |           tileColor: profile.selected ? Theme.of(context).secondaryHeaderColor : null, | ||||||
|           subtitle: Text("${profile.server}"), |           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), |           trailing: _getProfileIcon(profile), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             _selectProfile(context, profile); |             _selectProfile(context, profile); | ||||||
| @@ -202,7 +203,7 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|                         }, |                         }, | ||||||
|                         child: ListTile( |                         child: ListTile( | ||||||
|                           title: Text(L10().profileConnect), |                           title: Text(L10().profileConnect), | ||||||
|                           leading: FaIcon(FontAwesomeIcons.server), |                           leading: Icon(TablerIcons.server), | ||||||
|                         ) |                         ) | ||||||
|                       ), |                       ), | ||||||
|                       SimpleDialogOption( |                       SimpleDialogOption( | ||||||
| @@ -212,7 +213,7 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|                         }, |                         }, | ||||||
|                         child: ListTile( |                         child: ListTile( | ||||||
|                           title: Text(L10().profileEdit), |                           title: Text(L10().profileEdit), | ||||||
|                           leading: FaIcon(FontAwesomeIcons.penToSquare) |                           leading: Icon(TablerIcons.edit) | ||||||
|                         ) |                         ) | ||||||
|                       ), |                       ), | ||||||
|                       SimpleDialogOption( |                       SimpleDialogOption( | ||||||
| @@ -222,7 +223,7 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|                         }, |                         }, | ||||||
|                         child: ListTile( |                         child: ListTile( | ||||||
|                           title: Text(L10().profileLogout), |                           title: Text(L10().profileLogout), | ||||||
|                           leading: FaIcon(FontAwesomeIcons.userSlash), |                           leading: Icon(TablerIcons.logout), | ||||||
|                         ) |                         ) | ||||||
|                       ), |                       ), | ||||||
|                       Divider(), |                       Divider(), | ||||||
| @@ -234,7 +235,7 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|                             L10().delete, |                             L10().delete, | ||||||
|                             L10().profileDelete + "?", |                             L10().profileDelete + "?", | ||||||
|                             color: Colors.red, |                             color: Colors.red, | ||||||
|                             icon: FontAwesomeIcons.trashCan, |                             icon: TablerIcons.trash, | ||||||
|                             onAccept: () { |                             onAccept: () { | ||||||
|                               _deleteProfile(profile); |                               _deleteProfile(profile); | ||||||
|                             } |                             } | ||||||
| @@ -242,7 +243,7 @@ class _InvenTreeSelectServerState extends State<InvenTreeSelectServerWidget> { | |||||||
|                         }, |                         }, | ||||||
|                         child: ListTile( |                         child: ListTile( | ||||||
|                           title: Text(L10().profileDelete, style: TextStyle(color: Colors.red)), |                           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<InvenTreeSelectServerWidget> { | |||||||
|         title: Text(L10().profileSelect), |         title: Text(L10().profileSelect), | ||||||
|         actions: [ |         actions: [ | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon: FaIcon(FontAwesomeIcons.circlePlus), |             icon: Icon(TablerIcons.circle_plus), | ||||||
|             onPressed: () { |             onPressed: () { | ||||||
|               _editProfile(context, createNew: true); |               _editProfile(context, createNew: true); | ||||||
|             }, |             }, | ||||||
| @@ -316,7 +317,7 @@ class _ProfileEditState extends State<ProfileEditWidget> { | |||||||
|         title: Text(widget.profile == null ? L10().profileAdd : L10().profileEdit), |         title: Text(widget.profile == null ? L10().profileAdd : L10().profileEdit), | ||||||
|         actions: [ |         actions: [ | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon: FaIcon(FontAwesomeIcons.floppyDisk), |             icon: Icon(TablerIcons.device_floppy), | ||||||
|             onPressed: () async { |             onPressed: () async { | ||||||
|               if (formKey.currentState!.validate()) { |               if (formKey.currentState!.validate()) { | ||||||
|                 formKey.currentState!.save(); |                 formKey.currentState!.save(); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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:package_info_plus/package_info_plus.dart"; | import "package:package_info_plus/package_info_plus.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -49,7 +49,7 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|               ListTile( |               ListTile( | ||||||
|                   title: Text(L10().server), |                   title: Text(L10().server), | ||||||
|                   subtitle: Text(L10().configureServer), |                   subtitle: Text(L10().configureServer), | ||||||
|                   leading: FaIcon(FontAwesomeIcons.server, color: COLOR_ACTION), |                   leading: Icon(TablerIcons.server, color: COLOR_ACTION), | ||||||
|                   onTap: () { |                   onTap: () { | ||||||
|                     Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeSelectServerWidget())); |                     Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeSelectServerWidget())); | ||||||
|                   }, |                   }, | ||||||
| @@ -57,7 +57,7 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|               ListTile( |               ListTile( | ||||||
|                   title: Text(L10().appSettings), |                   title: Text(L10().appSettings), | ||||||
|                   subtitle: Text(L10().appSettingsDetails), |                   subtitle: Text(L10().appSettingsDetails), | ||||||
|                   leading: FaIcon(FontAwesomeIcons.gears, color: COLOR_ACTION), |                   leading: Icon(TablerIcons.settings, color: COLOR_ACTION), | ||||||
|                   onTap: () { |                   onTap: () { | ||||||
|                     Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeAppSettingsWidget())); |                     Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeAppSettingsWidget())); | ||||||
|                   } |                   } | ||||||
| @@ -65,7 +65,7 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|               ListTile( |               ListTile( | ||||||
|                 title: Text(L10().homeScreen), |                 title: Text(L10().homeScreen), | ||||||
|                 subtitle: Text(L10().homeScreenSettings), |                 subtitle: Text(L10().homeScreenSettings), | ||||||
|                 leading: FaIcon(FontAwesomeIcons.house, color: COLOR_ACTION), |                 leading: Icon(TablerIcons.home, color: COLOR_ACTION), | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreenSettingsWidget())); |                   Navigator.push(context, MaterialPageRoute(builder: (context) => HomeScreenSettingsWidget())); | ||||||
|                 } |                 } | ||||||
| @@ -73,7 +73,7 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|               ListTile( |               ListTile( | ||||||
|                 title: Text(L10().barcodes), |                 title: Text(L10().barcodes), | ||||||
|                 subtitle: Text(L10().barcodeSettings), |                 subtitle: Text(L10().barcodeSettings), | ||||||
|                 leading: FaIcon(FontAwesomeIcons.barcode, color: COLOR_ACTION), |                 leading: Icon(TablerIcons.barcode, color: COLOR_ACTION), | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeBarcodeSettingsWidget())); |                   Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeBarcodeSettingsWidget())); | ||||||
|                 } |                 } | ||||||
| @@ -81,7 +81,7 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|               ListTile( |               ListTile( | ||||||
|                 title: Text(L10().part), |                 title: Text(L10().part), | ||||||
|                 subtitle: Text(L10().partSettings), |                 subtitle: Text(L10().partSettings), | ||||||
|                 leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), |                 leading: Icon(TablerIcons.box, color: COLOR_ACTION), | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreePartSettingsWidget())); |                   Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreePartSettingsWidget())); | ||||||
|                 } |                 } | ||||||
| @@ -89,7 +89,7 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> { | |||||||
|               Divider(), |               Divider(), | ||||||
|               ListTile( |               ListTile( | ||||||
|                 title: Text(L10().about), |                 title: Text(L10().about), | ||||||
|                 leading: FaIcon(FontAwesomeIcons.circleInfo, color: COLOR_ACTION), |                 leading: Icon(TablerIcons.info_circle, color: COLOR_ACTION), | ||||||
|                 onTap: _about, |                 onTap: _about, | ||||||
|               ) |               ) | ||||||
|             ] |             ] | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| import "dart:io"; | import "dart:io"; | ||||||
|  |  | ||||||
| import "package:flutter/material.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:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
| import "package:url_launcher/url_launcher.dart"; | import "package:url_launcher/url_launcher.dart"; | ||||||
|  |  | ||||||
| @@ -52,7 +52,7 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> { | |||||||
|  |  | ||||||
|     return [ |     return [ | ||||||
|       IconButton( |       IconButton( | ||||||
|         icon: FaIcon(FontAwesomeIcons.camera), |         icon: Icon(TablerIcons.camera), | ||||||
|         onPressed: () async { |         onPressed: () async { | ||||||
|           FilePickerDialog.pickImageFromCamera().then((File? file) { |           FilePickerDialog.pickImageFromCamera().then((File? file) { | ||||||
|             upload(context, file); |             upload(context, file); | ||||||
| @@ -60,7 +60,7 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> { | |||||||
|         } |         } | ||||||
|       ), |       ), | ||||||
|       IconButton( |       IconButton( | ||||||
|         icon: FaIcon(FontAwesomeIcons.fileArrowUp), |         icon: Icon(TablerIcons.file_upload), | ||||||
|         onPressed: () async { |         onPressed: () async { | ||||||
|           FilePickerDialog.pickFileFromDevice().then((File? file) { |           FilePickerDialog.pickFileFromDevice().then((File? file) { | ||||||
|             upload(context, file); |             upload(context, file); | ||||||
| @@ -122,7 +122,7 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> { | |||||||
|               }, |               }, | ||||||
|               child: ListTile( |               child: ListTile( | ||||||
|                 title: Text(L10().delete), |                 title: Text(L10().delete), | ||||||
|                 leading: FaIcon(FontAwesomeIcons.trashCan), |                 leading: Icon(TablerIcons.trash), | ||||||
|               ) |               ) | ||||||
|             ) |             ) | ||||||
|           ] |           ] | ||||||
| @@ -171,7 +171,7 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> { | |||||||
|         tiles.add(ListTile( |         tiles.add(ListTile( | ||||||
|           title: Text(attachment.filename), |           title: Text(attachment.filename), | ||||||
|           subtitle: Text(attachment.comment), |           subtitle: Text(attachment.comment), | ||||||
|           leading: FaIcon(attachment.icon, color: COLOR_ACTION), |           leading: Icon(attachment.icon, color: COLOR_ACTION), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             showLoadingOverlay(context); |             showLoadingOverlay(context); | ||||||
|             await attachment.downloadAttachment(); |             await attachment.downloadAttachment(); | ||||||
| @@ -187,7 +187,7 @@ class _AttachmentWidgetState extends RefreshableState<AttachmentWidget> { | |||||||
|         tiles.add(ListTile( |         tiles.add(ListTile( | ||||||
|           title: Text(attachment.link), |           title: Text(attachment.link), | ||||||
|           subtitle: Text(attachment.comment), |           subtitle: Text(attachment.comment), | ||||||
|           leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |           leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             var uri = Uri.tryParse(attachment.link.trimLeft()); |             var uri = Uri.tryParse(attachment.link.trimLeft()); | ||||||
|             if (uri != null && await canLaunchUrl(uri)) { |             if (uri != null && await canLaunchUrl(uri)) { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/l10.dart"; | ||||||
| import "package:inventree/api.dart"; | import "package:inventree/api.dart"; | ||||||
| @@ -57,7 +57,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|     if (InvenTreeCompany().canEdit) { |     if (InvenTreeCompany().canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|             icon: Icon(Icons.edit_square), |             icon: Icon(TablerIcons.edit), | ||||||
|             tooltip: L10().companyEdit, |             tooltip: L10().companyEdit, | ||||||
|             onPressed: () { |             onPressed: () { | ||||||
|               editCompany(context); |               editCompany(context); | ||||||
| @@ -75,7 +75,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|  |  | ||||||
|     if (widget.company.isCustomer && InvenTreeSalesOrder().canCreate) { |     if (widget.company.isCustomer && InvenTreeSalesOrder().canCreate) { | ||||||
|       actions.add(SpeedDialChild( |       actions.add(SpeedDialChild( | ||||||
|         child: FaIcon(FontAwesomeIcons.truck), |         child: Icon(TablerIcons.truck), | ||||||
|         label: L10().salesOrderCreate, |         label: L10().salesOrderCreate, | ||||||
|         onTap: () async { |         onTap: () async { | ||||||
|           _createSalesOrder(context); |           _createSalesOrder(context); | ||||||
| @@ -85,7 +85,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|  |  | ||||||
|     if (widget.company.isSupplier && InvenTreePurchaseOrder().canCreate) { |     if (widget.company.isSupplier && InvenTreePurchaseOrder().canCreate) { | ||||||
|       actions.add(SpeedDialChild( |       actions.add(SpeedDialChild( | ||||||
|         child: FaIcon(FontAwesomeIcons.cartShopping), |         child: Icon(TablerIcons.shopping_cart), | ||||||
|         label: L10().purchaseOrderCreate, |         label: L10().purchaseOrderCreate, | ||||||
|         onTap: () async { |         onTap: () async { | ||||||
|           _createPurchaseOrder(context); |           _createPurchaseOrder(context); | ||||||
| @@ -243,8 +243,8 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|                     color: COLOR_DANGER |                     color: COLOR_DANGER | ||||||
|                 ) |                 ) | ||||||
|             ), |             ), | ||||||
|             leading: FaIcon( |             leading: Icon( | ||||||
|                 FontAwesomeIcons.circleExclamation, |                 TablerIcons.exclamation_circle, | ||||||
|                 color: COLOR_DANGER |                 color: COLOR_DANGER | ||||||
|             ), |             ), | ||||||
|           ) |           ) | ||||||
| @@ -254,7 +254,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|   if (widget.company.website.isNotEmpty) { |   if (widget.company.website.isNotEmpty) { | ||||||
|     tiles.add(ListTile( |     tiles.add(ListTile( | ||||||
|       title: Text("${widget.company.website}"), |       title: Text("${widget.company.website}"), | ||||||
|       leading: FaIcon(FontAwesomeIcons.globe, color: COLOR_ACTION), |       leading: Icon(TablerIcons.globe, color: COLOR_ACTION), | ||||||
|       onTap: () async { |       onTap: () async { | ||||||
|         openLink(widget.company.website); |         openLink(widget.company.website); | ||||||
|       }, |       }, | ||||||
| @@ -266,7 +266,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|   if (widget.company.email.isNotEmpty) { |   if (widget.company.email.isNotEmpty) { | ||||||
|     tiles.add(ListTile( |     tiles.add(ListTile( | ||||||
|       title: Text("${widget.company.email}"), |       title: Text("${widget.company.email}"), | ||||||
|       leading: FaIcon(FontAwesomeIcons.at, color: COLOR_ACTION), |       leading: Icon(TablerIcons.at, color: COLOR_ACTION), | ||||||
|       onTap: () async { |       onTap: () async { | ||||||
|         openLink("mailto:${widget.company.email}"); |         openLink("mailto:${widget.company.email}"); | ||||||
|       }, |       }, | ||||||
| @@ -278,7 +278,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|   if (widget.company.phone.isNotEmpty) { |   if (widget.company.phone.isNotEmpty) { | ||||||
|     tiles.add(ListTile( |     tiles.add(ListTile( | ||||||
|       title: Text("${widget.company.phone}"), |       title: Text("${widget.company.phone}"), | ||||||
|       leading: FaIcon(FontAwesomeIcons.phone, color: COLOR_ACTION), |       leading: Icon(TablerIcons.phone, color: COLOR_ACTION), | ||||||
|       onTap: () { |       onTap: () { | ||||||
|         openLink("tel:${widget.company.phone}"); |         openLink("tel:${widget.company.phone}"); | ||||||
|       }, |       }, | ||||||
| @@ -291,7 +291,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|     if (widget.company.link.isNotEmpty) { |     if (widget.company.link.isNotEmpty) { | ||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text("${widget.company.link}"), |         title: Text("${widget.company.link}"), | ||||||
|         leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |         leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           widget.company.openLink(); |           widget.company.openLink(); | ||||||
|         }, |         }, | ||||||
| @@ -310,7 +310,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|         tiles.add( |         tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().supplierParts), |             title: Text(L10().supplierParts), | ||||||
|             leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), |             leading: Icon(TablerIcons.building, color: COLOR_ACTION), | ||||||
|             trailing: Text(supplierPartCount.toString()), |             trailing: Text(supplierPartCount.toString()), | ||||||
|             onTap: () { |             onTap: () { | ||||||
|               Navigator.push( |               Navigator.push( | ||||||
| @@ -329,7 +329,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().purchaseOrders), |           title: Text(L10().purchaseOrders), | ||||||
|           leading: FaIcon(FontAwesomeIcons.cartShopping, color: COLOR_ACTION), |           leading: Icon(TablerIcons.shopping_cart, color: COLOR_ACTION), | ||||||
|           trailing: Text("${outstandingPurchaseOrders}"), |           trailing: Text("${outstandingPurchaseOrders}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -351,7 +351,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().suppliedParts), |           title: Text(L10().suppliedParts), | ||||||
|           leading: FaIcon(FontAwesomeIcons.shapes), |           leading: Icon(TablerIcons.box), | ||||||
|           trailing: Text("${company.partSuppliedCount}"), |           trailing: Text("${company.partSuppliedCount}"), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -366,7 +366,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().salesOrders), |           title: Text(L10().salesOrders), | ||||||
|           leading: FaIcon(FontAwesomeIcons.truck, color: COLOR_ACTION), |           leading: Icon(TablerIcons.truck, color: COLOR_ACTION), | ||||||
|           trailing: Text("${outstandingSalesOrders}"), |           trailing: Text("${outstandingSalesOrders}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -387,7 +387,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|     if (widget.company.notes.isNotEmpty) { |     if (widget.company.notes.isNotEmpty) { | ||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().notes), |         title: Text(L10().notes), | ||||||
|         leading: FaIcon(FontAwesomeIcons.noteSticky), |         leading: Icon(TablerIcons.note), | ||||||
|         onTap: null, |         onTap: null, | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
| @@ -395,7 +395,7 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> { | |||||||
|  |  | ||||||
|     tiles.add(ListTile( |     tiles.add(ListTile( | ||||||
|       title: Text(L10().attachments), |       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, |       trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, | ||||||
|       onTap: () { |       onTap: () { | ||||||
|         Navigator.push( |         Navigator.push( | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/api.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -78,7 +78,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|     if (widget.supplierPart.canEdit) { |     if (widget.supplierPart.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           IconButton( |           IconButton( | ||||||
|               icon: Icon(Icons.edit_square), |               icon: Icon(TablerIcons.edit), | ||||||
|               tooltip: L10().edit, |               tooltip: L10().edit, | ||||||
|               onPressed: () { |               onPressed: () { | ||||||
|                 editSupplierPart(context); |                 editSupplierPart(context); | ||||||
| @@ -116,7 +116,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().internalPart), |           title: Text(L10().internalPart), | ||||||
|           subtitle: Text(widget.supplierPart.partName), |           subtitle: Text(widget.supplierPart.partName), | ||||||
|           leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), |           leading: Icon(TablerIcons.box, color: COLOR_ACTION), | ||||||
|           trailing: InvenTreeAPI().getThumbnail(widget.supplierPart.partImage), |           trailing: InvenTreeAPI().getThumbnail(widget.supplierPart.partImage), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             showLoadingOverlay(context); |             showLoadingOverlay(context); | ||||||
| @@ -146,8 +146,8 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|                     color: COLOR_DANGER |                     color: COLOR_DANGER | ||||||
|                 ) |                 ) | ||||||
|             ), |             ), | ||||||
|             leading: FaIcon( |             leading: Icon( | ||||||
|                 FontAwesomeIcons.circleExclamation, |                 TablerIcons.exclamation_circle, | ||||||
|                 color: COLOR_DANGER |                 color: COLOR_DANGER | ||||||
|             ), |             ), | ||||||
|           ) |           ) | ||||||
| @@ -159,7 +159,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().supplier), |         title: Text(L10().supplier), | ||||||
|         subtitle: Text(widget.supplierPart.supplierName), |         subtitle: Text(widget.supplierPart.supplierName), | ||||||
|         leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), |         leading: Icon(TablerIcons.building, color: COLOR_ACTION), | ||||||
|         trailing: InvenTreeAPI().getThumbnail(widget.supplierPart.supplierImage), |         trailing: InvenTreeAPI().getThumbnail(widget.supplierPart.supplierImage), | ||||||
|         onTap: () async { |         onTap: () async { | ||||||
|           showLoadingOverlay(context); |           showLoadingOverlay(context); | ||||||
| @@ -180,7 +180,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().supplierPartNumber), |           title: Text(L10().supplierPartNumber), | ||||||
|           subtitle: Text(widget.supplierPart.SKU), |           subtitle: Text(widget.supplierPart.SKU), | ||||||
|           leading: FaIcon(FontAwesomeIcons.barcode), |           leading: Icon(TablerIcons.barcode), | ||||||
|         ) |         ) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
| @@ -190,7 +190,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().manufacturer), |           title: Text(L10().manufacturer), | ||||||
|           subtitle: Text(widget.supplierPart.manufacturerName), |           subtitle: Text(widget.supplierPart.manufacturerName), | ||||||
|           leading: FaIcon(FontAwesomeIcons.industry, color: COLOR_ACTION), |           leading: Icon(TablerIcons.building_factory_2, color: COLOR_ACTION), | ||||||
|           trailing: InvenTreeAPI().getThumbnail(widget.supplierPart.manufacturerImage), |           trailing: InvenTreeAPI().getThumbnail(widget.supplierPart.manufacturerImage), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             showLoadingOverlay(context); |             showLoadingOverlay(context); | ||||||
| @@ -210,7 +210,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().manufacturerPartNumber), |           title: Text(L10().manufacturerPartNumber), | ||||||
|           subtitle: Text(widget.supplierPart.MPN), |           subtitle: Text(widget.supplierPart.MPN), | ||||||
|           leading: FaIcon(FontAwesomeIcons.barcode), |           leading: Icon(TablerIcons.barcode), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -221,7 +221,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().packaging), |           title: Text(L10().packaging), | ||||||
|           subtitle: widget.supplierPart.packaging.isNotEmpty ? Text(widget.supplierPart.packaging) : null, |           subtitle: widget.supplierPart.packaging.isNotEmpty ? Text(widget.supplierPart.packaging) : null, | ||||||
|           leading: FaIcon(FontAwesomeIcons.boxesPacking), |           leading: Icon(TablerIcons.package), | ||||||
|           trailing: widget.supplierPart.pack_quantity.isNotEmpty ? Text(widget.supplierPart.pack_quantity) : null, |           trailing: widget.supplierPart.pack_quantity.isNotEmpty ? Text(widget.supplierPart.pack_quantity) : null, | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -231,7 +231,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(widget.supplierPart.link), |           title: Text(widget.supplierPart.link), | ||||||
|           leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |           leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             var uri = Uri.tryParse(widget.supplierPart.link); |             var uri = Uri.tryParse(widget.supplierPart.link); | ||||||
|             if (uri != null && await canLaunchUrl(uri)) { |             if (uri != null && await canLaunchUrl(uri)) { | ||||||
| @@ -246,7 +246,7 @@ class _SupplierPartDisplayState extends RefreshableState<SupplierPartDetailWidge | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(widget.supplierPart.note), |           title: Text(widget.supplierPart.note), | ||||||
|           leading: FaIcon(FontAwesomeIcons.pencil), |           leading: Icon(TablerIcons.pencil), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/api.dart"; | import "package:inventree/api.dart"; | ||||||
| @@ -58,7 +58,7 @@ Future<void> choiceDialog(String title, List<Widget> items, {Function? onSelecte | |||||||
| /* | /* | ||||||
|  * Display a "confirmation" dialog allowing the user to accept or reject an action |  * Display a "confirmation" dialog allowing the user to accept or reject an action | ||||||
|  */ |  */ | ||||||
| Future<void> confirmationDialog(String title, String text, {Color? color, IconData icon = FontAwesomeIcons.circleQuestion, String? acceptText, String? rejectText, Function? onAccept, Function? onReject}) async { | Future<void> 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 _accept = acceptText ?? L10().ok; | ||||||
|   String _reject = rejectText ?? L10().cancel; |   String _reject = rejectText ?? L10().cancel; | ||||||
| @@ -69,7 +69,7 @@ Future<void> confirmationDialog(String title, String text, {Color? color, IconDa | |||||||
|         iconColor: color, |         iconColor: color, | ||||||
|         title: ListTile( |         title: ListTile( | ||||||
|           title: Text(title, style: TextStyle(color: color)), |           title: Text(title, style: TextStyle(color: color)), | ||||||
|           leading: FaIcon(icon, color: color), |           leading: Icon(icon, color: color), | ||||||
|         ), |         ), | ||||||
|         content: text.isEmpty ? Text(text) : null, |         content: text.isEmpty ? Text(text) : null, | ||||||
|         actions: [ |         actions: [ | ||||||
| @@ -109,7 +109,7 @@ Future<void> confirmationDialog(String title, String text, {Color? color, IconDa | |||||||
|  * @description = Simple string description of error |  * @description = Simple string description of error | ||||||
|  * @data = Error response (e.g from server) |  * @data = Error response (e.g from server) | ||||||
|  */ |  */ | ||||||
| Future<void> showErrorDialog(String title, {String description = "", APIResponse? response, IconData icon = FontAwesomeIcons.circleExclamation, Function? onDismissed}) async { | Future<void> showErrorDialog(String title, {String description = "", APIResponse? response, IconData icon = TablerIcons.exclamation_circle, Function? onDismissed}) async { | ||||||
|  |  | ||||||
|   List<Widget> children = []; |   List<Widget> children = []; | ||||||
|  |  | ||||||
| @@ -180,7 +180,7 @@ Future<void> showErrorDialog(String title, {String description = "", APIResponse | |||||||
|     builder: (context) => SimpleDialog( |     builder: (context) => SimpleDialog( | ||||||
|       title: ListTile( |       title: ListTile( | ||||||
|         title: Text(title), |         title: Text(title), | ||||||
|         leading: FaIcon(icon), |         leading: Icon(icon), | ||||||
|       ), |       ), | ||||||
|       children: children |       children: children | ||||||
|     ) |     ) | ||||||
| @@ -224,7 +224,7 @@ Future<void> showServerError(String url, String title, String description) async | |||||||
|       showErrorDialog( |       showErrorDialog( | ||||||
|           L10().serverError, |           L10().serverError, | ||||||
|           description: description, |           description: description, | ||||||
|           icon: FontAwesomeIcons.server |           icon: TablerIcons.server | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|   ); |   ); | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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/api.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -120,7 +120,7 @@ class InvenTreeDrawer extends StatelessWidget { | |||||||
|  |  | ||||||
|     // "Home" access |     // "Home" access | ||||||
|     tiles.add(ListTile( |     tiles.add(ListTile( | ||||||
|       leading: FaIcon(FontAwesomeIcons.house, color: COLOR_ACTION), |       leading: Icon(TablerIcons.home, color: COLOR_ACTION), | ||||||
|       title: Text( |       title: Text( | ||||||
|         L10().appTitle, |         L10().appTitle, | ||||||
|         style: TextStyle(fontWeight: FontWeight.bold), |         style: TextStyle(fontWeight: FontWeight.bold), | ||||||
| @@ -134,7 +134,7 @@ class InvenTreeDrawer extends StatelessWidget { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().parts), |           title: Text(L10().parts), | ||||||
|           leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), |           leading: Icon(TablerIcons.box, color: COLOR_ACTION), | ||||||
|           onTap: _parts, |           onTap: _parts, | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -144,7 +144,7 @@ class InvenTreeDrawer extends StatelessWidget { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().stock), |           title: Text(L10().stock), | ||||||
|           leading: FaIcon(FontAwesomeIcons.boxesStacked, color: COLOR_ACTION), |           leading: Icon(TablerIcons.package, color: COLOR_ACTION), | ||||||
|           onTap: _stock, |           onTap: _stock, | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -154,7 +154,7 @@ class InvenTreeDrawer extends StatelessWidget { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().purchaseOrders), |           title: Text(L10().purchaseOrders), | ||||||
|           leading: FaIcon(FontAwesomeIcons.cartShopping, color: COLOR_ACTION), |           leading: Icon(TablerIcons.shopping_cart, color: COLOR_ACTION), | ||||||
|           onTap: _purchaseOrders, |           onTap: _purchaseOrders, | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -164,7 +164,7 @@ class InvenTreeDrawer extends StatelessWidget { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().salesOrders), |           title: Text(L10().salesOrders), | ||||||
|           leading: FaIcon(FontAwesomeIcons.truck, color: COLOR_ACTION), |           leading: Icon(TablerIcons.truck_delivery, color: COLOR_ACTION), | ||||||
|           onTap: _salesOrders, |           onTap: _salesOrders, | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -178,7 +178,7 @@ class InvenTreeDrawer extends StatelessWidget { | |||||||
|  |  | ||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         leading: FaIcon(FontAwesomeIcons.bell, color: COLOR_ACTION), |         leading: Icon(TablerIcons.bell, color: COLOR_ACTION), | ||||||
|         trailing: notification_count > 0 ? Text(notification_count.toString()) : null, |         trailing: notification_count > 0 ? Text(notification_count.toString()) : null, | ||||||
|         title: Text(L10().notifications), |         title: Text(L10().notifications), | ||||||
|         onTap: _notifications, |         onTap: _notifications, | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ import "dart:io"; | |||||||
|  |  | ||||||
| import "package:file_picker/file_picker.dart"; | import "package:file_picker/file_picker.dart"; | ||||||
| import "package:flutter/material.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:image_picker/image_picker.dart"; | ||||||
| import "package:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
|  |  | ||||||
| @@ -80,7 +80,7 @@ class FilePickerDialog { | |||||||
|     actions.add( |     actions.add( | ||||||
|       SimpleDialogOption( |       SimpleDialogOption( | ||||||
|         child: ListTile( |         child: ListTile( | ||||||
|           leading: FaIcon(FontAwesomeIcons.fileArrowUp), |           leading: Icon(TablerIcons.arrow_up), | ||||||
|           title: Text(allowFiles ? L10().selectFile : L10().selectImage), |           title: Text(allowFiles ? L10().selectFile : L10().selectImage), | ||||||
|         ), |         ), | ||||||
|         onPressed: () async { |         onPressed: () async { | ||||||
| @@ -108,7 +108,7 @@ class FilePickerDialog { | |||||||
|       actions.add( |       actions.add( | ||||||
|         SimpleDialogOption( |         SimpleDialogOption( | ||||||
|           child: ListTile( |           child: ListTile( | ||||||
|             leading: FaIcon(FontAwesomeIcons.camera), |             leading: Icon(TablerIcons.camera), | ||||||
|             title: Text(L10().takePicture), |             title: Text(L10().takePicture), | ||||||
|           ), |           ), | ||||||
|           onPressed: () async { |           onPressed: () async { | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| import "dart:async"; | import "dart:async"; | ||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
|  |  | ||||||
| import "package:inventree/api.dart"; | import "package:inventree/api.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -193,7 +192,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|           horizontal: 12 |           horizontal: 12 | ||||||
|         ), |         ), | ||||||
|         child: ListTile( |         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), |           title: Text(label), | ||||||
|           trailing: trailing, |           trailing: trailing, | ||||||
|         ), |         ), | ||||||
| @@ -202,7 +201,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|         if (!allowed) { |         if (!allowed) { | ||||||
|           showSnackIcon( |           showSnackIcon( | ||||||
|             L10().permissionRequired, |             L10().permissionRequired, | ||||||
|             icon: FontAwesomeIcons.circleExclamation, |             icon: TablerIcons.exclamation_circle, | ||||||
|             success: false, |             success: false, | ||||||
|           ); |           ); | ||||||
|           return; |           return; | ||||||
| @@ -229,7 +228,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|         context, |         context, | ||||||
|         L10().parts, |         L10().parts, | ||||||
|         FontAwesomeIcons.shapes, |         TablerIcons.box, | ||||||
|         callback: () { |         callback: () { | ||||||
|           _showParts(context); |           _showParts(context); | ||||||
|         }, |         }, | ||||||
| @@ -241,7 +240,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|         context, |         context, | ||||||
|         L10().partsStarred, |         L10().partsStarred, | ||||||
|         FontAwesomeIcons.bell, |         TablerIcons.bell, | ||||||
|         callback: () { |         callback: () { | ||||||
|           _showStarredParts(context); |           _showStarredParts(context); | ||||||
|         } |         } | ||||||
| @@ -253,7 +252,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|           context, |           context, | ||||||
|           L10().stock, |           L10().stock, | ||||||
|           FontAwesomeIcons.boxesStacked, |           TablerIcons.package, | ||||||
|           callback: () { |           callback: () { | ||||||
|             _showStock(context); |             _showStock(context); | ||||||
|           } |           } | ||||||
| @@ -265,7 +264,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|           context, |           context, | ||||||
|           L10().purchaseOrders, |           L10().purchaseOrders, | ||||||
|           FontAwesomeIcons.cartShopping, |           TablerIcons.shopping_cart, | ||||||
|           callback: () { |           callback: () { | ||||||
|             _showPurchaseOrders(context); |             _showPurchaseOrders(context); | ||||||
|           } |           } | ||||||
| @@ -276,7 +275,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|         context, |         context, | ||||||
|         L10().salesOrders, |         L10().salesOrders, | ||||||
|         FontAwesomeIcons.truck, |         TablerIcons.truck_delivery, | ||||||
|         callback: () { |         callback: () { | ||||||
|           _showSalesOrders(context); |           _showSalesOrders(context); | ||||||
|         } |         } | ||||||
| @@ -288,7 +287,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|           context, |           context, | ||||||
|           L10().suppliers, |           L10().suppliers, | ||||||
|           FontAwesomeIcons.building, |           TablerIcons.building, | ||||||
|           callback: () { |           callback: () { | ||||||
|             _showSuppliers(context); |             _showSuppliers(context); | ||||||
|           } |           } | ||||||
| @@ -304,7 +303,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|           context, |           context, | ||||||
|           L10().manufacturers, |           L10().manufacturers, | ||||||
|           FontAwesomeIcons.industry, |           TablerIcons.building_factory_2, | ||||||
|           callback: () { |           callback: () { | ||||||
|             _showManufacturers(context); |             _showManufacturers(context); | ||||||
|           } |           } | ||||||
| @@ -316,7 +315,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|       tiles.add(_listTile( |       tiles.add(_listTile( | ||||||
|           context, |           context, | ||||||
|           L10().customers, |           L10().customers, | ||||||
|           FontAwesomeIcons.userTie, |           TablerIcons.building_store, | ||||||
|           callback: () { |           callback: () { | ||||||
|             _showCustomers(context); |             _showCustomers(context); | ||||||
|           } |           } | ||||||
| @@ -336,8 +335,8 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|     bool validAddress = serverAddress != null; |     bool validAddress = serverAddress != null; | ||||||
|     bool connecting = !InvenTreeAPI().isConnected() && InvenTreeAPI().isConnecting(); |     bool connecting = !InvenTreeAPI().isConnected() && InvenTreeAPI().isConnecting(); | ||||||
|  |  | ||||||
|     Widget leading = FaIcon(FontAwesomeIcons.circleExclamation, color: COLOR_DANGER); |     Widget leading = Icon(TablerIcons.exclamation_circle, color: COLOR_DANGER); | ||||||
|     Widget trailing = FaIcon(FontAwesomeIcons.server, color: COLOR_ACTION); |     Widget trailing = Icon(TablerIcons.server, color: COLOR_ACTION); | ||||||
|     String title = L10().serverNotConnected; |     String title = L10().serverNotConnected; | ||||||
|     String subtitle = L10().profileSelectOrCreate; |     String subtitle = L10().profileSelectOrCreate; | ||||||
|  |  | ||||||
| @@ -346,7 +345,7 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|     } else if (connecting) { |     } else if (connecting) { | ||||||
|       title = L10().serverConnecting; |       title = L10().serverConnecting; | ||||||
|       subtitle = serverAddress; |       subtitle = serverAddress; | ||||||
|       leading = Spinner(icon: FontAwesomeIcons.spinner, color: COLOR_PROGRESS); |       leading = Spinner(icon: TablerIcons.loader_2, color: COLOR_PROGRESS); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return Center( |     return Center( | ||||||
| @@ -400,8 +399,8 @@ class _InvenTreeHomePageState extends State<InvenTreeHomePage> with BaseWidgetPr | |||||||
|         title: Text(L10().appTitle), |         title: Text(L10().appTitle), | ||||||
|         actions: [ |         actions: [ | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon: FaIcon( |             icon: Icon( | ||||||
|               FontAwesomeIcons.server, |               TablerIcons.server, | ||||||
|               color: connected ? COLOR_SUCCESS : (connecting ? COLOR_PROGRESS: COLOR_DANGER), |               color: connected ? COLOR_SUCCESS : (connecting ? COLOR_PROGRESS: COLOR_DANGER), | ||||||
|             ), |             ), | ||||||
|             onPressed: _selectProfile, |             onPressed: _selectProfile, | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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/inventree/model.dart"; | import "package:inventree/inventree/model.dart"; | ||||||
| import "package:inventree/widget/refreshable_state.dart"; | import "package:inventree/widget/refreshable_state.dart"; | ||||||
| import "package:flutter_markdown/flutter_markdown.dart"; | import "package:flutter_markdown/flutter_markdown.dart"; | ||||||
| @@ -47,7 +47,7 @@ class _NotesState extends RefreshableState<NotesWidget> { | |||||||
|     if (widget.model.canEdit) { |     if (widget.model.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|           icon: FaIcon(FontAwesomeIcons.penToSquare), |           icon: Icon(TablerIcons.edit), | ||||||
|           tooltip: L10().edit, |           tooltip: L10().edit, | ||||||
|           onPressed: () { |           onPressed: () { | ||||||
|             widget.model.editForm( |             widget.model.editForm( | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.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/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| import "package:inventree/inventree/model.dart"; | import "package:inventree/inventree/model.dart"; | ||||||
| @@ -80,7 +80,7 @@ class _NotificationState extends RefreshableState<NotificationWidget> { | |||||||
|           L10().notifications, |           L10().notifications, | ||||||
|         ), |         ), | ||||||
|         subtitle: notifications.isEmpty ? Text(L10().notificationsEmpty) : null, |         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}"), |         trailing: Text("${notifications.length}"), | ||||||
|       ) |       ) | ||||||
|     ); |     ); | ||||||
| @@ -91,7 +91,7 @@ class _NotificationState extends RefreshableState<NotificationWidget> { | |||||||
|           title: Text(notification.name), |           title: Text(notification.name), | ||||||
|           subtitle: Text(notification.message), |           subtitle: Text(notification.message), | ||||||
|           trailing: IconButton( |           trailing: IconButton( | ||||||
|             icon: FaIcon(FontAwesomeIcons.bookmark), |             icon: Icon(TablerIcons.bookmark), | ||||||
|             onPressed: isDismissing ? null : () async { |             onPressed: isDismissing ? null : () async { | ||||||
|               dismissNotification(context, notification); |               dismissNotification(context, notification); | ||||||
|             }, |             }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/api_form.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -48,7 +48,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|     if (widget.item.canEdit) { |     if (widget.item.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|           icon: Icon(Icons.edit_square), |           icon: Icon(TablerIcons.edit), | ||||||
|           onPressed: () { |           onPressed: () { | ||||||
|             _editLineItem(context); |             _editLineItem(context); | ||||||
|           }, |           }, | ||||||
| @@ -68,7 +68,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|       if (!widget.item.isComplete) { |       if (!widget.item.isComplete) { | ||||||
|         buttons.add( |         buttons.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.rightToBracket, color: Colors.blue), |             child: Icon(TablerIcons.transition_right, color: Colors.blue), | ||||||
|             label: L10().receiveItem, |             label: L10().receiveItem, | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               receiveLineItem(context); |               receiveLineItem(context); | ||||||
| @@ -146,7 +146,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|       order.receive_url, |       order.receive_url, | ||||||
|       fields, |       fields, | ||||||
|       method: "POST", |       method: "POST", | ||||||
|       icon: FontAwesomeIcons.rightToBracket, |       icon: TablerIcons.transition_right, | ||||||
|       onSuccess: (data) async { |       onSuccess: (data) async { | ||||||
|         showSnackIcon(L10().receivedItem, success: true); |         showSnackIcon(L10().receivedItem, success: true); | ||||||
|         refresh(context); |         refresh(context); | ||||||
| @@ -167,7 +167,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().internalPart), |         title: Text(L10().internalPart), | ||||||
|         subtitle: Text(widget.item.partName), |         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), |         trailing: api.getThumbnail(widget.item.partImage), | ||||||
|         onTap: () async { |         onTap: () async { | ||||||
|           showLoadingOverlay(context); |           showLoadingOverlay(context); | ||||||
| @@ -186,7 +186,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().supplierPart), |         title: Text(L10().supplierPart), | ||||||
|         subtitle: Text(widget.item.SKU), |         subtitle: Text(widget.item.SKU), | ||||||
|         leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), |         leading: Icon(TablerIcons.building, color: COLOR_ACTION), | ||||||
|         onTap: () async { |         onTap: () async { | ||||||
|           showLoadingOverlay(context); |           showLoadingOverlay(context); | ||||||
|           var part = await InvenTreeSupplierPart().get(widget.item.supplierPartId); |           var part = await InvenTreeSupplierPart().get(widget.item.supplierPartId); | ||||||
| @@ -210,7 +210,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|                 color: widget.item.isComplete ? COLOR_SUCCESS: COLOR_WARNING |                 color: widget.item.isComplete ? COLOR_SUCCESS: COLOR_WARNING | ||||||
|             ) |             ) | ||||||
|         ), |         ), | ||||||
|         leading: FaIcon(FontAwesomeIcons.boxOpen), |         leading: Icon(TablerIcons.progress), | ||||||
|       ) |       ) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
| @@ -220,7 +220,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().reference), |             title: Text(L10().reference), | ||||||
|             subtitle: Text(widget.item.reference), |             subtitle: Text(widget.item.reference), | ||||||
|             leading: FaIcon(FontAwesomeIcons.hashtag), |             leading: Icon(TablerIcons.hash), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -229,7 +229,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().unitPrice), |         title: Text(L10().unitPrice), | ||||||
|         leading: FaIcon(FontAwesomeIcons.dollarSign), |         leading: Icon(TablerIcons.currency_dollar), | ||||||
|         trailing: Text( |         trailing: Text( | ||||||
|           renderCurrency(widget.item.purchasePrice, widget.item.purchasePriceCurrency) |           renderCurrency(widget.item.purchasePrice, widget.item.purchasePriceCurrency) | ||||||
|         ), |         ), | ||||||
| @@ -242,7 +242,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().notes), |           title: Text(L10().notes), | ||||||
|           subtitle: Text(widget.item.notes), |           subtitle: Text(widget.item.notes), | ||||||
|           leading: FaIcon(FontAwesomeIcons.noteSticky), |           leading: Icon(TablerIcons.note), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -253,7 +253,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().link), |           title: Text(L10().link), | ||||||
|           subtitle: Text(widget.item.link), |           subtitle: Text(widget.item.link), | ||||||
|           leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |           leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             await openLink(widget.item.link); |             await openLink(widget.item.link); | ||||||
|           }, |           }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/dialogs.dart"; | ||||||
| import "package:inventree/widget/order/po_line_list.dart"; | import "package:inventree/widget/order/po_line_list.dart"; | ||||||
|  |  | ||||||
| @@ -57,7 +57,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|     if (widget.order.canEdit) { |     if (widget.order.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|           icon: Icon(Icons.edit_square), |           icon: Icon(TablerIcons.edit), | ||||||
|           tooltip: L10().purchaseOrderEdit, |           tooltip: L10().purchaseOrderEdit, | ||||||
|           onPressed: () { |           onPressed: () { | ||||||
|             editOrder(context); |             editOrder(context); | ||||||
| @@ -78,7 +78,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|  |  | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.circlePlus, color: Colors.green), |             child: Icon(TablerIcons.circle_plus, color: Colors.green), | ||||||
|             label: L10().lineItemAdd, |             label: L10().lineItemAdd, | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               _addLineItem(context); |               _addLineItem(context); | ||||||
| @@ -88,7 +88,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|  |  | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.paperPlane, color: Colors.blue), |             child: Icon(TablerIcons.send, color: Colors.blue), | ||||||
|             label: L10().issueOrder, |             label: L10().issueOrder, | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               _issueOrder(context); |               _issueOrder(context); | ||||||
| @@ -100,7 +100,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|       if (widget.order.isOpen) { |       if (widget.order.isOpen) { | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.circleXmark, color: Colors.red), |             child: Icon(TablerIcons.circle_x, color: Colors.red), | ||||||
|             label: L10().cancelOrder, |             label: L10().cancelOrder, | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               _cancelOrder(context); |               _cancelOrder(context); | ||||||
| @@ -142,7 +142,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|  |  | ||||||
|     confirmationDialog( |     confirmationDialog( | ||||||
|       L10().issueOrder, "", |       L10().issueOrder, "", | ||||||
|       icon: FontAwesomeIcons.paperPlane, |       icon: TablerIcons.send, | ||||||
|       color: Colors.blue, |       color: Colors.blue, | ||||||
|       acceptText: L10().issue, |       acceptText: L10().issue, | ||||||
|       onAccept: () async { |       onAccept: () async { | ||||||
| @@ -158,7 +158,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|  |  | ||||||
|     confirmationDialog( |     confirmationDialog( | ||||||
|       L10().cancelOrder, "", |       L10().cancelOrder, "", | ||||||
|       icon: FontAwesomeIcons.circleXmark, |       icon: TablerIcons.circle_x, | ||||||
|       color: Colors.red, |       color: Colors.red, | ||||||
|       acceptText: L10().cancel, |       acceptText: L10().cancel, | ||||||
|       onAccept: () async { |       onAccept: () async { | ||||||
| @@ -193,7 +193,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|     if (widget.order.isPending && api.supportsBarcodePOAddLineEndpoint) { |     if (widget.order.isPending && api.supportsBarcodePOAddLineEndpoint) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.circlePlus, color: COLOR_SUCCESS), |           child: Icon(TablerIcons.circle_plus, color: COLOR_SUCCESS), | ||||||
|           label: L10().lineItemAdd, |           label: L10().lineItemAdd, | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             scanBarcode( |             scanBarcode( | ||||||
| @@ -296,7 +296,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().projectCode), |         title: Text(L10().projectCode), | ||||||
|         subtitle: Text("${widget.order.projectCode} - ${widget.order.projectCodeDescription}"), |         subtitle: Text("${widget.order.projectCode} - ${widget.order.projectCodeDescription}"), | ||||||
|         leading: FaIcon(FontAwesomeIcons.list), |         leading: Icon(TablerIcons.list), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -304,7 +304,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().supplier), |         title: Text(L10().supplier), | ||||||
|         subtitle: Text(supplier.name), |         subtitle: Text(supplier.name), | ||||||
|         leading: FaIcon(FontAwesomeIcons.building, color: COLOR_ACTION), |         leading: Icon(TablerIcons.building, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           Navigator.push( |           Navigator.push( | ||||||
|             context, |             context, | ||||||
| @@ -320,7 +320,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().supplierReference), |         title: Text(L10().supplierReference), | ||||||
|         subtitle: Text(widget.order.supplierReference), |         subtitle: Text(widget.order.supplierReference), | ||||||
|         leading: FaIcon(FontAwesomeIcons.hashtag), |         leading: Icon(TablerIcons.hash), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -332,13 +332,13 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|         completedLines.toDouble(), |         completedLines.toDouble(), | ||||||
|         maximum: widget.order.lineItemCount.toDouble(), |         maximum: widget.order.lineItemCount.toDouble(), | ||||||
|       ), |       ), | ||||||
|       leading: FaIcon(FontAwesomeIcons.clipboardCheck), |       leading: Icon(TablerIcons.clipboard_check), | ||||||
|       trailing: Text("${completedLines} /  ${widget.order.lineItemCount}", style: TextStyle(color: lineColor)), |       trailing: Text("${completedLines} /  ${widget.order.lineItemCount}", style: TextStyle(color: lineColor)), | ||||||
|     )); |     )); | ||||||
|  |  | ||||||
|     tiles.add(ListTile( |     tiles.add(ListTile( | ||||||
|       title: Text(L10().totalPrice), |       title: Text(L10().totalPrice), | ||||||
|       leading: FaIcon(FontAwesomeIcons.dollarSign), |       leading: Icon(TablerIcons.currency_dollar), | ||||||
|       trailing: Text( |       trailing: Text( | ||||||
|         renderCurrency(widget.order.totalPrice, widget.order.totalPriceCurrency) |         renderCurrency(widget.order.totalPrice, widget.order.totalPriceCurrency) | ||||||
|       ), |       ), | ||||||
| @@ -348,7 +348,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().issueDate), |         title: Text(L10().issueDate), | ||||||
|         subtitle: Text(widget.order.issueDate), |         subtitle: Text(widget.order.issueDate), | ||||||
|         leading: FaIcon(FontAwesomeIcons.calendarDays), |         leading: Icon(TablerIcons.calendar), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -356,7 +356,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().targetDate), |         title: Text(L10().targetDate), | ||||||
|         subtitle: Text(widget.order.targetDate), |         subtitle: Text(widget.order.targetDate), | ||||||
|         leading: FaIcon(FontAwesomeIcons.calendarDays), |         leading: Icon(TablerIcons.calendar), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -364,7 +364,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|     tiles.add( |     tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().notes), |           title: Text(L10().notes), | ||||||
|           leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), |           leading: Icon(TablerIcons.note, color: COLOR_ACTION), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
|               context, |               context, | ||||||
| @@ -380,7 +380,7 @@ class _PurchaseOrderDetailState extends RefreshableState<PurchaseOrderDetailWidg | |||||||
|     tiles.add( |     tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().attachments), |           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, |           trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/company.dart"; | ||||||
| import "package:inventree/inventree/model.dart"; | import "package:inventree/inventree/model.dart"; | ||||||
| @@ -41,7 +41,7 @@ class _PurchaseOrderListWidgetState extends RefreshableState<PurchaseOrderListWi | |||||||
|     if (InvenTreePurchaseOrder().canCreate) { |     if (InvenTreePurchaseOrder().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.circlePlus), |           child: Icon(TablerIcons.circle_plus), | ||||||
|           label: L10().purchaseOrderCreate, |           label: L10().purchaseOrderCreate, | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             _createPurchaseOrder(context); |             _createPurchaseOrder(context); | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/barcode.dart"; | ||||||
| import "package:inventree/barcode/sales_order.dart"; | import "package:inventree/barcode/sales_order.dart"; | ||||||
| import "package:inventree/inventree/company.dart"; | import "package:inventree/inventree/company.dart"; | ||||||
| @@ -53,7 +53,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|     if (widget.order.canEdit) { |     if (widget.order.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|           icon: Icon(Icons.edit_square), |           icon: Icon(TablerIcons.edit), | ||||||
|           onPressed: () { |           onPressed: () { | ||||||
|             editOrder(context); |             editOrder(context); | ||||||
|           }, |           }, | ||||||
| @@ -105,7 +105,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|  |  | ||||||
|     confirmationDialog( |     confirmationDialog( | ||||||
|         L10().issueOrder, "", |         L10().issueOrder, "", | ||||||
|         icon: FontAwesomeIcons.paperPlane, |         icon: TablerIcons.send, | ||||||
|         color: Colors.blue, |         color: Colors.blue, | ||||||
|         acceptText: L10().issue, |         acceptText: L10().issue, | ||||||
|         onAccept: () async { |         onAccept: () async { | ||||||
| @@ -121,7 +121,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|  |  | ||||||
|     confirmationDialog( |     confirmationDialog( | ||||||
|         L10().cancelOrder, "", |         L10().cancelOrder, "", | ||||||
|         icon: FontAwesomeIcons.circleXmark, |         icon: TablerIcons.circle_x, | ||||||
|         color: Colors.red, |         color: Colors.red, | ||||||
|         acceptText: L10().cancel, |         acceptText: L10().cancel, | ||||||
|         onAccept: () async { |         onAccept: () async { | ||||||
| @@ -139,7 +139,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|     if (widget.order.isPending) { |     if (widget.order.isPending) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.paperPlane, color: Colors.blue), |               child: Icon(TablerIcons.send, color: Colors.blue), | ||||||
|               label: L10().issueOrder, |               label: L10().issueOrder, | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 _issueOrder(context); |                 _issueOrder(context); | ||||||
| @@ -151,7 +151,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|     if (widget.order.isOpen) { |     if (widget.order.isOpen) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.circleXmark, color: Colors.red), |               child: Icon(TablerIcons.circle_x, color: Colors.red), | ||||||
|               label: L10().cancelOrder, |               label: L10().cancelOrder, | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 _cancelOrder(context); |                 _cancelOrder(context); | ||||||
| @@ -164,7 +164,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|     if (widget.order.isInProgress && InvenTreeSOLineItem().canCreate) { |     if (widget.order.isInProgress && InvenTreeSOLineItem().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.circlePlus, color: Colors.green), |           child: Icon(TablerIcons.circle_plus, color: Colors.green), | ||||||
|           label: L10().lineItemAdd, |           label: L10().lineItemAdd, | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             _addLineItem(context); |             _addLineItem(context); | ||||||
| @@ -174,7 +174,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|  |  | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.truck, color: Colors.green), |           child: Icon(TablerIcons.circle_plus, color: Colors.green), | ||||||
|           label: L10().shipmentAdd, |           label: L10().shipmentAdd, | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             _addShipment(context); |             _addShipment(context); | ||||||
| @@ -207,7 +207,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|       if (api.supportsBarcodeSOAllocateEndpoint) { |       if (api.supportsBarcodeSOAllocateEndpoint) { | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.rightToBracket), |             child: Icon(TablerIcons.transition_right), | ||||||
|             label: L10().allocateStock, |             label: L10().allocateStock, | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               scanBarcode( |               scanBarcode( | ||||||
| @@ -299,7 +299,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().projectCode), |         title: Text(L10().projectCode), | ||||||
|         subtitle: Text("${widget.order.projectCode} - ${widget.order.projectCodeDescription}"), |         subtitle: Text("${widget.order.projectCode} - ${widget.order.projectCodeDescription}"), | ||||||
|         leading: FaIcon(FontAwesomeIcons.list), |         leading: Icon(TablerIcons.list), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -307,7 +307,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().customer), |         title: Text(L10().customer), | ||||||
|         subtitle: Text(customer.name), |         subtitle: Text(customer.name), | ||||||
|         leading: FaIcon(FontAwesomeIcons.userTie, color: COLOR_ACTION), |         leading: Icon(TablerIcons.user, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           Navigator.push( |           Navigator.push( | ||||||
|               context, |               context, | ||||||
| @@ -323,7 +323,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().customerReference), |         title: Text(L10().customerReference), | ||||||
|         subtitle: Text(widget.order.customerReference), |         subtitle: Text(widget.order.customerReference), | ||||||
|         leading: FaIcon(FontAwesomeIcons.hashtag), |         leading: Icon(TablerIcons.hash), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -335,7 +335,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|         widget.order.completedLineItemCount.toDouble(), |         widget.order.completedLineItemCount.toDouble(), | ||||||
|         maximum: widget.order.lineItemCount.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)), |       trailing: Text("${widget.order.completedLineItemCount} / ${widget.order.lineItemCount}", style: TextStyle(color: lineColor)), | ||||||
|     )); |     )); | ||||||
|  |  | ||||||
| @@ -345,7 +345,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|         title: Text(L10().targetDate), |         title: Text(L10().targetDate), | ||||||
|         subtitle: Text(widget.order.targetDate), |         subtitle: Text(widget.order.targetDate), | ||||||
|         leading: FaIcon(FontAwesomeIcons.calendarDays), |         leading: Icon(TablerIcons.calendar), | ||||||
|       )); |       )); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -353,7 +353,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().notes), |         title: Text(L10().notes), | ||||||
|         leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), |         leading: Icon(TablerIcons.note, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           Navigator.push( |           Navigator.push( | ||||||
|             context, |             context, | ||||||
| @@ -369,7 +369,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().attachments), |         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, |         trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           Navigator.push( |           Navigator.push( | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/inventree/sales_order.dart"; | ||||||
| import "package:inventree/widget/order/sales_order_detail.dart"; | import "package:inventree/widget/order/sales_order_detail.dart"; | ||||||
| import "package:inventree/widget/paginator.dart"; | import "package:inventree/widget/paginator.dart"; | ||||||
| @@ -39,7 +39,7 @@ class _SalesOrderListWidgetState extends RefreshableState<SalesOrderListWidget> | |||||||
|     if (InvenTreeSalesOrder().canCreate) { |     if (InvenTreeSalesOrder().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.circlePlus), |               child: Icon(TablerIcons.circle_plus), | ||||||
|               label: L10().salesOrderCreate, |               label: L10().salesOrderCreate, | ||||||
|               onTap: () { |               onTap: () { | ||||||
|                 _createSalesOrder(context); |                 _createSalesOrder(context); | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/barcode.dart"; | ||||||
| import "package:inventree/barcode/sales_order.dart"; | import "package:inventree/barcode/sales_order.dart"; | ||||||
|  |  | ||||||
| @@ -52,7 +52,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|     if (widget.item.canEdit) { |     if (widget.item.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|             icon: Icon(Icons.edit_square), |             icon: Icon(TablerIcons.edit), | ||||||
|             onPressed: () { |             onPressed: () { | ||||||
|               _editLineItem(context); |               _editLineItem(context); | ||||||
|             }), |             }), | ||||||
| @@ -87,7 +87,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|       order!.allocate_url, |       order!.allocate_url, | ||||||
|       fields, |       fields, | ||||||
|       method: "POST", |       method: "POST", | ||||||
|       icon: FontAwesomeIcons.rightToBracket, |       icon: TablerIcons.transition_right, | ||||||
|       onSuccess: (data) async { |       onSuccess: (data) async { | ||||||
|         refresh(context); |         refresh(context); | ||||||
|       } |       } | ||||||
| @@ -122,7 +122,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|     if (order != null && order!.isOpen) { |     if (order != null && order!.isOpen) { | ||||||
|       buttons.add( |       buttons.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.rightToBracket, color: Colors.blue), |           child: Icon(TablerIcons.transition_right, color: Colors.blue), | ||||||
|           label: L10().allocateStock, |           label: L10().allocateStock, | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             _allocateStock(context); |             _allocateStock(context); | ||||||
| @@ -143,7 +143,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|       if (api.supportsBarcodeSOAllocateEndpoint) { |       if (api.supportsBarcodeSOAllocateEndpoint) { | ||||||
|         actions.add( |         actions.add( | ||||||
|             SpeedDialChild( |             SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.rightToBracket), |               child: Icon(TablerIcons.transition_right), | ||||||
|               label: L10().allocateStock, |               label: L10().allocateStock, | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 scanBarcode( |                 scanBarcode( | ||||||
| @@ -184,7 +184,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().part), |         title: Text(L10().part), | ||||||
|         subtitle: Text(widget.item.partName), |         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), |         trailing: api.getThumbnail(widget.item.partImage), | ||||||
|         onTap: () async { |         onTap: () async { | ||||||
|           showLoadingOverlay(context); |           showLoadingOverlay(context); | ||||||
| @@ -202,7 +202,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().availableStock), |         title: Text(L10().availableStock), | ||||||
|         leading: FaIcon(FontAwesomeIcons.boxesStacked), |         leading: Icon(TablerIcons.packages), | ||||||
|         trailing: Text(simpleNumberString(widget.item.availableStock)) |         trailing: Text(simpleNumberString(widget.item.availableStock)) | ||||||
|       ) |       ) | ||||||
|     ); |     ); | ||||||
| @@ -210,7 +210,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|     // Allocated quantity |     // Allocated quantity | ||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         leading: FaIcon(FontAwesomeIcons.clipboardCheck), |         leading: Icon(TablerIcons.clipboard_check), | ||||||
|         title: Text(L10().allocated), |         title: Text(L10().allocated), | ||||||
|         subtitle: ProgressBar(widget.item.allocatedRatio), |         subtitle: ProgressBar(widget.item.allocatedRatio), | ||||||
|         trailing: Text( |         trailing: Text( | ||||||
| @@ -233,7 +233,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|             color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING |             color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING | ||||||
|           ), |           ), | ||||||
|         ), |         ), | ||||||
|         leading: FaIcon(FontAwesomeIcons.truck) |         leading: Icon(TablerIcons.truck) | ||||||
|       ) |       ) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
| @@ -243,7 +243,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().reference), |           title: Text(L10().reference), | ||||||
|           subtitle: Text(widget.item.reference), |           subtitle: Text(widget.item.reference), | ||||||
|           leading: FaIcon(FontAwesomeIcons.hashtag) |           leading: Icon(TablerIcons.hash) | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -254,7 +254,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().notes), |             title: Text(L10().notes), | ||||||
|             subtitle: Text(widget.item.notes), |             subtitle: Text(widget.item.notes), | ||||||
|             leading: FaIcon(FontAwesomeIcons.noteSticky), |             leading: Icon(TablerIcons.note), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -265,7 +265,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> { | |||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().link), |             title: Text(L10().link), | ||||||
|             subtitle: Text(widget.item.link), |             subtitle: Text(widget.item.link), | ||||||
|             leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |             leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               await openLink(widget.item.link); |               await openLink(widget.item.link); | ||||||
|             }, |             }, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.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/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/inventree/sales_order.dart"; | import "package:inventree/inventree/sales_order.dart"; | ||||||
| import "package:inventree/widget/paginator.dart"; | import "package:inventree/widget/paginator.dart"; | ||||||
| @@ -47,7 +47,7 @@ class _PaginatedSOShipmentListState extends PaginatedSearchState<PaginatedSOShip | |||||||
|     return ListTile( |     return ListTile( | ||||||
|       title: Text(shipment.reference), |       title: Text(shipment.reference), | ||||||
|       subtitle: Text(shipment.tracking_number), |       subtitle: Text(shipment.tracking_number), | ||||||
|       leading: shipment.shipped ? FaIcon(FontAwesomeIcons.calendarCheck, color: COLOR_SUCCESS) : FaIcon(FontAwesomeIcons.calendarXmark, color: COLOR_WARNING), |       leading: shipment.shipped ? Icon(TablerIcons.calendar_check, color: COLOR_SUCCESS) : Icon(TablerIcons.calendar_cancel, color: COLOR_WARNING), | ||||||
|       trailing: shipment.shipped ? Text(shipment.shipment_date ?? "") : null |       trailing: shipment.shipped ? Text(shipment.shipment_date ?? "") : null | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.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:infinite_scroll_pagination/infinite_scroll_pagination.dart"; | import "package:infinite_scroll_pagination/infinite_scroll_pagination.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/api_form.dart"; | import "package:inventree/api_form.dart"; | ||||||
| @@ -208,7 +208,7 @@ abstract class PaginatedSearchState<T extends PaginatedSearchWidget> extends Sta | |||||||
|       L10().filteringOptions, |       L10().filteringOptions, | ||||||
|       "", |       "", | ||||||
|       fields, |       fields, | ||||||
|       icon: FontAwesomeIcons.circleCheck, |       icon: TablerIcons.circle_check, | ||||||
|       onSuccess: (Map<String, dynamic> data) async { |       onSuccess: (Map<String, dynamic> data) async { | ||||||
|  |  | ||||||
|         // Extract data from the processed form |         // Extract data from the processed form | ||||||
| @@ -487,8 +487,8 @@ abstract class PaginatedSearchState<T extends PaginatedSearchWidget> extends Sta | |||||||
|   Widget buildSearchInput(BuildContext context) { |   Widget buildSearchInput(BuildContext context) { | ||||||
|     return ListTile( |     return ListTile( | ||||||
|       trailing: GestureDetector( |       trailing: GestureDetector( | ||||||
|         child: FaIcon( |         child: Icon( | ||||||
|           searchController.text.isEmpty ? FontAwesomeIcons.magnifyingGlass : FontAwesomeIcons.deleteLeft, |           searchController.text.isEmpty ? TablerIcons.search : TablerIcons.backspace, | ||||||
|           color: searchController.text.isNotEmpty ? COLOR_DANGER : COLOR_ACTION, |           color: searchController.text.isNotEmpty ? COLOR_DANGER : COLOR_ACTION, | ||||||
|         ), |         ), | ||||||
|         onTap: () { |         onTap: () { | ||||||
| @@ -526,7 +526,7 @@ class NoResultsWidget extends StatelessWidget { | |||||||
|         description, |         description, | ||||||
|         style: TextStyle(fontStyle: FontStyle.italic), |         style: TextStyle(fontStyle: FontStyle.italic), | ||||||
|       ), |       ), | ||||||
|       leading: FaIcon(FontAwesomeIcons.circleExclamation, color: COLOR_WARNING), |       leading: Icon(TablerIcons.exclamation_circle, color: COLOR_WARNING), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
|  |  | ||||||
| import "package:flutter/material.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/api.dart"; | ||||||
| import "package:inventree/helpers.dart"; | import "package:inventree/helpers.dart"; | ||||||
| @@ -48,7 +48,7 @@ class _BillOfMaterialsState extends RefreshableState<BillOfMaterialsWidget> { | |||||||
|   @override |   @override | ||||||
|   List<Widget> appBarActions(BuildContext context) => [ |   List<Widget> appBarActions(BuildContext context) => [ | ||||||
|     IconButton( |     IconButton( | ||||||
|       icon: FaIcon(FontAwesomeIcons.filter), |       icon: Icon(TablerIcons.filter), | ||||||
|       onPressed: () async { |       onPressed: () async { | ||||||
|         setState(() { |         setState(() { | ||||||
|           showFilterOptions = !showFilterOptions; |           showFilterOptions = !showFilterOptions; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/app_colors.dart"; | ||||||
| import "package:inventree/l10.dart"; | import "package:inventree/l10.dart"; | ||||||
| @@ -41,7 +41,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> { | |||||||
|       if (InvenTreePartCategory().canEdit) { |       if (InvenTreePartCategory().canEdit) { | ||||||
|         actions.add( |         actions.add( | ||||||
|           IconButton( |           IconButton( | ||||||
|             icon:  Icon(Icons.edit_square), |             icon:  Icon(TablerIcons.edit), | ||||||
|             tooltip: L10().editCategory, |             tooltip: L10().editCategory, | ||||||
|             onPressed: () { |             onPressed: () { | ||||||
|               _editCategoryDialog(context); |               _editCategoryDialog(context); | ||||||
| @@ -61,7 +61,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> { | |||||||
|     if (InvenTreePart().canCreate) { |     if (InvenTreePart().canCreate) { | ||||||
|      actions.add( |      actions.add( | ||||||
|        SpeedDialChild( |        SpeedDialChild( | ||||||
|          child: FaIcon(FontAwesomeIcons.shapes), |          child: Icon(TablerIcons.box), | ||||||
|          label: L10().partCreateDetail, |          label: L10().partCreateDetail, | ||||||
|          onTap: _newPart, |          onTap: _newPart, | ||||||
|        ) |        ) | ||||||
| @@ -71,7 +71,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> { | |||||||
|     if (InvenTreePartCategory().canCreate) { |     if (InvenTreePartCategory().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.sitemap), |           child: Icon(TablerIcons.sitemap), | ||||||
|           label: L10().categoryCreateDetail, |           label: L10().categoryCreateDetail, | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             _newCategory(context); |             _newCategory(context); | ||||||
| @@ -123,7 +123,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> { | |||||||
|     if (widget.category == null) { |     if (widget.category == null) { | ||||||
|       return Card( |       return Card( | ||||||
|         child: ListTile( |         child: ListTile( | ||||||
|           leading: FaIcon(FontAwesomeIcons.shapes), |           leading: Icon(TablerIcons.packages), | ||||||
|           title: Text( |           title: Text( | ||||||
|             L10().partCategoryTopLevel, |             L10().partCategoryTopLevel, | ||||||
|             style: TextStyle(fontStyle: FontStyle.italic), |             style: TextStyle(fontStyle: FontStyle.italic), | ||||||
| @@ -138,7 +138,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> { | |||||||
|               style: TextStyle(fontWeight: FontWeight.bold) |               style: TextStyle(fontWeight: FontWeight.bold) | ||||||
|           ), |           ), | ||||||
|           subtitle: Text("${widget.category?.description}"), |           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<CategoryDisplayWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().parentCategory), |               title: Text(L10().parentCategory), | ||||||
|               subtitle: Text("${widget.category?.parentPathString}"), |               subtitle: Text("${widget.category?.parentPathString}"), | ||||||
|               leading: FaIcon( |               leading: Icon( | ||||||
|                 FontAwesomeIcons.turnUp, |                 TablerIcons.arrow_move_up, | ||||||
|                 color: COLOR_ACTION, |                 color: COLOR_ACTION, | ||||||
|               ), |               ), | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|   | |||||||
| @@ -98,7 +98,7 @@ class _PaginatedPartCategoryListState extends PaginatedSearchState<PaginatedPart | |||||||
|       title: Text(category.name), |       title: Text(category.name), | ||||||
|       subtitle: Text(category.pathstring), |       subtitle: Text(category.pathstring), | ||||||
|       trailing: Text("${category.partcount}"), |       trailing: Text("${category.partcount}"), | ||||||
|       leading: category.customIcon, |       leading: category.customIcon == null ? null : Icon(category.customIcon), | ||||||
|       onTap: () { |       onTap: () { | ||||||
|         Navigator.push( |         Navigator.push( | ||||||
|           context, |           context, | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.dart"; | import "package:flutter_speed_dial/flutter_speed_dial.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
|  |  | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/barcode/barcode.dart"; | import "package:inventree/barcode/barcode.dart"; | ||||||
| @@ -74,7 +73,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|     if (InvenTreePart().canEdit) { |     if (InvenTreePart().canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           IconButton( |           IconButton( | ||||||
|               icon: Icon(Icons.edit_square), |               icon: Icon(TablerIcons.edit), | ||||||
|               tooltip: L10().editPart, |               tooltip: L10().editPart, | ||||||
|               onPressed: () { |               onPressed: () { | ||||||
|                 _editPartDialog(context); |                 _editPartDialog(context); | ||||||
| @@ -109,7 +108,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|     if (InvenTreeStockItem().canCreate) { |     if (InvenTreeStockItem().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.box), |               child: Icon(TablerIcons.packages), | ||||||
|               label: L10().stockItemCreate, |               label: L10().stockItemCreate, | ||||||
|               onTap: () { |               onTap: () { | ||||||
|                 _newStockItem(context); |                 _newStockItem(context); | ||||||
| @@ -121,7 +120,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|     if (labels.isNotEmpty) { |     if (labels.isNotEmpty) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.print), |           child: Icon(TablerIcons.printer), | ||||||
|           label: L10().printLabel, |           label: L10().printLabel, | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             selectAndPrintLabel( |             selectAndPrintLabel( | ||||||
| @@ -329,8 +328,8 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|               color: COLOR_DANGER |               color: COLOR_DANGER | ||||||
|             ) |             ) | ||||||
|           ), |           ), | ||||||
|           leading: FaIcon( |           leading: Icon( | ||||||
|               FontAwesomeIcons.circleExclamation, |               TablerIcons.exclamation_circle, | ||||||
|               color: COLOR_DANGER |               color: COLOR_DANGER | ||||||
|           ), |           ), | ||||||
|         ) |         ) | ||||||
| @@ -363,7 +362,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|             title: Text(L10().partCategory), |             title: Text(L10().partCategory), | ||||||
|             subtitle: Text("${part.categoryName}"), |             subtitle: Text("${part.categoryName}"), | ||||||
|             leading: FaIcon(FontAwesomeIcons.sitemap, color: COLOR_ACTION), |             leading: Icon(TablerIcons.sitemap, color: COLOR_ACTION), | ||||||
|             onTap: () async { |             onTap: () async { | ||||||
|               if (part.categoryId > 0) { |               if (part.categoryId > 0) { | ||||||
|  |  | ||||||
| @@ -384,7 +383,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().partCategory), |             title: Text(L10().partCategory), | ||||||
|             subtitle: Text(L10().partCategoryTopLevel), |             subtitle: Text(L10().partCategoryTopLevel), | ||||||
|             leading: FaIcon(FontAwesomeIcons.sitemap, color: COLOR_ACTION), |             leading: Icon(TablerIcons.sitemap, color: COLOR_ACTION), | ||||||
|             onTap: () { |             onTap: () { | ||||||
|               Navigator.push(context, MaterialPageRoute( |               Navigator.push(context, MaterialPageRoute( | ||||||
|                   builder: (context) => CategoryDisplayWidget(null))); |                   builder: (context) => CategoryDisplayWidget(null))); | ||||||
| @@ -398,7 +397,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().variants), |             title: Text(L10().variants), | ||||||
|             leading: FaIcon(FontAwesomeIcons.shapes, color: COLOR_ACTION), |             leading: Icon(TablerIcons.versions, color: COLOR_ACTION), | ||||||
|             trailing: Text(variantCount.toString()), |             trailing: Text(variantCount.toString()), | ||||||
|             onTap: () { |             onTap: () { | ||||||
|               Navigator.push( |               Navigator.push( | ||||||
| @@ -421,7 +420,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().availableStock), |         title: Text(L10().availableStock), | ||||||
|         subtitle: Text(L10().stockDetails), |         subtitle: Text(L10().stockDetails), | ||||||
|         leading: FaIcon(FontAwesomeIcons.boxesStacked), |         leading: Icon(TablerIcons.packages), | ||||||
|         trailing: Text( |         trailing: Text( | ||||||
|           part.stockString(), |           part.stockString(), | ||||||
|           style: TextStyle( |           style: TextStyle( | ||||||
| @@ -439,7 +438,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().onOrder), |           title: Text(L10().onOrder), | ||||||
|           subtitle: Text(L10().onOrderDetails), |           subtitle: Text(L10().onOrderDetails), | ||||||
|           leading: FaIcon(FontAwesomeIcons.cartShopping), |           leading: Icon(TablerIcons.shopping_cart), | ||||||
|           trailing: Text("${part.onOrderString}"), |           trailing: Text("${part.onOrderString}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             // TODO - Order views |             // TODO - Order views | ||||||
| @@ -456,7 +455,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|         tiles.add( |         tiles.add( | ||||||
|             ListTile( |             ListTile( | ||||||
|                 title: Text(L10().billOfMaterials), |                 title: Text(L10().billOfMaterials), | ||||||
|                 leading: FaIcon(FontAwesomeIcons.tableList, color: COLOR_ACTION), |                 leading: Icon(TablerIcons.list_tree, color: COLOR_ACTION), | ||||||
|                 trailing: Text(bomCount.toString()), |                 trailing: Text(bomCount.toString()), | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   Navigator.push(context, MaterialPageRoute( |                   Navigator.push(context, MaterialPageRoute( | ||||||
| @@ -471,7 +470,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|         tiles.add( |         tiles.add( | ||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().building), |               title: Text(L10().building), | ||||||
|               leading: FaIcon(FontAwesomeIcons.screwdriverWrench), |               leading: Icon(TablerIcons.tools), | ||||||
|               trailing: Text("${simpleNumberString(part.building)}"), |               trailing: Text("${simpleNumberString(part.building)}"), | ||||||
|               onTap: () { |               onTap: () { | ||||||
|                 // TODO |                 // TODO | ||||||
| @@ -487,7 +486,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().usedIn), |             title: Text(L10().usedIn), | ||||||
|             subtitle: Text(L10().usedInDetails), |             subtitle: Text(L10().usedInDetails), | ||||||
|             leading: FaIcon(FontAwesomeIcons.layerGroup, color: COLOR_ACTION), |             leading: Icon(TablerIcons.stack_2, color: COLOR_ACTION), | ||||||
|             trailing: Text(usedInCount.toString()), |             trailing: Text(usedInCount.toString()), | ||||||
|               onTap: () { |               onTap: () { | ||||||
|                 Navigator.push( |                 Navigator.push( | ||||||
| @@ -507,7 +506,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text("${part.keywords}"), |             title: Text("${part.keywords}"), | ||||||
|             leading: FaIcon(FontAwesomeIcons.tags), |             leading: Icon(TablerIcons.tags), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -517,7 +516,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text("${part.link}"), |             title: Text("${part.link}"), | ||||||
|             leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |             leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|             onTap: () { |             onTap: () { | ||||||
|               part.openLink(); |               part.openLink(); | ||||||
|             }, |             }, | ||||||
| @@ -532,7 +531,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().usedIn), |           title: Text(L10().usedIn), | ||||||
|           subtitle: Text(L10().usedInDetails), |           subtitle: Text(L10().usedInDetails), | ||||||
|           leading: FaIcon(FontAwesomeIcons.sitemap), |           leading: Icon(TablerIcons.sitemap), | ||||||
|           trailing: Text("${part.usedInCount}"), |           trailing: Text("${part.usedInCount}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             // TODO |             // TODO | ||||||
| @@ -547,7 +546,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|         tiles.add( |         tiles.add( | ||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().suppliers), |               title: Text(L10().suppliers), | ||||||
|               leading: FaIcon(FontAwesomeIcons.industry, color: COLOR_ACTION), |               leading: Icon(TablerIcons.building_factory, color: COLOR_ACTION), | ||||||
|               trailing: Text("${part.supplierCount}"), |               trailing: Text("${part.supplierCount}"), | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   Navigator.push( |                   Navigator.push( | ||||||
| @@ -566,7 +565,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().notes), |           title: Text(L10().notes), | ||||||
|           leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), |           leading: Icon(TablerIcons.note, color: COLOR_ACTION), | ||||||
|           trailing: Text(""), |           trailing: Text(""), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -580,7 +579,7 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().attachments), |         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, |         trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           Navigator.push( |           Navigator.push( | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| import "dart:io"; | import "dart:io"; | ||||||
|  |  | ||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
|  |  | ||||||
| import "package:inventree/api.dart"; | import "package:inventree/api.dart"; | ||||||
| import "package:inventree/inventree/part.dart"; | import "package:inventree/inventree/part.dart"; | ||||||
| @@ -47,7 +46,7 @@ class _PartImageState extends RefreshableState<PartImageWidget> { | |||||||
|       // File upload |       // File upload | ||||||
|       actions.add( |       actions.add( | ||||||
|         IconButton( |         IconButton( | ||||||
|           icon: FaIcon(FontAwesomeIcons.fileArrowUp), |           icon: Icon(TablerIcons.file_upload), | ||||||
|           onPressed: () async { |           onPressed: () async { | ||||||
|  |  | ||||||
|             FilePickerDialog.pickFile( |             FilePickerDialog.pickFile( | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/api.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -85,7 +86,7 @@ mixin BaseWidgetProperties { | |||||||
|         }, |         }, | ||||||
|       ), |       ), | ||||||
|       IconButton( |       IconButton( | ||||||
|         icon: Icon(Icons.search, color: COLOR_ACTION), |         icon: Icon(TablerIcons.search, color: COLOR_ACTION), | ||||||
|         iconSize: iconSize, |         iconSize: iconSize, | ||||||
|         onPressed: () { |         onPressed: () { | ||||||
|           if (InvenTreeAPI().checkConnection()) { |           if (InvenTreeAPI().checkConnection()) { | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import "dart:async"; | import "dart:async"; | ||||||
| import "package:async/async.dart"; | import "package:async/async.dart"; | ||||||
| import "package:flutter/material.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/api.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -357,8 +357,8 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|           }, |           }, | ||||||
|         ), |         ), | ||||||
|         trailing: GestureDetector( |         trailing: GestureDetector( | ||||||
|           child: FaIcon( |           child: Icon( | ||||||
|             searchController.text.isEmpty ? FontAwesomeIcons.magnifyingGlass : FontAwesomeIcons.deleteLeft, |             searchController.text.isEmpty ? TablerIcons.search : TablerIcons.backspace, | ||||||
|             color: searchController.text.isEmpty ? COLOR_ACTION : COLOR_DANGER, |             color: searchController.text.isEmpty ? COLOR_ACTION : COLOR_DANGER, | ||||||
|           ), |           ), | ||||||
|           onTap: () { |           onTap: () { | ||||||
| @@ -379,7 +379,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       results.add( |       results.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().parts), |           title: Text(L10().parts), | ||||||
|           leading: FaIcon(FontAwesomeIcons.shapes), |           leading: Icon(TablerIcons.box), | ||||||
|           trailing: Text("${nPartResults}"), |           trailing: Text("${nPartResults}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -402,7 +402,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       results.add( |       results.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().partCategories), |           title: Text(L10().partCategories), | ||||||
|           leading: FaIcon(FontAwesomeIcons.sitemap), |           leading: Icon(TablerIcons.sitemap), | ||||||
|           trailing: Text("${nCategoryResults}"), |           trailing: Text("${nCategoryResults}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -425,7 +425,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       results.add( |       results.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().stockItems), |           title: Text(L10().stockItems), | ||||||
|           leading: FaIcon(FontAwesomeIcons.boxesStacked), |           leading: Icon(TablerIcons.package), | ||||||
|           trailing: Text("${nStockResults}"), |           trailing: Text("${nStockResults}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -448,7 +448,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       results.add( |       results.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().stockLocations), |           title: Text(L10().stockLocations), | ||||||
|           leading: FaIcon(FontAwesomeIcons.locationDot), |           leading: Icon(TablerIcons.location), | ||||||
|           trailing: Text("${nLocationResults}"), |           trailing: Text("${nLocationResults}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -471,7 +471,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       results.add( |       results.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().suppliers), |           title: Text(L10().suppliers), | ||||||
|           leading: FaIcon(FontAwesomeIcons.building), |           leading: Icon(TablerIcons.building), | ||||||
|           trailing: Text("${nSupplierResults}"), |           trailing: Text("${nSupplierResults}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -496,7 +496,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       results.add( |       results.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().purchaseOrders), |           title: Text(L10().purchaseOrders), | ||||||
|           leading: FaIcon(FontAwesomeIcons.cartShopping), |           leading: Icon(TablerIcons.shopping_cart), | ||||||
|           trailing: Text("${nPurchaseOrderResults}"), |           trailing: Text("${nPurchaseOrderResults}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -518,7 +518,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().searching), |           title: Text(L10().searching), | ||||||
|           leading: FaIcon(FontAwesomeIcons.magnifyingGlass), |           leading: Icon(TablerIcons.search), | ||||||
|           trailing: CircularProgressIndicator(), |           trailing: CircularProgressIndicator(), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
| @@ -531,7 +531,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> { | |||||||
|             L10().queryNoResults, |             L10().queryNoResults, | ||||||
|             style: TextStyle(fontStyle: FontStyle.italic), |             style: TextStyle(fontStyle: FontStyle.italic), | ||||||
|           ), |           ), | ||||||
|           leading: FaIcon(FontAwesomeIcons.magnifyingGlassMinus), |           leading: Icon(TablerIcons.zoom_cancel), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } else { |     } else { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| import "package:flutter/material.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:one_context/one_context.dart"; | import "package:one_context/one_context.dart"; | ||||||
|  |  | ||||||
| import "package:inventree/helpers.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 |     // Select an icon if we do not have an action | ||||||
|     if (icon == null && onAction == null) { |     if (icon == null && onAction == null) { | ||||||
|       icon = FontAwesomeIcons.circleCheck; |       icon = TablerIcons.circle_check; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   } else if (success != null && success == false) { |   } else if (success != null && success == false) { | ||||||
|     backgroundColor = Colors.deepOrange; |     backgroundColor = Colors.deepOrange; | ||||||
|  |  | ||||||
|     if (icon == null && onAction == null) { |     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) { |   if (icon != null) { | ||||||
|     childs.add(FaIcon(icon)); |     childs.add(Icon(icon)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   OneContext().showSnackBar(builder: (context) => SnackBar( |   OneContext().showSnackBar(builder: (context) => SnackBar( | ||||||
|   | |||||||
| @@ -1,6 +1,4 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
|  |  | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
|  |  | ||||||
| class Spinner extends StatefulWidget { | class Spinner extends StatefulWidget { | ||||||
| @@ -31,7 +29,7 @@ class _SpinnerState extends State<Spinner> with SingleTickerProviderStateMixin { | |||||||
|       duration: Duration(milliseconds: 2000), |       duration: Duration(milliseconds: 2000), | ||||||
|     ) |     ) | ||||||
|       ..repeat(); |       ..repeat(); | ||||||
|     _child = FaIcon( |     _child = Icon( | ||||||
|       widget.icon, |       widget.icon, | ||||||
|       color: widget.color |       color: widget.color | ||||||
|     ); |     ); | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.dart"; | import "package:flutter_speed_dial/flutter_speed_dial.dart"; | ||||||
|  | import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; | ||||||
| import "package:font_awesome_flutter/font_awesome_flutter.dart"; |  | ||||||
|  |  | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| import "package:inventree/barcode/barcode.dart"; | import "package:inventree/barcode/barcode.dart"; | ||||||
| @@ -70,7 +69,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|     if (location != null && InvenTreeStockLocation().canEdit) { |     if (location != null && InvenTreeStockLocation().canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           IconButton( |           IconButton( | ||||||
|               icon: Icon(Icons.edit_square), |               icon: Icon(TablerIcons.edit), | ||||||
|               tooltip: L10().editLocation, |               tooltip: L10().editLocation, | ||||||
|               onPressed: () { |               onPressed: () { | ||||||
|                 _editLocationDialog(context); |                 _editLocationDialog(context); | ||||||
| @@ -92,7 +91,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|       if (InvenTreeStockItem().canEdit) { |       if (InvenTreeStockItem().canEdit) { | ||||||
|         actions.add( |         actions.add( | ||||||
|             SpeedDialChild( |             SpeedDialChild( | ||||||
|                 child: FaIcon(FontAwesomeIcons.qrcode), |                 child: Icon(TablerIcons.qrcode), | ||||||
|                 label: L10().barcodeScanItem, |                 label: L10().barcodeScanItem, | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   scanBarcode( |                   scanBarcode( | ||||||
| @@ -125,7 +124,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|       if (InvenTreeStockLocation().canEdit) { |       if (InvenTreeStockLocation().canEdit) { | ||||||
|         actions.add( |         actions.add( | ||||||
|             SpeedDialChild( |             SpeedDialChild( | ||||||
|                 child: FaIcon(FontAwesomeIcons.qrcode), |                 child: Icon(TablerIcons.qrcode), | ||||||
|                 label: L10().transferStockLocation, |                 label: L10().transferStockLocation, | ||||||
|                 onTap: () { |                 onTap: () { | ||||||
|                   scanBarcode( |                   scanBarcode( | ||||||
| @@ -160,7 +159,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|     if (InvenTreeStockLocation().canCreate) { |     if (InvenTreeStockLocation().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.sitemap), |               child: Icon(TablerIcons.sitemap), | ||||||
|               label: L10().locationCreate, |               label: L10().locationCreate, | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 _newLocation(context); |                 _newLocation(context); | ||||||
| @@ -173,7 +172,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|     if (InvenTreeStockItem().canCreate) { |     if (InvenTreeStockItem().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.boxesStacked), |               child: Icon(TablerIcons.packages), | ||||||
|               label: L10().stockItemCreate, |               label: L10().stockItemCreate, | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 _newStockItem(context); |                 _newStockItem(context); | ||||||
| @@ -185,7 +184,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|     if (widget.location != null && labels.isNotEmpty) { |     if (widget.location != null && labels.isNotEmpty) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.print), |               child: Icon(TablerIcons.printer), | ||||||
|               label: L10().printLabel, |               label: L10().printLabel, | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 selectAndPrintLabel( |                 selectAndPrintLabel( | ||||||
| @@ -334,7 +333,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|                 L10().stockTopLevel, |                 L10().stockTopLevel, | ||||||
|                 style: TextStyle(fontStyle: FontStyle.italic) |                 style: TextStyle(fontStyle: FontStyle.italic) | ||||||
|             ), |             ), | ||||||
|             leading: FaIcon(FontAwesomeIcons.boxesStacked), |             leading: Icon(TablerIcons.packages), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
|     } else { |     } else { | ||||||
| @@ -342,8 +341,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text("${location!.name}"), |           title: Text("${location!.name}"), | ||||||
|           subtitle: Text("${location!.description}"), |           subtitle: Text("${location!.description}"), | ||||||
|           leading: location!.customIcon ?? |           leading: location!.customIcon == null ? Icon(TablerIcons.packages) : Icon(location!.customIcon) | ||||||
|               FaIcon(FontAwesomeIcons.boxesStacked), |  | ||||||
|         ), |         ), | ||||||
|       ]; |       ]; | ||||||
|  |  | ||||||
| @@ -352,7 +350,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> { | |||||||
|             ListTile( |             ListTile( | ||||||
|               title: Text(L10().parentLocation), |               title: Text(L10().parentLocation), | ||||||
|               subtitle: Text("${location!.parentPathString}"), |               subtitle: Text("${location!.parentPathString}"), | ||||||
|               leading: FaIcon(FontAwesomeIcons.turnUp, color: COLOR_ACTION), |               leading: Icon(TablerIcons.arrow_move_up, color: COLOR_ACTION), | ||||||
|               onTap: () async { |               onTap: () async { | ||||||
|                 int parentId = location?.parentId ?? -1; |                 int parentId = location?.parentId ?? -1; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ class _PaginatedStockLocationListState extends PaginatedSearchState<PaginatedSto | |||||||
|       title: Text(location.name), |       title: Text(location.name), | ||||||
|       subtitle: Text(location.pathstring), |       subtitle: Text(location.pathstring), | ||||||
|       trailing: Text("${location.itemcount}"), |       trailing: Text("${location.itemcount}"), | ||||||
|       leading: location.customIcon, |       leading: location.customIcon == null ? null : Icon(location.customIcon), | ||||||
|       onTap: () { |       onTap: () { | ||||||
|         Navigator.push( |         Navigator.push( | ||||||
|           context, |           context, | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/app_colors.dart"; | ||||||
| import "package:inventree/barcode/barcode.dart"; | import "package:inventree/barcode/barcode.dart"; | ||||||
| @@ -70,7 +70,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     if (widget.item.canEdit) { |     if (widget.item.canEdit) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           IconButton( |           IconButton( | ||||||
|               icon: Icon(Icons.edit_square), |               icon: Icon(TablerIcons.edit), | ||||||
|               tooltip: L10().editItem, |               tooltip: L10().editItem, | ||||||
|               onPressed: () { |               onPressed: () { | ||||||
|                 _editStockItem(context); |                 _editStockItem(context); | ||||||
| @@ -94,7 +94,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|  |  | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.circleCheck, color: Colors.blue), |             child: Icon(TablerIcons.circle_check, color: Colors.blue), | ||||||
|             label: L10().countStock, |             label: L10().countStock, | ||||||
|             onTap: _countStockDialog, |             onTap: _countStockDialog, | ||||||
|           ) |           ) | ||||||
| @@ -102,7 +102,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|  |  | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.circleMinus, color: Colors.red), |             child: Icon(TablerIcons.circle_minus, color: Colors.red), | ||||||
|             label: L10().removeStock, |             label: L10().removeStock, | ||||||
|             onTap: _removeStockDialog, |             onTap: _removeStockDialog, | ||||||
|           ) |           ) | ||||||
| @@ -110,7 +110,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|  |  | ||||||
|         actions.add( |         actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|             child: FaIcon(FontAwesomeIcons.circlePlus, color: Colors.green), |             child: Icon(TablerIcons.circle_plus, color: Colors.green), | ||||||
|             label: L10().addStock, |             label: L10().addStock, | ||||||
|             onTap: _addStockDialog, |             onTap: _addStockDialog, | ||||||
|           ) |           ) | ||||||
| @@ -120,7 +120,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       // Transfer item |       // Transfer item | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: Icon(Icons.trolley), |           child: Icon(TablerIcons.transfer), | ||||||
|           label: L10().transferStock, |           label: L10().transferStock, | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             _transferStockDialog(context); |             _transferStockDialog(context); | ||||||
| @@ -132,7 +132,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     if (labels.isNotEmpty) { |     if (labels.isNotEmpty) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.print), |           child: Icon(TablerIcons.printer), | ||||||
|           label: L10().printLabel, |           label: L10().printLabel, | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             selectAndPrintLabel( |             selectAndPrintLabel( | ||||||
| @@ -150,7 +150,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     if (widget.item.canDelete) { |     if (widget.item.canDelete) { | ||||||
|       actions.add( |       actions.add( | ||||||
|           SpeedDialChild( |           SpeedDialChild( | ||||||
|               child: FaIcon(FontAwesomeIcons.trashCan, color: Colors.red), |               child: Icon(TablerIcons.trash, color: Colors.red), | ||||||
|               label: L10().stockItemDelete, |               label: L10().stockItemDelete, | ||||||
|               onTap: () { |               onTap: () { | ||||||
|                 _deleteItem(context); |                 _deleteItem(context); | ||||||
| @@ -284,7 +284,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     confirmationDialog( |     confirmationDialog( | ||||||
|       L10().stockItemDelete, |       L10().stockItemDelete, | ||||||
|       L10().stockItemDeleteConfirm, |       L10().stockItemDeleteConfirm, | ||||||
|       icon: FontAwesomeIcons.trashCan, |       icon: TablerIcons.trash, | ||||||
|       color: Colors.red, |       color: Colors.red, | ||||||
|       acceptText: L10().delete, |       acceptText: L10().delete, | ||||||
|       onAccept: () async { |       onAccept: () async { | ||||||
| @@ -353,7 +353,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       InvenTreeStockItem.addStockUrl(), |       InvenTreeStockItem.addStockUrl(), | ||||||
|       fields, |       fields, | ||||||
|       method: "POST", |       method: "POST", | ||||||
|       icon: FontAwesomeIcons.circlePlus, |       icon: TablerIcons.circle_plus, | ||||||
|       onSuccess: (data) async { |       onSuccess: (data) async { | ||||||
|         _stockUpdateMessage(true); |         _stockUpdateMessage(true); | ||||||
|         refresh(context); |         refresh(context); | ||||||
| @@ -394,7 +394,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         InvenTreeStockItem.removeStockUrl(), |         InvenTreeStockItem.removeStockUrl(), | ||||||
|         fields, |         fields, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         icon: FontAwesomeIcons.circleMinus, |         icon: TablerIcons.circle_minus, | ||||||
|         onSuccess: (data) async { |         onSuccess: (data) async { | ||||||
|           _stockUpdateMessage(true); |           _stockUpdateMessage(true); | ||||||
|           refresh(context); |           refresh(context); | ||||||
| @@ -425,7 +425,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         InvenTreeStockItem.countStockUrl(), |         InvenTreeStockItem.countStockUrl(), | ||||||
|         fields, |         fields, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         icon: FontAwesomeIcons.clipboardCheck, |         icon: TablerIcons.clipboard_check, | ||||||
|         onSuccess: (data) async { |         onSuccess: (data) async { | ||||||
|           _stockUpdateMessage(true); |           _stockUpdateMessage(true); | ||||||
|           refresh(context); |           refresh(context); | ||||||
| @@ -446,7 +446,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         InvenTreeStockItem.transferStockUrl(), |         InvenTreeStockItem.transferStockUrl(), | ||||||
|         fields, |         fields, | ||||||
|         method: "POST", |         method: "POST", | ||||||
|         icon: FontAwesomeIcons.dolly, |         icon: TablerIcons.transfer, | ||||||
|         onSuccess: (data) async { |         onSuccess: (data) async { | ||||||
|           _stockUpdateMessage(true); |           _stockUpdateMessage(true); | ||||||
|           refresh(context); |           refresh(context); | ||||||
| @@ -506,8 +506,8 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().stockLocation), |           title: Text(L10().stockLocation), | ||||||
|           subtitle: Text("${widget.item.locationPathString}"), |           subtitle: Text("${widget.item.locationPathString}"), | ||||||
|           leading: FaIcon( |           leading: Icon( | ||||||
|             FontAwesomeIcons.locationDot, |             TablerIcons.location, | ||||||
|             color: COLOR_ACTION, |             color: COLOR_ACTION, | ||||||
|           ), |           ), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
| @@ -529,7 +529,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().stockLocation), |             title: Text(L10().stockLocation), | ||||||
|             leading: FaIcon(FontAwesomeIcons.locationDot), |             leading: Icon(TablerIcons.location), | ||||||
|             subtitle: Text(L10().locationNotSet), |             subtitle: Text(L10().locationNotSet), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
| @@ -540,7 +540,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: Text(L10().serialNumber), |             title: Text(L10().serialNumber), | ||||||
|             leading: FaIcon(FontAwesomeIcons.hashtag), |             leading: Icon(TablerIcons.hash), | ||||||
|             subtitle: Text("${widget.item.serialNumber}"), |             subtitle: Text("${widget.item.serialNumber}"), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
| @@ -548,7 +548,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|             title: widget.item.allocated > 0 ? Text(L10().quantityAvailable) : Text(L10().quantity), |             title: widget.item.allocated > 0 ? Text(L10().quantityAvailable) : Text(L10().quantity), | ||||||
|             leading: FaIcon(FontAwesomeIcons.cubes), |             leading: Icon(TablerIcons.packages), | ||||||
|             trailing: Text("${widget.item.quantityString()}"), |             trailing: Text("${widget.item.quantityString()}"), | ||||||
|           ) |           ) | ||||||
|       ); |       ); | ||||||
| @@ -558,7 +558,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().status), |         title: Text(L10().status), | ||||||
|         leading: FaIcon(FontAwesomeIcons.circleInfo), |         leading: Icon(TablerIcons.help_circle), | ||||||
|         trailing: Text( |         trailing: Text( | ||||||
|           api.StockStatus.label(widget.item.status), |           api.StockStatus.label(widget.item.status), | ||||||
|           style: TextStyle( |           style: TextStyle( | ||||||
| @@ -574,7 +574,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().supplierPart), |           title: Text(L10().supplierPart), | ||||||
|           subtitle: Text(widget.item.supplierSKU), |           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), |           trailing: InvenTreeAPI().getThumbnail(widget.item.supplierImage, hideIfNull: true), | ||||||
|           onTap: () async { |           onTap: () async { | ||||||
|             showLoadingOverlay(context); |             showLoadingOverlay(context); | ||||||
| @@ -596,7 +596,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().inProduction), |           title: Text(L10().inProduction), | ||||||
|           leading: FaIcon(FontAwesomeIcons.screwdriverWrench), |           leading: Icon(TablerIcons.tools), | ||||||
|           subtitle: Text(L10().inProductionDetail), |           subtitle: Text(L10().inProductionDetail), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             // TODO: Click through to the "build order" |             // TODO: Click through to the "build order" | ||||||
| @@ -610,7 +610,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().batchCode), |           title: Text(L10().batchCode), | ||||||
|           subtitle: Text(widget.item.batch), |           subtitle: Text(widget.item.batch), | ||||||
|           leading: FaIcon(FontAwesomeIcons.layerGroup), |           leading: Icon(TablerIcons.clipboard_text), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -620,7 +620,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().packaging), |           title: Text(L10().packaging), | ||||||
|           subtitle: Text(widget.item.packaging), |           subtitle: Text(widget.item.packaging), | ||||||
|           leading: FaIcon(FontAwesomeIcons.boxesPacking), |           leading: Icon(TablerIcons.package), | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -632,7 +632,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().lastUpdated), |           title: Text(L10().lastUpdated), | ||||||
|           subtitle: Text(widget.item.updatedDateString), |           subtitle: Text(widget.item.updatedDateString), | ||||||
|           leading: FaIcon(FontAwesomeIcons.calendarDays) |           leading: Icon(TablerIcons.calendar) | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -643,7 +643,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().lastStocktake), |           title: Text(L10().lastStocktake), | ||||||
|           subtitle: Text(widget.item.stocktakeDateString), |           subtitle: Text(widget.item.stocktakeDateString), | ||||||
|           leading: FaIcon(FontAwesomeIcons.calendarDays) |           leading: Icon(TablerIcons.calendar) | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -652,7 +652,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text("${widget.item.link}"), |           title: Text("${widget.item.link}"), | ||||||
|           leading: FaIcon(FontAwesomeIcons.link, color: COLOR_ACTION), |           leading: Icon(TablerIcons.link, color: COLOR_ACTION), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             widget.item.openLink(); |             widget.item.openLink(); | ||||||
|           }, |           }, | ||||||
| @@ -664,7 +664,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|           ListTile( |           ListTile( | ||||||
|               title: Text(L10().testResults), |               title: Text(L10().testResults), | ||||||
|               leading: FaIcon(FontAwesomeIcons.listCheck, color: COLOR_ACTION), |               leading: Icon(TablerIcons.list_check, color: COLOR_ACTION), | ||||||
|               trailing: Text("${widget.item.testResultCount}"), |               trailing: Text("${widget.item.testResultCount}"), | ||||||
|               onTap: () { |               onTap: () { | ||||||
|                 Navigator.push( |                 Navigator.push( | ||||||
| @@ -683,7 +683,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().purchasePrice), |           title: Text(L10().purchasePrice), | ||||||
|           leading: FaIcon(FontAwesomeIcons.dollarSign), |           leading: Icon(TablerIcons.currency_dollar), | ||||||
|           trailing: Text( |           trailing: Text( | ||||||
|             renderCurrency(widget.item.purchasePrice, widget.item.purchasePriceCurrency) |             renderCurrency(widget.item.purchasePrice, widget.item.purchasePriceCurrency) | ||||||
|           ) |           ) | ||||||
| @@ -697,7 +697,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|       tiles.add( |       tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().history), |           title: Text(L10().history), | ||||||
|           leading: FaIcon(FontAwesomeIcons.clockRotateLeft, color: COLOR_ACTION), |           leading: Icon(TablerIcons.history, color: COLOR_ACTION), | ||||||
|           trailing: Text("${widget.item.trackingItemCount}"), |           trailing: Text("${widget.item.trackingItemCount}"), | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
| @@ -716,7 +716,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|       ListTile( |       ListTile( | ||||||
|         title: Text(L10().notes), |         title: Text(L10().notes), | ||||||
|         leading: FaIcon(FontAwesomeIcons.noteSticky, color: COLOR_ACTION), |         leading: Icon(TablerIcons.note, color: COLOR_ACTION), | ||||||
|         onTap: () { |         onTap: () { | ||||||
|           Navigator.push( |           Navigator.push( | ||||||
|             context, |             context, | ||||||
| @@ -729,7 +729,7 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> { | |||||||
|     tiles.add( |     tiles.add( | ||||||
|         ListTile( |         ListTile( | ||||||
|           title: Text(L10().attachments), |           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, |           trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null, | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             Navigator.push( |             Navigator.push( | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import "package:flutter/material.dart"; | import "package:flutter/material.dart"; | ||||||
| import "package:flutter_speed_dial/flutter_speed_dial.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/api.dart"; | ||||||
| import "package:inventree/app_colors.dart"; | import "package:inventree/app_colors.dart"; | ||||||
| @@ -42,7 +42,7 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes | |||||||
|     if (InvenTreeStockItemTestResult().canCreate) { |     if (InvenTreeStockItemTestResult().canCreate) { | ||||||
|       actions.add( |       actions.add( | ||||||
|         SpeedDialChild( |         SpeedDialChild( | ||||||
|           child: FaIcon(FontAwesomeIcons.circlePlus), |           child: Icon(TablerIcons.circle_plus), | ||||||
|           label: L10().testResultAdd, |           label: L10().testResultAdd, | ||||||
|           onTap: () { |           onTap: () { | ||||||
|             addTestResult(context); |             addTestResult(context); | ||||||
| @@ -172,7 +172,7 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes | |||||||
|       String _value = ""; |       String _value = ""; | ||||||
|       String _notes = ""; |       String _notes = ""; | ||||||
|  |  | ||||||
|       FaIcon _icon = FaIcon(FontAwesomeIcons.circleQuestion, color: Colors.lightBlue); |       Widget _icon = Icon(TablerIcons.help_circle, color: Colors.lightBlue); | ||||||
|       bool _valueRequired = false; |       bool _valueRequired = false; | ||||||
|       bool _attachmentRequired = false; |       bool _attachmentRequired = false; | ||||||
|  |  | ||||||
| @@ -195,11 +195,11 @@ class _StockItemTestResultDisplayState extends RefreshableState<StockItemTestRes | |||||||
|       } |       } | ||||||
|  |  | ||||||
|       if (!_hasResult) { |       if (!_hasResult) { | ||||||
|         _icon = FaIcon(FontAwesomeIcons.circleQuestion, color: Colors.blue); |         _icon = Icon(TablerIcons.help_circle, color: Colors.blue); | ||||||
|       } else if (_result == true) { |       } else if (_result == true) { | ||||||
|         _icon = FaIcon(FontAwesomeIcons.circleCheck, color: COLOR_SUCCESS); |         _icon = Icon(TablerIcons.circle_check, color: COLOR_SUCCESS); | ||||||
|       } else if (_result == false) { |       } else if (_result == false) { | ||||||
|         _icon = FaIcon(FontAwesomeIcons.circleXmark, color: COLOR_DANGER); |         _icon = Icon(TablerIcons.circle_x, color: COLOR_DANGER); | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       tiles.add(ListTile( |       tiles.add(ListTile( | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -443,6 +443,14 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.7.0" |     version: "0.7.0" | ||||||
|  |   flutter_tabler_icons: | ||||||
|  |     dependency: "direct main" | ||||||
|  |     description: | ||||||
|  |       name: flutter_tabler_icons | ||||||
|  |       sha256: a1dd0221ab8c77ee15046b8da8feac5ba129b5efd2b667e199c110cf930693b3 | ||||||
|  |       url: "https://pub.dev" | ||||||
|  |     source: hosted | ||||||
|  |     version: "1.35.0" | ||||||
|   flutter_test: |   flutter_test: | ||||||
|     dependency: "direct dev" |     dependency: "direct dev" | ||||||
|     description: flutter |     description: flutter | ||||||
| @@ -453,14 +461,6 @@ packages: | |||||||
|     description: flutter |     description: flutter | ||||||
|     source: sdk |     source: sdk | ||||||
|     version: "0.0.0" |     version: "0.0.0" | ||||||
|   font_awesome_flutter: |  | ||||||
|     dependency: "direct main" |  | ||||||
|     description: |  | ||||||
|       name: font_awesome_flutter |  | ||||||
|       sha256: "275ff26905134bcb59417cf60ad979136f1f8257f2f449914b2c3e05bbb4cd6f" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "10.7.0" |  | ||||||
|   frontend_server_client: |   frontend_server_client: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ dependencies: | |||||||
|   flutter_markdown: ^0.6.19               # Rendering markdown |   flutter_markdown: ^0.6.19               # Rendering markdown | ||||||
|   flutter_overlay_loader: ^2.0.0          # Overlay screen support |   flutter_overlay_loader: ^2.0.0          # Overlay screen support | ||||||
|   flutter_speed_dial: ^6.2.0              # Speed dial / FAB implementation |   flutter_speed_dial: ^6.2.0              # Speed dial / FAB implementation | ||||||
|   font_awesome_flutter: ^10.7.0           # FontAwesome icon set |   flutter_tabler_icons: ^1.35.0 | ||||||
|   http: ^0.13.6 |   http: ^0.13.6 | ||||||
|   image_picker: ^1.0.8                    # Select or take photos |   image_picker: ^1.0.8                    # Select or take photos | ||||||
|   infinite_scroll_pagination: ^4.0.0      # Let the server do all the work! |   infinite_scroll_pagination: ^4.0.0      # Let the server do all the work! | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user