import 'package:barcode_scan2/barcode_scan2.dart'; import 'package:calorimeter/food_entry/food_entry_bloc.dart'; import 'package:calorimeter/food_scan/food_fact_lookup.dart'; import 'package:flutter/material.dart'; class ScanFoodNotifier with ChangeNotifier { void handleBarcodeScannedEvent(BarcodeScanned barcode) async { var client = FoodFactLookupClient(); var scanResult = await barcode.scanResultFuture; if (scanResult.type == ResultType.Cancelled) { return; } if (scanResult.type == ResultType.Error) { return; } var responseFuture = client.retrieveFoodInfo(scanResult.rawContent); var newEntryWaiting = FoodEntryState( kcalPer100: 0, name: "", mass: 0, waitingForNetwork: true, isSelected: false, ); await responseFuture.then((response) async { if (response.status == FoodFactResponseStatus.foodFactServerNotReachable) { return; } var newEntryFinishedWaiting = FoodEntryState( name: response.food?.name ?? "", mass: response.food?.mass ?? 0, kcalPer100: response.food?.kcalPer100g ?? 0, waitingForNetwork: false, isSelected: false, ); }); } } class BarcodeScanned { final Future scanResultFuture; BarcodeScanned({required this.scanResultFuture}); }