mirror of
https://github.com/inventree/inventree-app.git
synced 2025-07-06 22:00:43 +00:00
Link icons (#677)
* Add LinkIcon component * Visual UI updates - Refactor some components - Clearer text display - Add obvious chevron icon when a "tile" will take the user somewhere else * dart format * Adjust release notes * Add visual separator * Cleanup unused imports
This commit is contained in:
@ -3,6 +3,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/helpers.dart";
|
||||
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
|
||||
@ -70,36 +71,44 @@ class _ExtraLineDetailWidgetState
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().reference),
|
||||
trailing: Text(widget.item.reference),
|
||||
subtitle: Text(widget.item.reference),
|
||||
leading: Icon(TablerIcons.hash),
|
||||
),
|
||||
);
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().description),
|
||||
trailing: Text(widget.item.description),
|
||||
subtitle: Text(widget.item.description),
|
||||
leading: Icon(TablerIcons.info_circle),
|
||||
),
|
||||
);
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().quantity),
|
||||
trailing: Text(widget.item.quantity.toString()),
|
||||
trailing: LargeText(widget.item.quantity.toString()),
|
||||
leading: Icon(TablerIcons.progress),
|
||||
),
|
||||
);
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().unitPrice),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
renderCurrency(widget.item.price, widget.item.priceCurrency),
|
||||
),
|
||||
leading: Icon(TablerIcons.currency_dollar),
|
||||
),
|
||||
);
|
||||
|
||||
if (widget.item.notes.isNotEmpty) {
|
||||
tiles.add(
|
||||
ListTile(title: Text(L10().notes), subtitle: Text(widget.item.notes)),
|
||||
ListTile(
|
||||
title: Text(L10().notes),
|
||||
subtitle: Text(widget.item.notes),
|
||||
leading: Icon(TablerIcons.note),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/inventree/model.dart";
|
||||
import "package:inventree/inventree/purchase_order.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
@ -110,7 +111,7 @@ class _PaginatedPOExtraLineListState
|
||||
return ListTile(
|
||||
title: Text(line.reference),
|
||||
subtitle: Text(line.description),
|
||||
trailing: Text(line.quantity.toString()),
|
||||
trailing: LargeText(line.quantity.toString(), size: 14),
|
||||
onTap: () {
|
||||
line.goToDetailPage(context).then((_) {
|
||||
refresh();
|
||||
|
@ -11,11 +11,11 @@ import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/inventree/part.dart";
|
||||
import "package:inventree/inventree/purchase_order.dart";
|
||||
import "package:inventree/inventree/stock.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
|
||||
import "package:inventree/widget/progress.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/snacks.dart";
|
||||
import "package:inventree/widget/company/supplier_part_detail.dart";
|
||||
|
||||
/*
|
||||
* Widget for displaying detail view of a single PurchaseOrderLineItem
|
||||
@ -145,7 +145,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
||||
title: Text(L10().internalPart),
|
||||
subtitle: Text(widget.item.partName),
|
||||
leading: Icon(TablerIcons.box, color: COLOR_ACTION),
|
||||
trailing: api.getThumbnail(widget.item.partImage),
|
||||
trailing: LinkIcon(image: api.getThumbnail(widget.item.partImage)),
|
||||
onTap: () async {
|
||||
showLoadingOverlay();
|
||||
var part = await InvenTreePart().get(widget.item.partId);
|
||||
@ -164,6 +164,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
||||
title: Text(L10().supplierPart),
|
||||
subtitle: Text(widget.item.SKU),
|
||||
leading: Icon(TablerIcons.building, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(),
|
||||
onTap: () async {
|
||||
showLoadingOverlay();
|
||||
var part = await InvenTreeSupplierPart().get(
|
||||
@ -172,12 +173,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
||||
hideLoadingOverlay();
|
||||
|
||||
if (part is InvenTreeSupplierPart) {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SupplierPartDetailWidget(part),
|
||||
),
|
||||
);
|
||||
part.goToDetailPage(context);
|
||||
}
|
||||
},
|
||||
),
|
||||
@ -200,11 +196,9 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().received),
|
||||
subtitle: ProgressBar(widget.item.progressRatio),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
widget.item.progressString,
|
||||
style: TextStyle(
|
||||
color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
leading: Icon(TablerIcons.progress),
|
||||
),
|
||||
@ -226,7 +220,7 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().unitPrice),
|
||||
leading: Icon(TablerIcons.currency_dollar),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
renderCurrency(
|
||||
widget.item.purchasePrice,
|
||||
widget.item.purchasePriceCurrency,
|
||||
|
@ -7,6 +7,7 @@ import "package:inventree/l10.dart";
|
||||
import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/inventree/model.dart";
|
||||
import "package:inventree/inventree/purchase_order.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
import "package:inventree/widget/order/po_line_detail.dart";
|
||||
@ -80,11 +81,9 @@ class _PaginatedPOLineListState
|
||||
return ListTile(
|
||||
title: Text(supplierPart.SKU),
|
||||
subtitle: Text(item.partName),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
item.progressString,
|
||||
style: TextStyle(
|
||||
color: item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
color: item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
leading: InvenTreeAPI().getThumbnail(supplierPart.partImage),
|
||||
onTap: () async {
|
||||
|
@ -14,8 +14,8 @@ import "package:inventree/inventree/stock.dart";
|
||||
import "package:inventree/inventree/purchase_order.dart";
|
||||
|
||||
import "package:inventree/widget/dialogs.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/order/po_extra_line_list.dart";
|
||||
import "package:inventree/widget/stock/location_display.dart";
|
||||
import "package:inventree/widget/order/po_line_list.dart";
|
||||
|
||||
import "package:inventree/widget/attachment_widget.dart";
|
||||
@ -347,11 +347,9 @@ class _PurchaseOrderDetailState
|
||||
title: Text(widget.order.reference),
|
||||
subtitle: Text(widget.order.description),
|
||||
leading: supplier == null ? null : api.getThumbnail(supplier.thumbnail),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
api.PurchaseOrderStatus.label(widget.order.status),
|
||||
style: TextStyle(
|
||||
color: api.PurchaseOrderStatus.color(widget.order.status),
|
||||
),
|
||||
color: api.PurchaseOrderStatus.color(widget.order.status),
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -382,6 +380,7 @@ class _PurchaseOrderDetailState
|
||||
title: Text(L10().supplier),
|
||||
subtitle: Text(supplier.name),
|
||||
leading: Icon(TablerIcons.building, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(),
|
||||
onTap: () {
|
||||
supplier.goToDetailPage(context);
|
||||
},
|
||||
@ -406,14 +405,8 @@ class _PurchaseOrderDetailState
|
||||
title: Text(L10().destination),
|
||||
subtitle: Text(destination!.name),
|
||||
leading: Icon(TablerIcons.map_pin, color: COLOR_ACTION),
|
||||
onTap: () => {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => LocationDisplayWidget(destination),
|
||||
),
|
||||
),
|
||||
},
|
||||
trailing: LinkIcon(),
|
||||
onTap: () => {destination!.goToDetailPage(context)},
|
||||
),
|
||||
);
|
||||
}
|
||||
@ -430,9 +423,9 @@ class _PurchaseOrderDetailState
|
||||
maximum: widget.order.lineItemCount.toDouble(),
|
||||
),
|
||||
leading: Icon(TablerIcons.clipboard_check),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
"${completedLines} / ${widget.order.lineItemCount}",
|
||||
style: TextStyle(color: lineColor),
|
||||
color: lineColor,
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -442,7 +435,7 @@ class _PurchaseOrderDetailState
|
||||
ListTile(
|
||||
title: Text(L10().extraLineItems),
|
||||
leading: Icon(TablerIcons.clipboard_list, color: COLOR_ACTION),
|
||||
trailing: Text(extraLineCount.toString()),
|
||||
trailing: LinkIcon(text: extraLineCount.toString()),
|
||||
onTap: () => {
|
||||
Navigator.push(
|
||||
context,
|
||||
@ -461,7 +454,7 @@ class _PurchaseOrderDetailState
|
||||
ListTile(
|
||||
title: Text(L10().totalPrice),
|
||||
leading: Icon(TablerIcons.currency_dollar),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
renderCurrency(
|
||||
widget.order.totalPrice,
|
||||
widget.order.totalPriceCurrency,
|
||||
@ -474,7 +467,7 @@ class _PurchaseOrderDetailState
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().issueDate),
|
||||
trailing: Text(widget.order.issueDate),
|
||||
trailing: LargeText(widget.order.issueDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -484,7 +477,7 @@ class _PurchaseOrderDetailState
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().startDate),
|
||||
trailing: Text(widget.order.startDate),
|
||||
trailing: LargeText(widget.order.startDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -494,7 +487,7 @@ class _PurchaseOrderDetailState
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().targetDate),
|
||||
trailing: Text(widget.order.targetDate),
|
||||
trailing: LargeText(widget.order.targetDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -504,7 +497,7 @@ class _PurchaseOrderDetailState
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().completionDate),
|
||||
trailing: Text(widget.order.completionDate),
|
||||
trailing: LargeText(widget.order.completionDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -521,7 +514,7 @@ class _PurchaseOrderDetailState
|
||||
? TablerIcons.users
|
||||
: TablerIcons.user,
|
||||
),
|
||||
trailing: Text(widget.order.responsibleName),
|
||||
trailing: LargeText(widget.order.responsibleName),
|
||||
),
|
||||
);
|
||||
}
|
||||
@ -531,6 +524,7 @@ class _PurchaseOrderDetailState
|
||||
ListTile(
|
||||
title: Text(L10().notes),
|
||||
leading: Icon(TablerIcons.note, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
@ -545,7 +539,9 @@ class _PurchaseOrderDetailState
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null,
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
|
@ -4,6 +4,7 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
|
||||
import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/inventree/model.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
@ -173,11 +174,9 @@ class _PaginatedPurchaseOrderListState
|
||||
leading: supplier == null
|
||||
? null
|
||||
: InvenTreeAPI().getThumbnail(supplier.thumbnail),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
InvenTreeAPI().PurchaseOrderStatus.label(order.status),
|
||||
style: TextStyle(
|
||||
color: InvenTreeAPI().PurchaseOrderStatus.color(order.status),
|
||||
),
|
||||
color: InvenTreeAPI().PurchaseOrderStatus.color(order.status),
|
||||
),
|
||||
onTap: () async {
|
||||
order.goToDetailPage(context);
|
||||
|
@ -6,6 +6,7 @@ import "package:inventree/barcode/sales_order.dart";
|
||||
import "package:inventree/inventree/company.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/preferences.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/order/so_extra_line_list.dart";
|
||||
import "package:inventree/widget/order/so_line_list.dart";
|
||||
import "package:inventree/widget/order/so_shipment_list.dart";
|
||||
@ -323,11 +324,9 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
title: Text(widget.order.reference),
|
||||
subtitle: Text(widget.order.description),
|
||||
leading: customer == null ? null : api.getThumbnail(customer.thumbnail),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
api.SalesOrderStatus.label(widget.order.status),
|
||||
style: TextStyle(
|
||||
color: api.SalesOrderStatus.color(widget.order.status),
|
||||
),
|
||||
color: api.SalesOrderStatus.color(widget.order.status),
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -356,6 +355,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
title: Text(L10().customer),
|
||||
subtitle: Text(customer.name),
|
||||
leading: Icon(TablerIcons.user, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(),
|
||||
onTap: () {
|
||||
customer.goToDetailPage(context);
|
||||
},
|
||||
@ -367,7 +367,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().customerReference),
|
||||
trailing: Text(widget.order.customerReference),
|
||||
trailing: LargeText(widget.order.customerReference),
|
||||
leading: Icon(TablerIcons.hash),
|
||||
),
|
||||
);
|
||||
@ -375,6 +375,24 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
|
||||
Color lineColor = widget.order.complete ? COLOR_SUCCESS : COLOR_WARNING;
|
||||
|
||||
// Shipment progress
|
||||
if (widget.order.shipmentCount > 0) {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().shipments),
|
||||
subtitle: ProgressBar(
|
||||
widget.order.completedShipmentCount.toDouble(),
|
||||
maximum: widget.order.shipmentCount.toDouble(),
|
||||
),
|
||||
leading: Icon(TablerIcons.truck_delivery),
|
||||
trailing: LargeText(
|
||||
"${widget.order.completedShipmentCount} / ${widget.order.shipmentCount}",
|
||||
color: lineColor,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().lineItems),
|
||||
@ -383,9 +401,9 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
maximum: widget.order.lineItemCount.toDouble(),
|
||||
),
|
||||
leading: Icon(TablerIcons.clipboard_check),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
"${widget.order.completedLineItemCount} / ${widget.order.lineItemCount}",
|
||||
style: TextStyle(color: lineColor),
|
||||
color: lineColor,
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -395,7 +413,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().extraLineItems),
|
||||
leading: Icon(TablerIcons.clipboard_list, color: COLOR_ACTION),
|
||||
trailing: Text(extraLineCount.toString()),
|
||||
trailing: LinkIcon(text: extraLineCount.toString()),
|
||||
onTap: () => {
|
||||
Navigator.push(
|
||||
context,
|
||||
@ -410,31 +428,13 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
),
|
||||
);
|
||||
|
||||
// Shipment progress
|
||||
if (widget.order.shipmentCount > 0) {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().shipments),
|
||||
subtitle: ProgressBar(
|
||||
widget.order.completedShipmentCount.toDouble(),
|
||||
maximum: widget.order.shipmentCount.toDouble(),
|
||||
),
|
||||
leading: Icon(TablerIcons.truck_delivery),
|
||||
trailing: Text(
|
||||
"${widget.order.completedShipmentCount} / ${widget.order.shipmentCount}",
|
||||
style: TextStyle(color: lineColor),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// TODO: total price
|
||||
|
||||
if (widget.order.startDate.isNotEmpty) {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().startDate),
|
||||
trailing: Text(widget.order.startDate),
|
||||
trailing: LargeText(widget.order.startDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -444,7 +444,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().targetDate),
|
||||
trailing: Text(widget.order.targetDate),
|
||||
trailing: LargeText(widget.order.targetDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -454,7 +454,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
tiles.add(
|
||||
ListTile(
|
||||
title: Text(L10().completionDate),
|
||||
trailing: Text(widget.order.shipmentDate),
|
||||
trailing: LargeText(widget.order.shipmentDate),
|
||||
leading: Icon(TablerIcons.calendar),
|
||||
),
|
||||
);
|
||||
@ -471,7 +471,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
? TablerIcons.users
|
||||
: TablerIcons.user,
|
||||
),
|
||||
trailing: Text(widget.order.responsibleName),
|
||||
trailing: LargeText(widget.order.responsibleName),
|
||||
),
|
||||
);
|
||||
}
|
||||
@ -481,6 +481,7 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().notes),
|
||||
leading: Icon(TablerIcons.note, color: COLOR_ACTION),
|
||||
trailing: LinkIcon(),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
@ -495,7 +496,9 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().attachments),
|
||||
leading: Icon(TablerIcons.file, color: COLOR_ACTION),
|
||||
trailing: attachmentCount > 0 ? Text(attachmentCount.toString()) : null,
|
||||
trailing: LinkIcon(
|
||||
text: attachmentCount > 0 ? attachmentCount.toString() : null,
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
@ -519,8 +522,8 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
List<Widget> getTabIcons(BuildContext context) {
|
||||
return [
|
||||
Tab(text: L10().details),
|
||||
Tab(text: L10().lineItems),
|
||||
Tab(text: L10().shipments),
|
||||
Tab(text: L10().lineItems),
|
||||
];
|
||||
}
|
||||
|
||||
@ -528,8 +531,8 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
|
||||
List<Widget> getTabs(BuildContext context) {
|
||||
return [
|
||||
ListView(children: orderTiles(context)),
|
||||
PaginatedSOLineList({"order": widget.order.pk.toString()}),
|
||||
PaginatedSOShipmentList({"order": widget.order.pk.toString()}),
|
||||
PaginatedSOLineList({"order": widget.order.pk.toString()}),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import "package:flutter/material.dart";
|
||||
import "package:flutter_speed_dial/flutter_speed_dial.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
@ -155,11 +156,9 @@ class _PaginatedSalesOrderListState
|
||||
leading: customer == null
|
||||
? null
|
||||
: InvenTreeAPI().getThumbnail(customer.thumbnail),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
InvenTreeAPI().SalesOrderStatus.label(order.status),
|
||||
style: TextStyle(
|
||||
color: InvenTreeAPI().SalesOrderStatus.color(order.status),
|
||||
),
|
||||
color: InvenTreeAPI().SalesOrderStatus.color(order.status),
|
||||
),
|
||||
onTap: () async {
|
||||
order.goToDetailPage(context);
|
||||
|
@ -6,6 +6,7 @@ import "package:inventree/l10.dart";
|
||||
|
||||
import "package:inventree/inventree/model.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
@ -112,7 +113,7 @@ class _PaginatedSOExtraLineListState
|
||||
return ListTile(
|
||||
title: Text(line.reference),
|
||||
subtitle: Text(line.description),
|
||||
trailing: Text(line.quantity.toString()),
|
||||
trailing: LargeText(line.quantity.toString()),
|
||||
onTap: () {
|
||||
line.goToDetailPage(context).then((_) {
|
||||
refresh();
|
||||
|
@ -10,6 +10,7 @@ import "package:inventree/barcode/sales_order.dart";
|
||||
|
||||
import "package:inventree/inventree/part.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
|
||||
import "package:inventree/widget/refreshable_state.dart";
|
||||
import "package:inventree/widget/progress.dart";
|
||||
@ -172,7 +173,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
|
||||
title: Text(L10().part),
|
||||
subtitle: Text(widget.item.partName),
|
||||
leading: Icon(TablerIcons.box, color: COLOR_ACTION),
|
||||
trailing: api.getThumbnail(widget.item.partImage),
|
||||
trailing: LinkIcon(image: api.getThumbnail(widget.item.partImage)),
|
||||
onTap: () async {
|
||||
showLoadingOverlay();
|
||||
var part = await InvenTreePart().get(widget.item.partId);
|
||||
@ -190,7 +191,7 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().availableStock),
|
||||
leading: Icon(TablerIcons.packages),
|
||||
trailing: Text(simpleNumberString(widget.item.availableStock)),
|
||||
trailing: LargeText(simpleNumberString(widget.item.availableStock)),
|
||||
),
|
||||
);
|
||||
|
||||
@ -200,11 +201,9 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
|
||||
leading: Icon(TablerIcons.clipboard_check),
|
||||
title: Text(L10().allocated),
|
||||
subtitle: ProgressBar(widget.item.allocatedRatio),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
widget.item.allocatedString,
|
||||
style: TextStyle(
|
||||
color: widget.item.isAllocated ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
color: widget.item.isAllocated ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -214,11 +213,9 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
|
||||
ListTile(
|
||||
title: Text(L10().shipped),
|
||||
subtitle: ProgressBar(widget.item.progressRatio),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
widget.item.progressString,
|
||||
style: TextStyle(
|
||||
color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
color: widget.item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
leading: Icon(TablerIcons.truck),
|
||||
),
|
||||
|
@ -1,5 +1,6 @@
|
||||
import "package:flutter/material.dart";
|
||||
import "package:inventree/l10.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/order/so_line_detail.dart";
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
import "package:inventree/inventree/model.dart";
|
||||
@ -67,11 +68,9 @@ class _PaginatedSOLineListState
|
||||
title: Text(part.name),
|
||||
subtitle: Text(part.description),
|
||||
leading: InvenTreeAPI().getThumbnail(part.thumbnail),
|
||||
trailing: Text(
|
||||
trailing: LargeText(
|
||||
item.progressString,
|
||||
style: TextStyle(
|
||||
color: item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
color: item.isComplete ? COLOR_SUCCESS : COLOR_WARNING,
|
||||
),
|
||||
onTap: () async {
|
||||
showLoadingOverlay();
|
||||
|
@ -2,6 +2,7 @@ import "package:flutter/material.dart";
|
||||
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
|
||||
import "package:inventree/app_colors.dart";
|
||||
import "package:inventree/inventree/sales_order.dart";
|
||||
import "package:inventree/widget/link_icon.dart";
|
||||
import "package:inventree/widget/paginator.dart";
|
||||
|
||||
import "package:inventree/inventree/model.dart";
|
||||
@ -56,7 +57,9 @@ class _PaginatedSOShipmentListState
|
||||
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
|
||||
? LargeText(shipment.shipment_date ?? "")
|
||||
: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user