fix: POST /products 500 — invalid unit FK on unrecognized items
Two bugs caused a FK constraint violation on products.unit: 1. RecognizedItem.fromJson fell back to 'шт' (Cyrillic, not a valid units.code) when the AI returned a null unit — changed to 'pcs'. 2. The unit dropdown in RecognitionConfirmScreen displayed units.keys.first for invalid units but never updated item.unit, so the invalid value was still submitted. Added a reconcile step in build() that syncs item.unit to units.keys.first whenever the stored value is not in the valid set. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -248,10 +248,14 @@ class _ItemTileState extends State<_ItemTile> {
|
||||
const SizedBox(width: 8),
|
||||
widget.units.isEmpty
|
||||
? const SizedBox(width: 48)
|
||||
: DropdownButton<String>(
|
||||
value: widget.units.containsKey(widget.item.unit)
|
||||
? widget.item.unit
|
||||
: widget.units.keys.first,
|
||||
: Builder(builder: (builderContext) {
|
||||
// Reconcile item.unit with valid server codes so that the
|
||||
// submitted value matches what the dropdown displays.
|
||||
if (!widget.units.containsKey(widget.item.unit)) {
|
||||
widget.item.unit = widget.units.keys.first;
|
||||
}
|
||||
return DropdownButton<String>(
|
||||
value: widget.item.unit,
|
||||
underline: const SizedBox(),
|
||||
items: widget.units.entries
|
||||
.map((e) => DropdownMenuItem(value: e.key, child: Text(e.value)))
|
||||
@@ -262,7 +266,8 @@ class _ItemTileState extends State<_ItemTile> {
|
||||
widget.onChanged();
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.close),
|
||||
onPressed: widget.onDelete,
|
||||
|
||||
Reference in New Issue
Block a user