Индикатор линейного прогресса дротика не загружается

#flutter #dart

#flutter #dart

Вопрос:

LinearProgressIndicator отображается неправильно.Это внезапно меняется

 //in the outside of the function
String _progress = "0.0";


//in the build context
Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Download',
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: LinearProgressIndicator(
                    value: double.parse(_progress) * 1.00,
                    valueColor: new AlwaysStoppedAnimation<Color>(Colors.red)),
              ),
            ],
          ),

  

Он рисует синюю линию, а затем внезапно становится красной линией

Скорость загрузки

Начало Синяя линия

Завершение Красная строка

Ответ №1:

Установите исходное значение _progress = «0.0», которое должно сработать.

Редактировать:

 String _progress = "-";

void _onReceiveProgress(int received, int total) {
if (total != -1) {
  setState(() {
    _progress = (received / total * 100).toStringAsFixed(0);
  });
}
}

//In body build
Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            'Downloading:',
          ),
          CircularProgressIndicator(
            strokeWidth: 20,
            value: double.parse(_progress) * 1.00,
          ),
         
        ],
      ),
  

Это должно сработать

Комментарии:

1. После того, как он работает нормально, при запуске загрузки он выдает ту же ошибку

2. Я отредактирую свой ответ с использованием потенциально рабочей версии вашего кода.

3. Редактирование должно сработать, если это не так, просто проверьте значения ваших переменных. И если все еще это не работает, у меня есть другой способ сделать это, но он может включать изменение вашей реализации или просто может не работать с вашей реализацией.

4. Это происходит из-за символа процента, он не может разобрать строку на удвоение. На этот раз просто удалите знак процента отовсюду и попробуйте запустить его.

5. Также измените условие if на if(0 <= total amp;amp; total <= 100), иначе он никогда не перестанет устанавливать состояние.

Ответ №2:

Это не сработает, потому что вы пытаетесь double.parse строка «-«. «-» не может быть проанализирована.

Если условие (total != -1) равно true , это снова не сработает — потому что «%» не может быть проанализировано.

Вы должны изменить значение в переменной, чтобы оно было без символа «-» или «%», и любой символ не является словом.

Ответ №3:

используйте, tryParse потому что вы пытаетесь выполнить синтаксический анализ '-' в первый раз.

 (double.tryParse(_progress) ?? 0.0) *0.00
  

Редактировать:

_progress = (received / total * 100).toStringAsFixed(0) "%"; Это вернет строку со знаком% в ней. Это никогда не будет проанализировано.

Почему бы не изменить _progress на double и не отформатировать его в строку, где вам нужно, чтобы это была строка?

Комментарии:

1. @nodermonch _progress = (received / total * 100).toStringAsFixed(0) "%"; Это вернет строку со % знаком в ней. Это никогда не будет проанализировано

2. @nodermonch почему бы не изменить _progress на double и отформатировать его в строку, где вам нужно, чтобы это была строка?

Ответ №4:

Я думаю, вам не нужен String тип данных.
Вы можете просто изменить свой код следующим образом.

  double _progress = 0.0;

  void _onReceiveProgress(int received, int total) {
    if (total != -1) {
      setState(() {
        _progress = (received / total) * 100;
      });
    }
  }

//In body build
Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Downloading:',
              ),
              CircularProgressIndicator(
                strokeWidth: 20,
                value: _progress,
              ),
             
            ],
          ),