2
0
mirror of https://github.com/inventree/inventree-app.git synced 2026-07-07 05:11:31 +00:00

display model pk entries (#851)

This commit is contained in:
Oliver
2026-07-06 23:18:51 +10:00
committed by GitHub
parent cb6b5a437d
commit e301abebd8
21 changed files with 104 additions and 1 deletions
+1 -1
View File
@@ -57,7 +57,7 @@ android {
defaultConfig {
applicationId "inventree.inventree_app"
minSdkVersion 23
minSdkVersion flutter.minSdkVersion // Flutter now requires API 24+; hardcoding a lower value gets auto-rewritten on every build
targetSdkVersion 35
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
+9
View File
@@ -406,6 +406,15 @@
"darkModeEnable": "Enable dark mode",
"@darkModeEnable": {},
"showPkValue": "Show ID",
"@showPkValue": {},
"showPkValueDetail": "Display the internal ID (PK) value for parts, stock items and other objects",
"@showPkValueDetail": {},
"pk": "ID",
"@pk": {},
"delete": "Delete",
"@delete": {},
+1
View File
@@ -17,6 +17,7 @@ const String INV_HOME_SHOW_CUSTOMERS = "homeShowCustomers";
const String INV_HOME_SHOW_SUPPLIERS = "homeShowSuppliers";
const String INV_SCREEN_ORIENTATION = "appScreenOrientation";
const String INV_SHOW_PK = "showPk";
// Available screen orientation values
const int SCREEN_ORIENTATION_SYSTEM = 0;
+17
View File
@@ -35,6 +35,7 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
bool strictHttps = false;
bool enableLabelPrinting = true;
bool darkMode = false;
bool showPk = false;
int screenOrientation = SCREEN_ORIENTATION_SYSTEM;
@@ -74,6 +75,8 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
true,
)
as bool;
showPk =
await InvenTreeSettingsManager().getValue(INV_SHOW_PK, false) as bool;
darkMode = AdaptiveTheme.of(context).mode.isDark;
@@ -194,6 +197,20 @@ class _InvenTreeAppSettingsState extends State<InvenTreeAppSettingsWidget> {
},
),
),
ListTile(
title: Text(L10().showPkValue),
subtitle: Text(L10().showPkValueDetail),
leading: Icon(TablerIcons.hash),
trailing: Switch(
value: showPk,
onChanged: (bool value) {
InvenTreeSettingsManager().setValue(INV_SHOW_PK, value);
setState(() {
showPk = value;
});
},
),
),
GestureDetector(
child: ListTile(
title: Text(L10().orientation),
+4
View File
@@ -385,6 +385,10 @@ class _BuildOrderDetailState extends RefreshableState<BuildOrderDetailWidget> {
// Header tile
tiles.add(headerTile(context));
if (showPk) {
tiles.add(pkTile(widget.order.pk));
}
// Part information
if (widget.order.partDetail != null) {
InvenTreePart part = widget.order.partDetail!;
+4
View File
@@ -125,6 +125,10 @@ class _BuildItemDetailWidgetState
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.item.pk));
}
// Stock item information
if (widget.item.stockItem != null) {
tiles.add(
+4
View File
@@ -57,6 +57,10 @@ class _BuildLineDetailWidgetState
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.item.pk));
}
// Reference to the part
tiles.add(
ListTile(
+4
View File
@@ -239,6 +239,10 @@ class _CompanyDetailState extends RefreshableState<CompanyDetailWidget> {
),
);
if (showPk) {
tiles.add(pkTile(widget.company.pk));
}
if (!widget.company.active) {
tiles.add(
ListTile(
@@ -125,6 +125,10 @@ class _ManufacturerPartDisplayState
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.manufacturerPart.pk));
}
// Internal Part
tiles.add(
ListTile(
@@ -146,6 +146,10 @@ class _SupplierPartDisplayState
return tiles;
}
if (showPk) {
tiles.add(pkTile(widget.supplierPart.pk));
}
// Internal Part
tiles.add(
ListTile(
+4
View File
@@ -68,6 +68,10 @@ class _ExtraLineDetailWidgetState
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.item.pk));
}
tiles.add(
ListTile(
title: Text(L10().reference),
+4
View File
@@ -139,6 +139,10 @@ class _POLineDetailWidgetState extends RefreshableState<POLineDetailWidget> {
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.item.pk));
}
// Reference to the part
tiles.add(
ListTile(
@@ -404,6 +404,10 @@ class _PurchaseOrderDetailState
tiles.add(headerTile(context));
if (showPk) {
tiles.add(pkTile(widget.order.pk));
}
if (supportProjectCodes && widget.order.hasProjectCode) {
tiles.add(
ListTile(
+4
View File
@@ -344,6 +344,10 @@ class _SalesOrderDetailState extends RefreshableState<SalesOrderDetailWidget> {
List<Widget> orderTiles(BuildContext context) {
List<Widget> tiles = [headerTile(context)];
if (showPk) {
tiles.add(pkTile(widget.order.pk));
}
InvenTreeCompany? customer = widget.order.customer;
if (supportsProjectCodes && widget.order.hasProjectCode) {
+4
View File
@@ -165,6 +165,10 @@ class _SOLineDetailWidgetState extends RefreshableState<SoLineDetailWidget> {
List<Widget> getTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.item.pk));
}
// Reference to the part
tiles.add(
ListTile(
+4
View File
@@ -218,6 +218,10 @@ class _SOShipmentDetailWidgetState
List<Widget> shipmentTiles(BuildContext context) {
List<Widget> tiles = [];
if (showPk) {
tiles.add(pkTile(widget.shipment.pk));
}
final bool checked = widget.shipment.isChecked;
final bool shipped = widget.shipment.isShipped;
final bool delivered = widget.shipment.isDelivered;
+1
View File
@@ -198,6 +198,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
List<Widget> tiles = <Widget>[
getCategoryDescriptionCard(),
if (showPk && widget.category != null) pkTile(widget.category!.pk),
Expanded(
child: PaginatedPartCategoryList(filters, title: L10().subcategories),
flex: 10,
+4
View File
@@ -355,6 +355,10 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
return tiles;
}
if (showPk) {
tiles.add(pkTile(part.pk));
}
if (!part.isActive) {
tiles.add(
ListTile(
+18
View File
@@ -5,9 +5,12 @@ import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:inventree/api.dart";
import "package:inventree/app_colors.dart";
import "package:inventree/barcode/barcode.dart";
import "package:inventree/l10.dart";
import "package:inventree/preferences.dart";
import "package:inventree/widget/back.dart";
import "package:inventree/widget/drawer.dart";
import "package:inventree/widget/link_icon.dart";
import "package:inventree/widget/search.dart";
/*
@@ -204,9 +207,22 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T>
bool get loaded => !loading;
// Whether to display the "pk" (primary key / ID) value of the loaded model
bool showPk = false;
// Helper function to return API instance
InvenTreeAPI get api => InvenTreeAPI();
// Construct a tile to display the "pk" (primary key / ID) value of a model
// Only rendered by callers when the "showPk" setting is enabled
Widget pkTile(int pk) {
return ListTile(
title: Text(L10().pk),
leading: Icon(TablerIcons.hash),
trailing: LargeText(pk.toString()),
);
}
@override
void initState() {
super.initState();
@@ -234,6 +250,8 @@ abstract class RefreshableState<T extends StatefulWidget> extends State<T>
loading = true;
});
showPk = await InvenTreeSettingsManager().getBool(INV_SHOW_PK, false);
await request(context);
// Escape if the widget is no longer loaded
+1
View File
@@ -366,6 +366,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
List<Widget> tiles = [
locationDescriptionCard(),
if (showPk && location != null) pkTile(location!.pk),
Expanded(
child: PaginatedStockLocationList(filters, title: L10().sublocations),
flex: 10,
+4
View File
@@ -525,6 +525,10 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
return tiles;
}
if (showPk) {
tiles.add(pkTile(widget.item.pk));
}
// Location information
if ((widget.item.locationId > 0) && (widget.item.locationName.isNotEmpty)) {
tiles.add(