Skip to content

Commit

Permalink
Refactor state management
Browse files Browse the repository at this point in the history
  • Loading branch information
duddu committed Oct 20, 2023
1 parent 34352cb commit e231fd4
Show file tree
Hide file tree
Showing 14 changed files with 525 additions and 344 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.7.13
1.8.0
68 changes: 47 additions & 21 deletions integration_test/calculator.test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:sourdoc/constants/locale.dart' as locale;
import 'package:sourdoc/main.dart';
import 'package:sourdoc/methods/convert_temperature_unit.dart';

void expectCalculatorValues({
required String temperatureUnit,
void _expectCalculatorValues({
required TemperatureUnit temperatureUnit,
required String temperature,
required String weight,
required String hydration,
Expand All @@ -27,7 +28,8 @@ void expectCalculatorValues({
widget is TextField &&
widget.decoration!.prefixText ==
'${locale.inputPrefixTemperature}:' &&
widget.decoration!.suffixText == temperatureUnit &&
widget.decoration!.suffixText ==
temperatureUnitMap[temperatureUnit]?.unit &&
widget.controller!.text == temperature),
findsOneWidget);
expect(
Expand Down Expand Up @@ -86,16 +88,27 @@ void expectCalculatorValues({
findsOneWidget);
}

Future<void> _scrollUntilEnd(WidgetTester tester) async {
await tester.scrollUntilVisible(
find.byWidgetPredicate((Widget widget) =>
widget is Text &&
widget.semanticsLabel == locale.variableLabelDoughRise),
50,
scrollable: find.byType(Scrollable).first);
await tester.pumpAndSettle();
}

void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();

group('Calculator', () {
testWidgets('should load initial default values', (tester) async {
await tester.pumpWidget(const Sourdoc());
await tester.pumpAndSettle();
await _scrollUntilEnd(tester);

expectCalculatorValues(
temperatureUnit: 'ºC',
_expectCalculatorValues(
temperatureUnit: TemperatureUnit.celsius,
temperature: '22',
weight: '700',
hydration: '70',
Expand All @@ -115,8 +128,10 @@ void main() {
await tester.tap(find.byTooltip(locale.degreesFarenheit));
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºF',
await _scrollUntilEnd(tester);

_expectCalculatorValues(
temperatureUnit: TemperatureUnit.farenheit,
temperature: '71.6',
weight: '700',
hydration: '70',
Expand All @@ -142,8 +157,10 @@ void main() {
'80');
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºF',
await _scrollUntilEnd(tester);

_expectCalculatorValues(
temperatureUnit: TemperatureUnit.farenheit,
temperature: '80',
weight: '700',
hydration: '70',
Expand All @@ -168,8 +185,10 @@ void main() {
'1350');
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºF',
await _scrollUntilEnd(tester);

_expectCalculatorValues(
temperatureUnit: TemperatureUnit.farenheit,
temperature: '80',
weight: '1350',
hydration: '70',
Expand All @@ -195,8 +214,10 @@ void main() {
'85');
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºF',
await _scrollUntilEnd(tester);

_expectCalculatorValues(
temperatureUnit: TemperatureUnit.farenheit,
temperature: '80',
weight: '1350',
hydration: '85',
Expand All @@ -220,8 +241,10 @@ void main() {
'2.5');
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºF',
await _scrollUntilEnd(tester);

_expectCalculatorValues(
temperatureUnit: TemperatureUnit.farenheit,
temperature: '80',
weight: '1350',
hydration: '85',
Expand All @@ -241,8 +264,10 @@ void main() {
await tester.tap(find.byTooltip(locale.degreesCelsius));
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºC',
await _scrollUntilEnd(tester);

_expectCalculatorValues(
temperatureUnit: TemperatureUnit.celsius,
temperature: '26.7',
weight: '1350',
hydration: '85',
Expand All @@ -258,9 +283,10 @@ void main() {
testWidgets('should return the values to initial state', (tester) async {
await tester.pumpWidget(const Sourdoc());
await tester.pumpAndSettle();
await _scrollUntilEnd(tester);

expectCalculatorValues(
temperatureUnit: 'ºC',
_expectCalculatorValues(
temperatureUnit: TemperatureUnit.celsius,
temperature: '26.7',
weight: '1350',
hydration: '85',
Expand Down Expand Up @@ -296,8 +322,8 @@ void main() {
'2');
await tester.pumpAndSettle();

expectCalculatorValues(
temperatureUnit: 'ºC',
_expectCalculatorValues(
temperatureUnit: TemperatureUnit.celsius,
temperature: '22',
weight: '700',
hydration: '70',
Expand Down
36 changes: 36 additions & 0 deletions lib/models/calculator_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import 'package:flutter/foundation.dart';
import 'package:sourdoc/methods/convert_temperature_unit.dart';
import 'package:sourdoc/methods/get_fermentation_values.dart';
import 'package:sourdoc/methods/get_ingredients_values.dart';

class CalculatorModel extends ChangeNotifier {
double _inoculation = 0;
double _bulkRise = 0;
double _flour = 0;
double _water = 0;
double _levain = 0;
double _salt = 0;

double get inoculation => _inoculation;
double get bulkRise => _bulkRise;
double get flour => _flour;
double get water => _water;
double get levain => _levain;
double get salt => _salt;

void updateFermentationValues(
double temperature, TemperatureUnit temperatureUnit) {
_inoculation = getInoculationValue(temperature, temperatureUnit);
_bulkRise = getBulkRiseValue(temperature, temperatureUnit);
notifyListeners();
}

void updateIngredientsValues(
double totalWeight, double hydration, double saltLevel) {
_flour = getFlourValue(totalWeight, hydration, saltLevel, _inoculation);
_water = getNonFlourIngredientValue(_flour, hydration);
_levain = getNonFlourIngredientValue(_flour, _inoculation);
_salt = getNonFlourIngredientValue(_flour, saltLevel);
notifyListeners();
}
}
20 changes: 20 additions & 0 deletions lib/models/temperature_unit_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:flutter/foundation.dart';
import 'package:sourdoc/constants/form.dart' as form;
import 'package:sourdoc/methods/convert_temperature_unit.dart';

class TemperatureUnitModel extends ChangeNotifier {
TemperatureUnit _temperatureUnit = form.defaultTemperatureUnit;

TemperatureUnit get temperatureUnit => _temperatureUnit;
String get temperatureUnitToString =>
temperatureUnitMap[_temperatureUnit]!.unit;

void updateTemperatureUnit(TemperatureUnit newTemperatureUnit) {
if (newTemperatureUnit == _temperatureUnit) {
return;
}
_temperatureUnit = newTemperatureUnit;

notifyListeners();
}
}
Loading

0 comments on commit e231fd4

Please sign in to comment.