Added unit/value display to view-item and view-product.

NOTE: Whilst flutter supports plural-translations,
we are not using them for unitAmountDisplay,
because it is hard to choose the fitting one,
for doubles.
This commit is contained in:
Jakob Meier 2023-04-05 10:22:43 +02:00
parent 86dac312a5
commit 456ed2836d
No known key found for this signature in database
GPG key ID: 66BDC7E6A01A6152
4 changed files with 42 additions and 34 deletions

View file

@ -126,6 +126,16 @@ class Unit {
return TextInputType.number; return TextInputType.number;
} }
} }
String display(BuildContext context, String value) {
if (type == UnitType.text) {
return value;
} else if (type == UnitType.amount) {
return AppLocalizations.of(context)!.unitAmountDisplay(value);
}
return '$value ${subUnits[defaultSubUnit!].name}';
}
} }
class SubUnit { class SubUnit {

View file

@ -367,6 +367,16 @@
"unitLength": "Length", "unitLength": "Length",
"unitArea": "Area", "unitArea": "Area",
"unitAmountDisplay": "{amount} Piece(s)",
"@unitAmountDisplay": {
"placeholders": {
"amount": {
"type": "String",
"example": "2.5"
}
}
},
"inputUnitValueLabel": "Value", "inputUnitValueLabel": "Value",
"selectUnitTypeLabel": "Unit Type", "selectUnitTypeLabel": "Unit Type",
"selectUnitLabel": "Unit", "selectUnitLabel": "Unit",

View file

@ -8,6 +8,7 @@ import 'package:outbag_app/components/category_chip.dart';
import 'package:outbag_app/components/category_picker.dart'; import 'package:outbag_app/components/category_picker.dart';
import 'package:outbag_app/components/labeled_divider.dart'; import 'package:outbag_app/components/labeled_divider.dart';
import 'package:outbag_app/components/product_picker.dart'; import 'package:outbag_app/components/product_picker.dart';
import 'package:outbag_app/components/value_unit_input.dart';
import 'package:outbag_app/tools/fetch_wrapper.dart'; import 'package:outbag_app/tools/fetch_wrapper.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@ -319,15 +320,15 @@ class _ShoppingListPageState extends State<ShoppingListPage> {
} }
class ShoppingListItem extends StatelessWidget { class ShoppingListItem extends StatelessWidget {
String name; final String name;
RoomCategory category; final RoomCategory category;
String description; final String description;
bool inCart; final bool inCart;
final Key _key; final Key _key;
Function()? onDismiss; final Function()? onDismiss;
Function()? onTap; final Function()? onTap;
ShoppingListItem( const ShoppingListItem(
{required this.name, {required this.name,
required this.category, required this.category,
required this.inCart, required this.inCart,
@ -361,17 +362,17 @@ class ShoppingListItem extends StatelessWidget {
child: Opacity( child: Opacity(
opacity: inCart?0.5:1.0, opacity: inCart?0.5:1.0,
child: ListTile( child: ListTile(
title: Text(name), title: Text(name),
subtitle: Text(description), subtitle: Text(description),
trailing: CategoryChip( trailing: CategoryChip(
category: category, category: category,
), ),
onTap: () { onTap: () {
if (onTap != null) { if (onTap != null) {
onTap!(); onTap!();
} }
}, },
)), )),
); );
} }
} }
@ -405,15 +406,7 @@ class ShoppingListItemInfo extends StatelessWidget {
Text(item.name, style: textTheme.headlineLarge), Text(item.name, style: textTheme.headlineLarge),
Text(item.description, style: textTheme.titleMedium), Text(item.description, style: textTheme.titleMedium),
CategoryChip(category: category,), CategoryChip(category: category,),
ProductPicker( Text(Unit.fromId(item.unit).display(context, item.value))
label:
AppLocalizations.of(context)!.selectLinkedProductLabel,
help: AppLocalizations.of(context)!.selectLinkedProductHelp,
products: products,
selected: item.link,
enabled: false)
// TODO: show more info
]))), ]))),
...(item.link != null) ...(item.link != null)
? [ ? [

View file

@ -6,7 +6,7 @@ import 'package:outbag_app/backend/request.dart';
import 'package:outbag_app/backend/room.dart'; import 'package:outbag_app/backend/room.dart';
import 'package:outbag_app/backend/user.dart'; import 'package:outbag_app/backend/user.dart';
import 'package:outbag_app/components/category_chip.dart'; import 'package:outbag_app/components/category_chip.dart';
import 'package:outbag_app/components/product_picker.dart'; import 'package:outbag_app/components/value_unit_input.dart';
import 'package:outbag_app/tools/fetch_wrapper.dart'; import 'package:outbag_app/tools/fetch_wrapper.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -145,12 +145,7 @@ class _ViewProductPageState extends State<ViewProductPage> {
style: textTheme.titleMedium), style: textTheme.titleMedium),
Text(product?.ean ?? ''), Text(product?.ean ?? ''),
CategoryChip(category: categories[product?.category]), CategoryChip(category: categories[product?.category]),
ProductPicker( Text(product!=null?Unit.fromId(product!.defaultUnit).display(context, product!.defaultValue):'')
label: AppLocalizations.of(context)!
.selectParentProductLabel,
products: products,
selected: product?.parent,
enabled: false)
], ],
))), ))),