Flutter не может преобразовать 00.00 в секунды, метод inSeconds () показывает ошибку

#android-studio #flutter #dart

#android-studio #флаттер #dart

Вопрос:

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

 @override
void initState() {
super.initState();
player.onAudioPositionChanged.listen((Duration duration) {
  setState(() {
    currenttime = duration;
  });
});
player.onDurationChanged.listen((Duration duration) {
  setState(() {
    totaltime = duration;
  });
});
}
  

это виджет-слайдер, который фиксирует ТЕКУЩЕЕ И ОБЩЕЕ ВРЕМЯ.

 Slider(
                        value: currenttime.inSeconds.toDouble(),
                        max: totaltime.inSeconds.toDouble(),
                        min: 0.0,
                        activeColor: mycolor,
                        inactiveColor: Colors.grey,
                        onChanged: (double value) {
                          setState(() {
                            int second = value.toInt();
                            Duration seeked = Duration(seconds: second);
                            player.seek(seeked);
                            value = value;
                          });
                        }),
  

И это ошибка

 ═╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building MyApp(dirty, state: _MyAppState#8e9ee):
The getter 'inSeconds' was called on null.
Receiver: null
Tried calling: inSeconds
  

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

1. Похоже, что это null попробуйте отладить значение, и вы узнаете

2. @OMiShah как отлаживать? извините, если это было глупо.

3. Я имел в виду, попробуйте напечатать значение этой переменной. Скорее всего, вы пытаетесь преобразовать нулевую переменную еще до ее инициализации, что вызывает проблему

Ответ №1:

Используйте троичный оператор, currenttime который изначально кажется нулевым, или выясните, почему он становится нулевым.

 Slider(
       value: currenttime != null? currenttime.inSeconds.toDouble() : 0.0,