вызывает метод flutterTts.setStartHandler () в обратном вызове onPressed кнопки во флаттере - это хорошая практика? (плагин flutter_tts) - PullRequest
1 голос
/ 13 июля 2020

Сценарий: у меня есть набор дочерних элементов, созданных с помощью Listview.builder, в котором у каждого дочернего элемента есть кнопка. Теперь я хочу, чтобы был вызван конкретный индекс дочернего метода TTS (преобразование текста в речь). Реализовать это не проблема. Но плагин flutter_tts предоставляет методы setStartHandler, setCompletionHandler, которые вызываются всякий раз, когда tts запускается и завершает свою работу. Но оба этих метода нельзя поместить в initState, поскольку им нужен доступ к индексной переменной.

body: ListView.builder
  (
    itemCount: litems.length,
    itemBuilder: (BuildContext ctxt, int index) {
     return Column(children:[RaisedButton(onPressed:(){
flutterTts.setStartHandler(() {
  setState(() {
    ttsState = TtsState.playing;
    litems[index].isPlaying = true;
  });
});

flutterTts.setCompletionHandler(() {
  setState(() {
    ttsState = TtsState.stopped;
    litems[index].isPlaying = false;
  });
});
//custom speak() method which invokes TTS
_speak(litems[index].text);
//rest of the code

},
child:widget)
,],
);
    }
  )

Приведенный выше код является просто примером. пожалуйста, скажите мне, это хороший подход или есть лучшее решение. Заранее спасибо

...