2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00

Change from fontawesome to tabler icons (#516)
Some checks failed
Android / build (push) Has been cancelled
CI / test (push) Has been cancelled
iOS / build (push) Has been cancelled

* 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:
Oliver 2024-08-08 19:44:44 +10:00 committed by GitHub
parent 42de3fd7d4
commit c9cad2f89f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
53 changed files with 378 additions and 1864 deletions

View File

@ -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
--- ---

View File

@ -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;
} }

View File

@ -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()) {

View File

@ -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,
); );
} }

View File

@ -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;

View File

@ -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
); );

View File

@ -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);
} }

View File

@ -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);
}); });

View File

@ -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);
} }

View File

@ -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

View File

@ -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");

View File

@ -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"];

View File

@ -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);
}, },

View File

@ -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) {

View File

@ -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: () {

View File

@ -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) {

View File

@ -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;

View File

@ -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) {

View File

@ -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();

View File

@ -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,
) )
] ]

View File

@ -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)) {

View File

@ -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(

View File

@ -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),
) )
); );
} }

View File

@ -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
); );
} }
); );

View File

@ -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,

View File

@ -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 {

View File

@ -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,

View File

@ -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(

View File

@ -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);
}, },

View File

@ -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);
}, },

View File

@ -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(

View File

@ -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);

View File

@ -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(
@ -407,4 +407,4 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
]; ];
} }
} }

View File

@ -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);

View File

@ -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);
}, },

View File

@ -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
); );

View File

@ -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),
); );
} }

View File

@ -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;

View File

@ -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 {

View File

@ -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,

View File

@ -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(

View File

@ -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(

View File

@ -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()) {

View File

@ -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 {

View File

@ -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(

View File

@ -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
); );

View File

@ -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;

View File

@ -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,

View File

@ -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(

View File

@ -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(

View File

@ -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:

View File

@ -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!