Thursday, October 29, 2026
HomeiOS Developmentios - flutter-speech_to_text) The letters obtained by voice recognition will disappear

ios – flutter-speech_to_text) The letters obtained by voice recognition will disappear

[ad_1]

import 'bundle:flutter/materials.dart';
import 'bundle:speech_to_text/speech_recognition_error.dart';
import 'bundle:speech_to_text/speech_recognition_result.dart';
import 'bundle:speech_to_text/speech_to_text.dart';

class SpeechToTextPage extends StatefulWidget {
  Listing<String>? contentsData1;
  Listing<String>? contentsData2;

  SpeechToTextPage({Key? key, required this.contentsData1, required this.contentsData2}) : tremendous(key: key);

  @override
  _SpeechToTextPageState createState() => _SpeechToTextPageState();
}

class _SpeechToTextPageState extends State<SpeechToTextPage> {


  Listing<String> contentsData1ToShow = [];
  Listing<String> contentsData2ToShow = [];

  int _indexNum = 0;
  var choose="";




  @override
  void initState() {
    tremendous.initState();
  }

  @override
  Widget construct(BuildContext context) {


    return Scaffold(
      physique: SafeArea(
        youngster: Column(
          kids: [
            Expanded(
              child: Container(
                child: contentsData1ToShow.isNotEmpty

                    ? ListView.builder(
                        itemCount: contentsData1ToShow.length,
                        itemBuilder: (BuildContext context, int index) {

                          if (contentsData1ToShow[index].accommodates('Q')) {
                            if (choose == 'selectQ') {
                              return QlineWidgetWithSTT(
                                  qlineContentsData1: contentsData1ToShow[index]
                                      .replaceFirst('Q', ''),
                                  qlineContentsData2: contentsData2ToShow[index]
                                      .replaceFirst('Q', '')
                              );

                            } else {
                              return QlineWidget(
                                  qlineContentsData1: contentsData1ToShow[index]
                                      .replaceFirst('Q', ''),
                                  qlineContentsData2: contentsData2ToShow[index]
                                      .replaceFirst('Q', '')
                              );
                            }





                          } else if (contentsData1ToShow[index].accommodates('A')) {

                            if (choose == 'selectA') {
                              return AlineWidgetWithSTT(
                                  aLineContentsData1: contentsData1ToShow[index]
                                      .replaceFirst('A', ''),
                                  aLineContentsData2: contentsData2ToShow[index]
                                      .replaceFirst('A', '')
                              );

                             } else {
                              return AlineWidget(
                                  aLineContentsData1: contentsData1ToShow[index]
                                      .replaceFirst('A', ''),
                                  aLineContentsData2: contentsData2ToShow[index]
                                      .replaceFirst('A', '')
                              );
                            }





                          } else if (contentsData1ToShow[index].accommodates('ETC')) {
                            return ETClineWidget(
                                etcLineContentsData1: contentsData1ToShow[index].replaceFirst('ETC', ''),
                                etcLineContentsData2: contentsData2ToShow[index].replaceFirst('ETC', '')
                            );
                          } else {
                            return ETClineWidget(
                                etcLineContentsData1: contentsData1ToShow[index].replaceFirst('ETC', ''),
                                etcLineContentsData2: contentsData2ToShow[index].replaceFirst('ETC', '')
                            );
                          }

                       },
                      )

                    : Container(
                        youngster: Row(
                          mainAxisAlignment: MainAxisAlignment.spaceAround,
                          kids: [
                            GestureDetector(
                                onTap: () {
                                  setState(() {
                                    select="selectQ";
                                  });
                                },
                                child: Container(color: Colors.blue,child: Padding(
                                  padding: const EdgeInsets.all(20.0),
                                  child: const Text('select Q'),
                                ))),


                            GestureDetector(
                                onTap: () {
                                  setState(() {
                                    select="selectA";
                                  });
                                },
                                child: Container(color: Colors.blue,child: Padding(
                                  padding: const EdgeInsets.all(20.0),
                                  child: const Text('select A'),
                                ))),
                          ],
                        ),
                      ),
              ),
            ),


            Container(
              youngster: Row(
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                kids: [

                  IconButton(onPressed: (){
                    if (widget.contentsData1!.length > _indexNum) {
                      setState(() {
                        contentsData1ToShow.add(widget.contentsData1![_indexNum]);
                        contentsData2ToShow.add(widget.contentsData2![_indexNum]);
                        _indexNum++;
                      });
                    }
                  }, icon: Icon(Icons.plus_one)),


                  IconButton(onPressed: (){

                  }, icon: Icon(Icons.mic)),


                  IconButton(onPressed: (){
                  setState(() {
                    contentsData1ToShow.clear();
                    _indexNum = 0;
                  });
                  }, icon: Icon(Icons.shut)),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}









class QlineWidget extends StatefulWidget {
  remaining qlineContentsData1;
  remaining qlineContentsData2;

  QlineWidget({Key? key, required this.qlineContentsData1, required this.qlineContentsData2}) : tremendous(key: key);

  @override
  _QlineWidgetState createState() => _QlineWidgetState();
}

class _QlineWidgetState extends State<QlineWidget> {
  @override
  Widget construct(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      youngster: Container(
          youngster: Heart(
              youngster: Column(
            kids: [
              Text(widget.qlineContentsData1,style: TextStyle(color: Colors.red, fontSize: 20),),
              Text(widget.qlineContentsData2,style: TextStyle(color: Colors.red, fontSize: 20),),
            ],
          ))),
    );
  }
}




class QlineWidgetWithSTT extends StatefulWidget {
  remaining qlineContentsData1;
  remaining qlineContentsData2;

  QlineWidgetWithSTT({required this.qlineContentsData1, required this.qlineContentsData2});

  @override
  _QlineWidgetWithSTTState createState() => _QlineWidgetWithSTTState();
}

class _QlineWidgetWithSTTState extends State<QlineWidgetWithSTT> {
  remaining SpeechToText speech = SpeechToText();
  double degree = 0.0;
  String lastWords="";
  String lastStatus="";
  String _currentLocaleId = 'en_US';




  Future<void> initSpeechState() async {
    bool hasSpeech = await speech.initialize(

        onError: errorListener,

        onStatus: statusListener);
  }

  @override
  void initState() {
    tremendous.initState();
    initSpeechState();
  }


  @override
  Widget construct(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      youngster: Container(
          ornament: BoxDecoration(border: Border.all(
            colour: Colours.indigo,
            width: 3,
          ),),
          youngster: Heart(
              youngster: Column(
                kids: [
                  Text('[select Q]'),
                  IconButton(
                    icon: Icon(Icons.mic),
                    onPressed: startListening,
                  ),
                  Textual content(lastWords),
                  Textual content(widget.qlineContentsData1,model: TextStyle(colour: Colours.pink, fontSize: 20),),
                  Textual content(widget.qlineContentsData2,model: TextStyle(colour: Colours.pink, fontSize: 20),),
                ],
              ))),
    );
  }


  void startListening() {
    speech.pay attention(
      onResult: resultListener,
      listenFor: Length(minutes: 3),
      localeId: _currentLocaleId,
      onSoundLevelChange: soundLevelListener,
      cancelOnError: true,
      partialResults: true,
    );
  }



  void resultListener(SpeechRecognitionResult end result) {

    if (mounted) {
      setState(() {
      this.lastWords = "${end result.recognizedWords}";
      });
      }
    }



  void errorListener(SpeechRecognitionError error) {

    speech.cease();

    print("Acquired error standing: $error, listening: ${speech.isListening}");
  }




  void statusListener(String standing) {
    print('standing : ${standing}');
    if (mounted) {
      setState(() {
        lastStatus = "$standing";
      });
    }
  }



  void soundLevelListener(double degree) {
    if (mounted) {
      setState(() {
        this.degree = degree;
      });
    }
  }
}









class AlineWidget extends StatefulWidget {
  remaining aLineContentsData1;
  remaining aLineContentsData2;

  AlineWidget({Key? key, required this.aLineContentsData1, required this.aLineContentsData2}) : tremendous(key: key);

  @override
  _AlineWidgetState createState() => _AlineWidgetState();
}

class _AlineWidgetState extends State<AlineWidget> {
  @override
  Widget construct(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      youngster: Container(
          youngster: Column(
            kids: [
              Center(child: Text(widget.aLineContentsData1,style: TextStyle(color: Colors.blue, fontSize: 20),)),
              Center(child: Text(widget.aLineContentsData2,style: TextStyle(color: Colors.blue, fontSize: 20),)),
            ],
          )),
    );
  }
}


class AlineWidgetWithSTT extends StatefulWidget {
  remaining aLineContentsData1;
  remaining aLineContentsData2;

  AlineWidgetWithSTT({Key? key, required this.aLineContentsData1, required this.aLineContentsData2}) : tremendous(key: key);

  @override
  _AlineWidgetWithSTTState createState() => _AlineWidgetWithSTTState();
}

class _AlineWidgetWithSTTState extends State<AlineWidgetWithSTT> {
  remaining SpeechToText speech = SpeechToText();
  double degree = 0.0;
  String lastWords="";
  String lastStatus="";
  String _currentLocaleId = 'en_US';




  Future<void> initSpeechState() async {
    bool hasSpeech = await speech.initialize(

        onError: errorListener,

        onStatus: statusListener);
  }

  @override
  void initState() {
    tremendous.initState();
    initSpeechState();
  }



  @override
  Widget construct(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      youngster: Container(
        ornament: BoxDecoration(border: Border.all(
          colour: Colours.indigo,
          width: 3,
        ),),
          youngster: Column(
            kids: [
              Text('[select A]'),
              IconButton(
                icon: Icon(Icons.mic),
                onPressed: startListening,
              ),
              Textual content(lastWords),
              Heart(youngster: Textual content(widget.aLineContentsData1,model: TextStyle(colour: Colours.blue, fontSize: 20),)),
              Heart(youngster: Textual content(widget.aLineContentsData2,model: TextStyle(colour: Colours.blue, fontSize: 20),)),
            ],
          )),
    );
  }




  void startListening() {
    speech.pay attention(
      onResult: resultListener,
      listenFor: Length(minutes: 3),
      localeId: _currentLocaleId,
      onSoundLevelChange: soundLevelListener,
      cancelOnError: true,
      partialResults: true,
    );
  }



  void resultListener(SpeechRecognitionResult end result) {

    if (mounted) {
      setState(() {
        this.lastWords = "${end result.recognizedWords}";
      });
    }
  }


  // 에러가 발생했을 때
  void errorListener(SpeechRecognitionError error) {

    speech.cease();

    print("Acquired error standing: $error, listening: ${speech.isListening}");
  }




  void statusListener(String standing) {
    print('standing : ${standing}');
    if (mounted) {
      setState(() {
        lastStatus = "$standing";
      });
    }
  }



  void soundLevelListener(double degree) {
    if (mounted) {
      setState(() {
        this.degree = degree;
      });
    }
  }
}






class ETClineWidget extends StatefulWidget {
  remaining etcLineContentsData1;
  remaining etcLineContentsData2;

  ETClineWidget({Key? key, required this.etcLineContentsData1, required this.etcLineContentsData2}) : tremendous(key: key);

  @override
  _ETClineWidgetState createState() => _ETClineWidgetState();
}


class _ETClineWidgetState extends State<ETClineWidget> {
  @override
  Widget construct(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      youngster: Container(
          youngster: Heart(
              youngster: Column(
                kids: [
                  Text(widget.etcLineContentsData1,style: TextStyle(color: Colors.yellow, fontSize: 20),),
                  Text(widget.etcLineContentsData2,style: TextStyle(color: Colors.yellow, fontSize: 20),),
                ],
              ))),
    );
  }
}

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments