diff --git a/lib/ui/widgets/second_screen/card_terminal.dart b/lib/ui/widgets/second_screen/card_terminal.dart index 5626545b6999bf19b83dc374f1a82e657a8d27f5..55867639cc0a896dd4dedb11b6203ab6352506d2 100644 --- a/lib/ui/widgets/second_screen/card_terminal.dart +++ b/lib/ui/widgets/second_screen/card_terminal.dart @@ -1,8 +1,6 @@ -import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:vibration/vibration.dart'; -import '../../logger.dart'; import '../../ui_helpers.dart'; import 'card_terminal_screen.dart'; import 'rubber_button.dart'; @@ -38,9 +36,7 @@ class _CardTerminalState extends State<CardTerminal> { @override Widget build(BuildContext context) { - _decimalSep = NumberFormat.decimalPattern(context.locale.toString()) - .symbols - .DECIMAL_SEP; + _decimalSep = decimalSep(context); _numbers[9] = _decimalSep; return Expanded( child: ListView(children: <Widget>[ @@ -97,11 +93,11 @@ class _CardTerminalState extends State<CardTerminal> { bgColor: const Color(0xFFF7E378), icon: Icons.backspace, onPressed: () { + vibrateIfPossible(); setState(() { _currentValue = _currentValue.isNotEmpty ? _currentValue.substring(0, _currentValue.length - 1) : ''; - vibrateIfPossible(); }); }); } else if (index == _submitIndex) { @@ -111,9 +107,11 @@ class _CardTerminalState extends State<CardTerminal> { // icon: Icons.subdirectory_arrow_left, label: '=', onPressed: () { + vibrateIfPossible(); setState(() { - _currentValue = - calculate(_currentValue, _decimalSep, context).toString(); + _currentValue = calculate( + textInTerminal: _currentValue, decimalSep: _decimalSep) + .toString(); }); }); } else if (index == _cancelIndex) { @@ -122,15 +120,16 @@ class _CardTerminalState extends State<CardTerminal> { bgColor: const Color(0xFFCD303D), icon: Icons.cancel, onPressed: () { + vibrateIfPossible(); setState(() { _currentValue = ''; - vibrateIfPossible(); }); }); } else return RubberButton( label: _numbers[index], onPressed: () { + vibrateIfPossible(); /* if (_numbers[index] == '+') { return; } */ @@ -140,45 +139,19 @@ class _CardTerminalState extends State<CardTerminal> { } setState(() { _currentValue += _numbers[index]; - vibrateIfPossible(); + if (_currentValue == _decimalSep) { + _currentValue = '0$_currentValue'; + } }); }); } - - double calculate( - String textInTerminal, String decimalSep, BuildContext context) { - String operation = textInTerminal; - double sum = 0.0; - operation = operation.replaceAll( - decimalSep, '.'); // change decimal separator to a dot - final NumberFormat numberFormat = - NumberFormat.decimalPattern(context.locale.toString()); - final RegExp regex = - RegExp(r'[\d.]+'); // regular expression to find numbers - final Iterable<Match> matches = - regex.allMatches(operation); // find all numbers in the input - for (final Match? match in matches) { - try { - if (match != null) { - final String? g1 = match.group(0); - if (g1 != null) { - sum += numberFormat.parse(g1); // add the number to the sum - } - } - } catch (e) { - // could not convert the number to a double value, ignore it - } - } - logger(numberFormat.format(sum)); // print the formatted sum - return sum; - } } Future<void> vibrateIfPossible() async { try { final bool? hasVibrator = await Vibration.hasVibrator(); if (hasVibrator ?? false) { - Vibration.vibrate(duration: 1000); + Vibration.vibrate(duration: 100); } } catch (e) { // ok we tried...