Круговой индикатор прогресса - вопросы по математике - PullRequest
2 голосов
/ 05 августа 2020

Хорошо, я использую circularProgressIndicator, чтобы показать, когда таймер достигает завершения, однако мой мозг перестал функционировать, и я не могу заставить математику работать для него.

  1. Значение таймера - 90 секунд
  2. Индикатор выполнения: 100% при 1 или 50% при 0,5 et c ..
  3. Каждую секунду я уменьшаю таймер 90 секунд на 1 второй, так что покажите обратный отсчет

Я также хотел бы постепенно добавлять к значению индикатора прогресса, чтобы достичь 100%, когда таймер 90 секунд закончился.

90 это пример, это будет регулярно меняться

То, что я пробовал

1. _intervalProgress += (( 100 / intervalValueSeconds) / 60;
2. _intervalProgress += (( 100 / intervalValueSeconds) * ( 100 / 60 )) / 100; 

Вопрос: Как мне найти десятичную дробь в значении, а затем разделить на 60 для повторения ever second <--- Подождите, я только что понял, что это значение не 60 секунд, это значение таймера, поэтому я все время рассчитывал его неправильно. </p>

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вы можете рассчитать и отобразить прогресс, как показано ниже. В соответствии с вашим вопросом, похоже, вы ищете расчет переменной progressFraction.

class _MyWidgetState extends State<MyWidget> {
  int totalSeconds = 90;
  int secondsRemaining = 90;
  double progressFraction = 0.0;
  int percentage = 0;
  Timer timer;

  @override
  void initState() {
    timer = Timer.periodic(Duration(seconds: 1), (_) {
      if(secondsRemaining == 0){
        return;
      }
      setState(() {
        secondsRemaining -= 1;
        progressFraction = (totalSeconds - secondsRemaining) / totalSeconds;
        percentage = (progressFraction*100).floor();
        
      });
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        SizedBox(height: 20),
        Text('$secondsRemaining seconds remaining'),
        SizedBox(height: 20),
        CircularProgressIndicator(
          value: progressFraction,
        ),
        SizedBox(height: 20),
        Text('$percentage% complete'),
      ],
    );
  }
  
  @override
  void dispose(){
    timer.cancel();
    super.dispose();
  }
  
}

Демо на dartpad - https://dartpad.dev/4fae5a168d5e9421562d0e813b907a01

1 голос
/ 05 августа 2020

Используйте ниже logi c

 int value = ((yourValue/ 90) * 100).toInt(); // here 90 is higest value which you have
 print(value);

Пример:

     int value = ((45/ 90) * 100).toInt();
     print(value);  // Output will be 50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...