#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,
),
],
),