actions-test/lib/components/product_picker.dart
Jakob Meier 5cd21c8adf
Added Combined new/edit and view product screen
Similarily to categories and rooms,
the edit product screen is reused as a new-room screen,
which is especially easy, because the user is unable to select
the product id themselves.
NOTE: the dynamic value-unit input is still missing some "subunits"

The view product screen has links to the edit product page,
the view parent page (if available) and a not yet functional
view children screen.
NOTE: The parent product display should be restricted in width,
and the screen is missing value/unit information.
2023-04-04 20:28:26 +02:00

57 lines
1.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:outbag_app/backend/room.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class ProductPicker extends StatelessWidget {
final List<RoomProduct> products;
final int? selected;
final bool enabled;
final Function(int?)? onSelect;
// hint and label may differ depending on the screen
final String? hint;
final String? label;
final String? help;
const ProductPicker(
{super.key,
required this.products,
this.selected,
this.onSelect,
this.hint,
this.help,
this.label,
this.enabled = true});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8),
child: DropdownButtonFormField<int?>(
hint: hint == null ? null : Text(hint!),
decoration: InputDecoration(
label: label == null ? null : Text(label!),
border: const OutlineInputBorder(),
prefixIcon: const Icon(Icons.inventory_2),
helperText: help),
value: selected,
items: [
// "no product" entry
DropdownMenuItem<int?>(
value: null,
child: Text(AppLocalizations.of(context)!.productNameNone),
),
// other products
...products.map((product) => DropdownMenuItem<int?>(
value: product.id, child: Text(product.name)))
],
onChanged: enabled
? (pid) {
if (onSelect != null) {
onSelect!(pid);
}
}
: null,
));
}
}