livetexttospeechflutter 0.0.1
livetexttospeechflutter: ^0.0.1 copied to clipboard
Text to speech.
example/lib/main.dart
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:livetexttospeechflutter/livetexttospeechflutter.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _livetexttospeechflutterPlugin = Livetexttospeechflutter();
late Livetexttospeechflutter _livespeechtotextPlugin;
late String _recognisedText;
String? _localeDisplayName = '';
StreamSubscription<dynamic>? onSuccessEvent;
bool microphoneGranted = false;
@override
void initState() {
super.initState();
_livespeechtotextPlugin = Livetexttospeechflutter();
_livespeechtotextPlugin.getLocaleDisplayName().then((value) => setState(
() => _localeDisplayName = value,
));
binding().whenComplete(() => null);
_recognisedText = '';
//initPlatformState();
}
@override
void dispose() {
onSuccessEvent?.cancel();
super.dispose();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
String platformVersion;
// Platform messages may fail, so we use a try/catch PlatformException.
// We also handle the message potentially returning null.
try {
platformVersion =
await _livetexttospeechflutterPlugin.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Live Speech To Text'),
),
body: Center(
child: Column(
children: [
Text(_recognisedText),
if (!microphoneGranted)
ElevatedButton(
onPressed: () {
binding();
},
child: const Text("Check Permissions"),
),
ElevatedButton(
onPressed: microphoneGranted
? () {
print("start button pressed");
try {
_livespeechtotextPlugin.start();
} on PlatformException {
print('error');
}
}
: null,
child: const Text('Start')),
ElevatedButton(
onPressed: microphoneGranted
? () {
print("stop button pressed");
try {
_livespeechtotextPlugin.stop();
} on PlatformException {
print('error');
}
}
: null,
child: const Text('Stop')),
Text("Locale: $_localeDisplayName"),
],
),
),
),
);
}
Future<dynamic> binding() async {
onSuccessEvent?.cancel();
return Future.wait([]).then((_) async {
// Check if the user has already granted microphone permission.
var permissionStatus = await Permission.microphone.status;
// If the user has not granted permission, prompt them for it.
if (!microphoneGranted) {
await Permission.microphone.request();
// Check if the user has already granted the permission.
permissionStatus = await Permission.microphone.status;
if (!permissionStatus.isGranted) {
return Future.error('Microphone access denied');
}
}
// Check if the user has already granted speech permission.
if (Platform.isIOS) {
var speechStatus = await Permission.speech.status;
// If the user has not granted permission, prompt them for it.
if (!microphoneGranted) {
await Permission.speech.request();
// Check if the user has already granted the permission.
speechStatus = await Permission.speech.status;
if (!speechStatus.isGranted) {
return Future.error('Speech access denied');
}
}
}
return Future.value(true);
}).then((value) {
microphoneGranted = true;
// listen to event "success"
onSuccessEvent =
_livespeechtotextPlugin.addEventListener("success", (value) {
if (value.runtimeType != String) return;
if ((value as String).isEmpty) return;
setState(() {
_recognisedText = value;
});
});
setState(() {});
}).onError((error, stackTrace) {
// toast
log(error.toString());
// open app setting
});
}
}