added fiber
This commit is contained in:
		
							parent
							
								
									657a7545ba
								
							
						
					
					
						commit
						e2db6a6181
					
				
					 10 changed files with 84 additions and 18 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
import 'package:http/http.dart' as http;
 | 
			
		||||
import 'dart:convert';
 | 
			
		||||
import 'dart:html';
 | 
			
		||||
import 'package:intl/intl.dart';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ApiClient {
 | 
			
		||||
| 
						 | 
				
			
			@ -148,8 +149,9 @@ class ApiClient {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  Future<Map<String, dynamic>> getDiary({required DateTime date}) async {
 | 
			
		||||
    var formatter = DateFormat('yyyy-MM-dd');
 | 
			
		||||
    var params = {
 | 
			
		||||
      "date": "${date.year}-${date.month}-${date.day}",
 | 
			
		||||
      "date": formatter.format(date),
 | 
			
		||||
    };
 | 
			
		||||
    var response = await get("/diary?${Uri(queryParameters: params).query}");
 | 
			
		||||
    return response;
 | 
			
		||||
| 
						 | 
				
			
			@ -225,12 +227,14 @@ class ApiClient {
 | 
			
		|||
    required double protein,
 | 
			
		||||
    required double carb,
 | 
			
		||||
    required double fat,
 | 
			
		||||
    required double fiber,
 | 
			
		||||
  }) async {
 | 
			
		||||
    var response = await post("/product", {
 | 
			
		||||
      "name": name,
 | 
			
		||||
      "protein": protein,
 | 
			
		||||
      "carb": carb,
 | 
			
		||||
      "fat": fat,
 | 
			
		||||
      "fiber": fiber,
 | 
			
		||||
    });
 | 
			
		||||
    return response;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ class Diary {
 | 
			
		|||
  final double protein;
 | 
			
		||||
  final double carb;
 | 
			
		||||
  final double fat;
 | 
			
		||||
  final double fiber;
 | 
			
		||||
 | 
			
		||||
  Diary({
 | 
			
		||||
    required this.id,
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +19,7 @@ class Diary {
 | 
			
		|||
    required this.protein,
 | 
			
		||||
    required this.carb,
 | 
			
		||||
    required this.fat,
 | 
			
		||||
    required this.fiber,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  Diary.fromJson(Map<String, dynamic> map):
 | 
			
		||||
| 
						 | 
				
			
			@ -27,5 +29,6 @@ class Diary {
 | 
			
		|||
    calories = map['calories'] as double,
 | 
			
		||||
    protein = map['protein'] as double,
 | 
			
		||||
    carb = map['carb'] as double,
 | 
			
		||||
    fat = map['fat'] as double;
 | 
			
		||||
    fat = map['fat'] as double,
 | 
			
		||||
    fiber = map['fiber'] as double;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ class Entry {
 | 
			
		|||
  final double calories;
 | 
			
		||||
  final double protein;
 | 
			
		||||
  final double fat;
 | 
			
		||||
  final double fiber;
 | 
			
		||||
  final double carb;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +20,7 @@ class Entry {
 | 
			
		|||
    required this.calories,
 | 
			
		||||
    required this.protein,
 | 
			
		||||
    required this.fat,
 | 
			
		||||
    required this.fiber,
 | 
			
		||||
    required this.carb,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,5 +32,6 @@ class Entry {
 | 
			
		|||
    calories = map['calories'] as double,
 | 
			
		||||
    protein = map['protein'] as double,
 | 
			
		||||
    fat = map['fat'] as double,
 | 
			
		||||
    fiber = map['fiber'] as double,
 | 
			
		||||
    carb = map['carb'] as double;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ class Meal {
 | 
			
		|||
  final double protein;
 | 
			
		||||
  final double carb;
 | 
			
		||||
  final double fat;
 | 
			
		||||
  final double fiber;
 | 
			
		||||
  final int diaryId;
 | 
			
		||||
 | 
			
		||||
  Meal({
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +22,7 @@ class Meal {
 | 
			
		|||
    required this.protein,
 | 
			
		||||
    required this.carb,
 | 
			
		||||
    required this.fat,
 | 
			
		||||
    required this.fiber,
 | 
			
		||||
    required this.diaryId,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,5 +35,6 @@ class Meal {
 | 
			
		|||
    protein = map['protein'] as double,
 | 
			
		||||
    carb = map['carb'] as double,
 | 
			
		||||
    fat = map['fat'] as double,
 | 
			
		||||
    fiber = map['fiber'] as double,
 | 
			
		||||
    diaryId = map['diary_id'] as int;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ class Product {
 | 
			
		|||
  final double protein;
 | 
			
		||||
  final double carb;
 | 
			
		||||
  final double fat;
 | 
			
		||||
  final double fiber;
 | 
			
		||||
 | 
			
		||||
  Product({
 | 
			
		||||
    required this.id,
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,7 @@ class Product {
 | 
			
		|||
    required this.protein,
 | 
			
		||||
    required this.carb,
 | 
			
		||||
    required this.fat,
 | 
			
		||||
    required this.fiber,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  Product.fromJson(Map<String, dynamic> map):
 | 
			
		||||
| 
						 | 
				
			
			@ -21,5 +23,6 @@ class Product {
 | 
			
		|||
    calories = map['calories'] as double,
 | 
			
		||||
    protein = map['protein'] as double,
 | 
			
		||||
    carb = map['carb'] as double,
 | 
			
		||||
    fat = map['fat'] as double;
 | 
			
		||||
    fat = map['fat'] as double,
 | 
			
		||||
    fiber = map['fiber'] as double;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,7 @@ class _AddProductScreen extends State<AddProductScreen> {
 | 
			
		|||
  final nameController = TextEditingController();
 | 
			
		||||
  final carbController = TextEditingController();
 | 
			
		||||
  final fatController = TextEditingController();
 | 
			
		||||
  final fiberController = TextEditingController();
 | 
			
		||||
  final proteinController = TextEditingController();
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +24,7 @@ class _AddProductScreen extends State<AddProductScreen> {
 | 
			
		|||
    nameController.dispose();
 | 
			
		||||
    carbController.dispose();
 | 
			
		||||
    fatController.dispose();
 | 
			
		||||
    fiberController.dispose();
 | 
			
		||||
    proteinController.dispose();
 | 
			
		||||
    super.dispose();
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +61,13 @@ class _AddProductScreen extends State<AddProductScreen> {
 | 
			
		|||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      double.parse(fiberController.text);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      showError("Fiber must be a number");
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      double.parse(proteinController.text);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
| 
						 | 
				
			
			@ -71,6 +80,7 @@ class _AddProductScreen extends State<AddProductScreen> {
 | 
			
		|||
        carb: double.parse(carbController.text),
 | 
			
		||||
        fat: double.parse(fatController.text),
 | 
			
		||||
        protein: double.parse(proteinController.text),
 | 
			
		||||
        fiber: double.parse(fiberController.text),
 | 
			
		||||
        name: nameController.text,
 | 
			
		||||
      );
 | 
			
		||||
      var product = Product.fromJson(productJson);
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +112,12 @@ class _AddProductScreen extends State<AddProductScreen> {
 | 
			
		|||
      // ignore
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      calories += double.parse(fiberController.text) * 2;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      // ignore
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return calories;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -163,6 +179,19 @@ class _AddProductScreen extends State<AddProductScreen> {
 | 
			
		|||
                  setState(() {});
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              TextFormField(
 | 
			
		||||
                decoration: const InputDecoration(
 | 
			
		||||
                  labelText: 'Fiber',
 | 
			
		||||
                ),
 | 
			
		||||
                keyboardType:const TextInputType.numberWithOptions(decimal: true),
 | 
			
		||||
                inputFormatters: <TextInputFormatter>[
 | 
			
		||||
                  FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')),
 | 
			
		||||
                ],
 | 
			
		||||
                controller: fiberController,
 | 
			
		||||
                onChanged: (String value) {
 | 
			
		||||
                  setState(() {});
 | 
			
		||||
                },
 | 
			
		||||
              ),
 | 
			
		||||
              Text(
 | 
			
		||||
                "${calculateCalories()} kcal",
 | 
			
		||||
                textAlign: TextAlign.right,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
 | 
			
		|||
class MacroWidget extends StatelessWidget {
 | 
			
		||||
  final double? amount;
 | 
			
		||||
  final double? calories;
 | 
			
		||||
  final double? fiber;
 | 
			
		||||
  final double protein;
 | 
			
		||||
  final double carb;
 | 
			
		||||
  final double fat;
 | 
			
		||||
| 
						 | 
				
			
			@ -15,6 +16,7 @@ class MacroWidget extends StatelessWidget {
 | 
			
		|||
    this.calories,
 | 
			
		||||
    this.amount,
 | 
			
		||||
    this.child,
 | 
			
		||||
    this.fiber,
 | 
			
		||||
    required this.protein,
 | 
			
		||||
    required this.carb,
 | 
			
		||||
    required this.fat,
 | 
			
		||||
| 
						 | 
				
			
			@ -50,6 +52,19 @@ class MacroWidget extends StatelessWidget {
 | 
			
		|||
      ),
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    if (fiber != null) {
 | 
			
		||||
      elements.add(
 | 
			
		||||
        Expanded(
 | 
			
		||||
          flex: 1,
 | 
			
		||||
          child: Text(
 | 
			
		||||
            "f: ${fiber!.toStringAsFixed(1)}g",
 | 
			
		||||
            style: style,
 | 
			
		||||
            textAlign: TextAlign.center,
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (calories != null) {
 | 
			
		||||
      elements.add(
 | 
			
		||||
        Expanded(
 | 
			
		||||
| 
						 | 
				
			
			@ -58,9 +73,9 @@ class MacroWidget extends StatelessWidget {
 | 
			
		|||
            "${calories!.toStringAsFixed(1)} kcal",
 | 
			
		||||
            style: style,
 | 
			
		||||
            textAlign: TextAlign.center,
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (amount != null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -72,8 +87,8 @@ class MacroWidget extends StatelessWidget {
 | 
			
		|||
            style: style,
 | 
			
		||||
            textAlign: TextAlign.center,
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (child != null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -81,21 +96,17 @@ class MacroWidget extends StatelessWidget {
 | 
			
		|||
        Expanded(
 | 
			
		||||
          flex: 1,
 | 
			
		||||
          child: child!,
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (amount == null && calories == null && child == null) {
 | 
			
		||||
    if (elements.length < 4) {
 | 
			
		||||
      elements.add(
 | 
			
		||||
        Expanded(
 | 
			
		||||
        const Expanded(
 | 
			
		||||
          flex: 1,
 | 
			
		||||
          child: Text(
 | 
			
		||||
            "",
 | 
			
		||||
            style: style,
 | 
			
		||||
            textAlign: TextAlign.center,
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        );
 | 
			
		||||
          child: Text(""),
 | 
			
		||||
        ),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Padding(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ class ProductWidget extends StatelessWidget {
 | 
			
		|||
            protein: product.protein,
 | 
			
		||||
            carb: product.carb,
 | 
			
		||||
            fat: product.fat,
 | 
			
		||||
            fiber: product.fiber,
 | 
			
		||||
            style: Theme.of(context).textTheme.bodyMedium!.copyWith(
 | 
			
		||||
              color: Theme.of(context).colorScheme.secondary,
 | 
			
		||||
              fontWeight: FontWeight.bold,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,6 +91,14 @@ packages:
 | 
			
		|||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "4.0.2"
 | 
			
		||||
  intl:
 | 
			
		||||
    dependency: "direct main"
 | 
			
		||||
    description:
 | 
			
		||||
      name: intl
 | 
			
		||||
      sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
 | 
			
		||||
      url: "https://pub.dev"
 | 
			
		||||
    source: hosted
 | 
			
		||||
    version: "0.18.1"
 | 
			
		||||
  js:
 | 
			
		||||
    dependency: transitive
 | 
			
		||||
    description:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,7 @@ dependencies:
 | 
			
		|||
  # Use with the CupertinoIcons class for iOS style icons.
 | 
			
		||||
  cupertino_icons: ^1.0.2
 | 
			
		||||
  http: ^1.1.0
 | 
			
		||||
  intl: ^0.18.1
 | 
			
		||||
 | 
			
		||||
dev_dependencies:
 | 
			
		||||
  flutter_test:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue