allow ,
This commit is contained in:
parent
a000f49144
commit
a961580e2d
3 changed files with 62 additions and 61 deletions
|
@ -63,21 +63,28 @@ class _AddEntryScreen extends State<AddEntryScreen> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<double?> _parseDouble(String text, String name) async {
|
||||||
|
try {
|
||||||
|
return double.parse(text.replaceAll(",", "."));
|
||||||
|
} catch (e) {
|
||||||
|
showError("$name must be a number");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _addEntry() async {
|
Future<void> _addEntry() async {
|
||||||
if (products.length != 1) {
|
if (products.length != 1) {
|
||||||
showError("Pick product first");
|
showError("Pick product first");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
var grams = await _parseDouble(gramsController.text, "Grams");
|
||||||
double.parse(gramsController.text);
|
if (grams == null) {
|
||||||
} catch (e) {
|
|
||||||
showError("Grams must be a number");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await widget.apiClient.addEntry(
|
await widget.apiClient.addEntry(
|
||||||
grams: double.parse(gramsController.text),
|
grams: grams,
|
||||||
productId: products[0].id,
|
productId: products[0].id,
|
||||||
mealId: meal!.id,
|
mealId: meal!.id,
|
||||||
);
|
);
|
||||||
|
@ -122,7 +129,7 @@ class _AddEntryScreen extends State<AddEntryScreen> {
|
||||||
),
|
),
|
||||||
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
|
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?[\.,]?\d{0,2}')),
|
||||||
],
|
],
|
||||||
controller: gramsController,
|
controller: gramsController,
|
||||||
),
|
),
|
||||||
|
|
|
@ -46,41 +46,31 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<double?> _parseDouble(String text, String name) async {
|
||||||
|
try {
|
||||||
|
return double.parse(text.replaceAll(",", "."));
|
||||||
|
} catch (e) {
|
||||||
|
showError("$name must be a number");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _addProduct() async {
|
Future<void> _addProduct() async {
|
||||||
try {
|
var carb = await _parseDouble(carbController.text, "Carbs");
|
||||||
double.parse(carbController.text);
|
var fat = await _parseDouble(fatController.text, "Fat");
|
||||||
} catch (e) {
|
var protein = await _parseDouble(proteinController.text, "Protein");
|
||||||
showError("Carbs must be a number");
|
var fiber = await _parseDouble(fiberController.text, "Fiber");
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
if (carb == null || fat == null || protein == null || fiber == null) {
|
||||||
double.parse(fatController.text);
|
|
||||||
} catch (e) {
|
|
||||||
showError("Fat must be a number");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
double.parse(fiberController.text);
|
|
||||||
} catch (e) {
|
|
||||||
showError("Fiber must be a number");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
double.parse(proteinController.text);
|
|
||||||
} catch (e) {
|
|
||||||
showError("Protein must be a number");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var productJson = await widget.apiClient.addProduct(
|
var productJson = await widget.apiClient.addProduct(
|
||||||
carb: double.parse(carbController.text),
|
carb: carb,
|
||||||
fat: double.parse(fatController.text),
|
fat: fat,
|
||||||
protein: double.parse(proteinController.text),
|
protein: protein,
|
||||||
fiber: double.parse(fiberController.text),
|
fiber: fiber,
|
||||||
name: nameController.text,
|
name: nameController.text,
|
||||||
);
|
);
|
||||||
var product = Product.fromJson(productJson);
|
var product = Product.fromJson(productJson);
|
||||||
|
@ -94,28 +84,25 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
double calculateCalories() {
|
double calculateCalories() {
|
||||||
double calories = 0;
|
double calories = 0;
|
||||||
|
|
||||||
try {
|
var carb = double.tryParse(carbController.text.replaceAll(",", "."));
|
||||||
calories += double.parse(carbController.text) * 4;
|
var fat = double.tryParse(fatController.text.replaceAll(",", "."));
|
||||||
} catch (e) {
|
var protein = double.tryParse(proteinController.text.replaceAll(",", "."));
|
||||||
// ignore
|
var fiber = double.tryParse(fiberController.text.replaceAll(",", "."));
|
||||||
|
|
||||||
|
if (carb != null) {
|
||||||
|
calories += carb * 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
if (fat != null) {
|
||||||
calories += double.parse(fatController.text) * 9;
|
calories += fat * 9;
|
||||||
} catch (e) {
|
|
||||||
// ignore
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
if (protein != null) {
|
||||||
calories += double.parse(proteinController.text) * 4;
|
calories += protein * 4;
|
||||||
} catch (e) {
|
|
||||||
// ignore
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
if (fiber != null) {
|
||||||
calories += double.parse(fiberController.text) * 2;
|
calories -= fiber * 2;
|
||||||
} catch (e) {
|
|
||||||
// ignore
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return calories;
|
return calories;
|
||||||
|
@ -146,7 +133,7 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
),
|
),
|
||||||
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
|
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?[\.,]?\d{0,2}')),
|
||||||
],
|
],
|
||||||
controller: carbController,
|
controller: carbController,
|
||||||
onChanged: (String value) {
|
onChanged: (String value) {
|
||||||
|
@ -159,7 +146,7 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
),
|
),
|
||||||
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
|
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?[\.,]?\d{0,2}')),
|
||||||
],
|
],
|
||||||
controller: fatController,
|
controller: fatController,
|
||||||
onChanged: (String value) {
|
onChanged: (String value) {
|
||||||
|
@ -172,7 +159,7 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
),
|
),
|
||||||
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
|
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?[\.,]?\d{0,2}')),
|
||||||
],
|
],
|
||||||
controller: proteinController,
|
controller: proteinController,
|
||||||
onChanged: (String value) {
|
onChanged: (String value) {
|
||||||
|
@ -185,7 +172,7 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
),
|
),
|
||||||
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
|
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?[\.,]?\d{0,2}')),
|
||||||
],
|
],
|
||||||
controller: fiberController,
|
controller: fiberController,
|
||||||
onChanged: (String value) {
|
onChanged: (String value) {
|
||||||
|
@ -193,7 +180,7 @@ class _AddProductScreen extends State<AddProductScreen> {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
"${calculateCalories()} kcal",
|
"${calculateCalories().toStringAsFixed(2)} kcal",
|
||||||
textAlign: TextAlign.right,
|
textAlign: TextAlign.right,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -61,22 +61,29 @@ class _EditEntryScreen extends State<EditEntryScreen> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<double?> _parseDouble(String text, String name) async {
|
||||||
|
try {
|
||||||
|
return double.parse(text.replaceAll(",", "."));
|
||||||
|
} catch (e) {
|
||||||
|
showError("$name must be a number");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> _saveEntry() async {
|
Future<void> _saveEntry() async {
|
||||||
if (products.length != 1) {
|
if (products.length != 1) {
|
||||||
showError("Pick product first");
|
showError("Pick product first");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
var grams = await _parseDouble(gramsController.text, "Grams");
|
||||||
double.parse(gramsController.text);
|
if (grams == null) {
|
||||||
} catch (e) {
|
|
||||||
showError("Grams must be a number");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await widget.apiClient.updateEntry(
|
await widget.apiClient.updateEntry(
|
||||||
widget.entry.id,
|
widget.entry.id,
|
||||||
grams: double.parse(gramsController.text),
|
grams: grams,
|
||||||
productId: products[0].id,
|
productId: products[0].id,
|
||||||
mealId: widget.entry.mealId,
|
mealId: widget.entry.mealId,
|
||||||
);
|
);
|
||||||
|
@ -107,7 +114,7 @@ class _EditEntryScreen extends State<EditEntryScreen> {
|
||||||
),
|
),
|
||||||
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
keyboardType:const TextInputType.numberWithOptions(decimal: true),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
|
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?[\.,]?\d{0,2}')),
|
||||||
],
|
],
|
||||||
controller: gramsController,
|
controller: gramsController,
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue