Skip to content

When app's AppLifecycleState is inactive I want to stop both speech_to_text and flutter_tts #521

Open
@pandabossli

Description

@pandabossli

💬 Questions and Help

Provide question related to this flutter plugin.
`import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_tts/flutter_tts.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;
import 'package:speech_to_text/speech_to_text.dart';
import '../events/app_state_event.dart';
import '../events/init_event.dart';
import '../events/speech_to_text_event.dart';
import '../utils/my_speech_to_text.dart';

class TestPage extends StatefulWidget {
const TestPage({Key? key}) : super(key: key);

@OverRide
_TestPageState createState() => _TestPageState();
}

class _TestPageState extends State {
late FlutterTts flutterTts;
late stt.SpeechToText speech;
String message = "";
@OverRide
void initState() {
InitEvent.instance().on().listen((event) async {
if (event.status == AppLifecycleState.inactive) {
// deactivate();
setState(() {
message = "inactive";
});
await flutterTts.pause();
await speech.stop();
} else if (event.status == AppLifecycleState.resumed) {
// initState();
setState(() {
message = "resumed";
});
addListen();
}
});

initText2Speech();
initSpeech2Text();

super.initState();

}

Future initText2Speech() async {
flutterTts = FlutterTts();
if (Platform.isIOS) {
await flutterTts.setSharedInstance(true);
await flutterTts.setIosAudioCategory(
IosTextToSpeechAudioCategory.playAndRecord,
[
IosTextToSpeechAudioCategoryOptions.defaultToSpeaker,
],
);
}
await flutterTts.awaitSpeakCompletion(true);

flutterTts.setCompletionHandler(() {
  //文字转语音完毕

  addListen();
});

}

Future initSpeech2Text() async {
await MySpeechToText.init();
speech = MySpeechToText.speech!;

InitEvent.instance().on<SpeechToTextEvent>().listen(
  (event) {
    // 声音转文字状态
    print(event.status);
    if (event.status == 'done') {
      flutterTts.speak(message);
    }
  },
);
addListen();

}

addListen() async {
await speech.listen(
listenFor: Duration(seconds: 60),
pauseFor: Duration(seconds: 3),
listenMode: ListenMode.dictation,
onResult: (result) {
setState(() {
message = result.recognizedWords;
});
},
onDevice: false,
partialResults: true,
);
}

@OverRide
Widget build(BuildContext context) {
return Container(
width: double.infinity,
height: double.infinity,
alignment: Alignment.center,
child: Text(
'$message',
style: TextStyle(
fontSize: 28.sp,
color: Colors.white,
),
),
);
}
}
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions