#flutter #dart
#флаттер #дротик #dart
Вопрос:
Итак, я пытаюсь создать счетчик в моем пользовательском интерфейсе корзины, который поможет мне обновить количество товара.
CounterCustom(
initialValue: _defaultValue,
minValue: 0,
maxValue: 10,
step: 0.5,
decimalPlaces: 1,
onChanged: (value) {
setState(() {
_defaultValue = value;
_counter = value;
});
},
),
Это пакет счетчика, который я использую. Если я размещаю этот виджет в ListView непосредственно под моим каркасом, он работает нормально. Но если я помещу этот виджет в пользовательский виджет, он не изменит свое значение на дисплее.
Комментарии:
1. Вы уверены, что значение, которое вы получаете, отличается?
2. да, значение изменяется, но виджет не обновляется.
Ответ №1:
В этом пакете счетчиков так много ограничений. Пожалуйста, подумайте о создании собственного счетчика. Это просто и прямолинейно. Лучше, если вы разделите весь счетчик в другом виджете, чтобы он не создавал все виджеты во время вызова setState
. В качестве альтернативы вы можете использовать inheritted widget
или управление состоянием поставщика.
int timerSeconds;
DateTime startedAt;
StartTimer(){
_timer= new Timer.periodic(oneSec, (Timer t) => {
setState(() {
startedAt=DateTime.now();
seconds--;
})
});
}
//to format the timer text
String _printDuration(Duration duration) {
String twoDigits(int n) {
if (n >= 10) return "$n";
return "0$n";
}
String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
return "${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds";
}
String getTimerText(){
int timePassed= DateTime.now().difference(startedAt).inSeconds;
timerTextString=_printDuration(Duration(seconds: timerText-timePassed));
}
Затем остановите таймер при утилизации.
@override
void dispose() {
_timer.cancel();
super.dispose();
}
Затем вызовите текстовую строку в текстовом виджете следующим образом
Text(getTimerText());
Комментарии:
1. Я понял суть того, что вы пытаетесь сказать спасибо. Теперь я отключаю этот счетчик, чтобы работать самостоятельно.
2. пожалуйста, не забудьте проголосовать за правильный ответ! Большое спасибо.
3. Извините, я был так занят решением проблемы, что забыл об этом. Я использовал provider для решения этой проблемы. Мне потребовалось 3 часа, лол