You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
doctor_app_flutter/lib/widgets/shared/speech-text-popup.dart

166 lines
5.1 KiB
Dart

import 'dart:async';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:speech_to_text/speech_to_text.dart' as stt;
class SpeechToText {
final BuildContext context;
static var dialog;
static stt.SpeechToText speech = stt.SpeechToText();
SpeechToText({
@required this.context,
});
showAlertDialog(BuildContext context) {
// show the dialog
showDialog(
context: context,
barrierDismissible: true,
builder: (BuildContext context) {
dialog = context;
return MyStatefulBuilder(
dispose: () {},
);
},
);
print(dialog);
}
static closeAlertDialog(BuildContext context) {
Navigator.of(dialog).pop();
speech.stop();
}
}
typedef Disposer = void Function();
class MyStatefulBuilder extends StatefulWidget {
const MyStatefulBuilder({
// @required this.builder,
@required this.dispose,
});
//final StatefulWidgetBuilder builder;
final Disposer dispose;
@override
_MyStatefulBuilderState createState() => _MyStatefulBuilderState();
}
class _MyStatefulBuilderState extends State<MyStatefulBuilder> {
var event = RobotProvider();
var searchText;
static StreamSubscription<dynamic> streamSubscription;
static var isClosed = false;
@override
void initState() {
streamSubscription = event.controller.stream.listen((p) {
if ((p['searchText'] != 'null' &&
p['searchText'] != null &&
p['searchText'] != "" &&
isClosed == false) &&
mounted) {
setState(() {
searchText = p['searchText'];
});
} else if (p['searchText'] == 'null') {
setState(() {
searchText = p['searchText'];
});
}
});
super.initState();
}
@override
Widget build(BuildContext context) => AlertDialog(
content: Container(
color: Colors.white,
height: SizeConfig.realScreenHeight * 0.5,
width: SizeConfig.realScreenWidth * 0.8,
child: Container(
child: Column(children: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
IconButton(
icon: Icon(DoctorApp.close),
onPressed: () {
SpeechToText.closeAlertDialog(context);
})
],
),
Expanded(
flex: 3,
child: Center(
child: Container(
margin: EdgeInsets.all(20),
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(100),
border: Border.all(width: 2, color: Colors.red)),
child: Icon(
Icons.mic,
color: Colors.blue,
size: 48,
),
))),
Expanded(
flex: 1,
child: Center(
child: Image.asset(
'assets/images/soundWaveAnimation.gif',
height: 75,
))),
Expanded(
flex: 1,
child: Center(
child: AppText(
searchText == null
? TranslationBase.of(context).trySaying
: searchText == 'null'
? TranslationBase.of(context).didntCatch
: searchText,
fontSize: 14,
))),
searchText == 'null'
? Center(
child: InkWell(
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.grey[300])),
padding: EdgeInsets.all(5),
child: AppText(
'Try Again',
fontSize: 13,
)),
onTap: () {
SpeechToText.closeAlertDialog(context);
event.setValue({'startPopUp': 'true'});
},
))
: SizedBox(),
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
Image.asset(
'assets/images/habib-logo.png',
height: 20,
width: 20,
)
])
]),
)));
@override
void dispose() {
super.dispose();
widget.dispose();
}
}