speech search

merge-update-with-lab-changes
Sultan Khan 6 years ago
parent 03b34115c4
commit 913729fc58

@ -25,18 +25,18 @@ class BaseAppClient {
//Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
String token = await sharedPref.getString(TOKEN);
var user = await sharedPref.getObject(USER_PROFILE);
body['SetupID'] = SETUP_ID;
body['VersionID'] = VERSION_ID;
body['Channel'] = CHANNEL;
body['LanguageID'] = LANGUAGE;
body['IPAdress'] = IP_ADDRESS;
body['generalid'] = GENERAL_ID;
body['PatientOutSA'] = PATIENT_OUT_SA;
body['SessionID'] = SESSION_ID;
body['isDentalAllowedBackend'] = IS_DENTAL_ALLOWED_BACKEND;
body['DeviceTypeID'] = DeviceTypeID;
body['PatientType'] = PATIENT_TYPE;
body['PatientTypeID'] = PATIENT_TYPE_ID;
// body['SetupID'] = SETUP_ID;
// body['VersionID'] = VERSION_ID;
// body['Channel'] = CHANNEL;
// body['LanguageID'] = LANGUAGE;
// body['IPAdress'] = IP_ADDRESS;
// body['generalid'] = GENERAL_ID;
// body['PatientOutSA'] = PATIENT_OUT_SA;
// body['SessionID'] = SESSION_ID;
// body['isDentalAllowedBackend'] = IS_DENTAL_ALLOWED_BACKEND;
// body['DeviceTypeID'] = DeviceTypeID;
// body['PatientType'] = PATIENT_TYPE;
// body['PatientTypeID'] = PATIENT_TYPE_ID;
if (user != null) {
body['TokenID'] = token; //user['TokenID'];
body['PatientID'] = user['PatientID'];

@ -7,7 +7,7 @@ import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'config/size_config.dart';
import 'core/viewModels/project_view_model.dart';
import 'locator.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
void main() {
setupLocator();
@ -28,10 +28,14 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider<ProjectViewModel>(
create: (context) => ProjectViewModel(),
),
// ChangeNotifierProvider<SearchProvider>(
// create: (context) => SearchProvider()),
ChangeNotifierProvider<SearchProvider>(
create: (context) => SearchProvider()),
ChangeNotifierProvider.value(
value: SearchProvider(),
),
StreamProvider.value(
value: RobotProvider().intStream(),
initialData: RobotProvider().setValue({}),
)
],
child: Consumer<ProjectViewModel>(

@ -1,14 +1,19 @@
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/CardCommon.dart';
import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../uitl/translations_delegate_base.dart';
class BookingOptions extends StatelessWidget {
final bool isAppbar;
BookingOptions({this.isAppbar = false});
@override
Widget build(BuildContext context) {
final searchValue = Provider.of<SearchProvider>(context);
return AppScaffold(
isShowAppBar: false,
isShowAppBar: isAppbar,
appBarTitle: TranslationBase.of(context).bookAppo,
body: Container(
margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0),
@ -29,17 +34,18 @@ class BookingOptions extends StatelessWidget {
children: <Widget>[
Expanded(
child: CardCommon(
image:
'assets/images/new-design/search_by_clinic.png',
text: TranslationBase.of(context).clinic,
subText: TranslationBase.of(context).name),
image: 'assets/images/new-design/search_by_clinic.png',
text: TranslationBase.of(context).clinic,
subText: TranslationBase.of(context).name,
type: 0,
),
),
Expanded(
child: CardCommon(
image:
'assets/images/new-design/search_by_doctor.png',
image: 'assets/images/new-design/search_by_doctor.png',
text: TranslationBase.of(context).doctor,
subText: TranslationBase.of(context).name),
subText: TranslationBase.of(context).name,
type: 1),
)
],
),

@ -1,9 +1,12 @@
import 'package:diplomaticquarterapp/pages/BookAppointment/components/SearchByClinic.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/components/SearchByDoctor.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/floating_button_search.dart';
import 'package:flutter/material.dart';
class Search extends StatefulWidget {
final int type;
Search({this.type = 0});
@override
_SearchState createState() => _SearchState();
}
@ -13,7 +16,9 @@ class _SearchState extends State<Search> with SingleTickerProviderStateMixin {
@override
void initState() {
_tabController = new TabController(length: 2, vsync: this);
_tabController =
new TabController(length: 2, vsync: this, initialIndex: widget.type);
super.initState();
}
@ -36,6 +41,7 @@ class _SearchState extends State<Search> with SingleTickerProviderStateMixin {
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [SearchByClinic(), SearchByDoctor()],
controller: _tabController));
controller: _tabController),
floatingActionButton: FloatingSearchButton());
}
}

@ -1,11 +1,15 @@
import 'dart:convert';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart';
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../SearchResults.dart';
class SearchByClinic extends StatefulWidget {
@ -16,17 +20,26 @@ class SearchByClinic extends StatefulWidget {
class _SearchByClinicState extends State<SearchByClinic> {
bool nearestAppo = false;
String dropdownValue;
var event = RobotProvider();
List<ListClinicCentralized> clinicsList = [];
@override
void initState() {
WidgetsBinding.instance
.addPostFrameCallback((_) => getClinicsList());
WidgetsBinding.instance.addPostFrameCallback((_) => getClinicsList());
super.initState();
}
@override
Widget build(BuildContext context) {
event.controller.stream.listen((p) {
if (p['Id'] != null) {
setState(() {
dropdownValue = p['Id'];
getDoctorsList(context);
});
}
});
return Container(
margin: EdgeInsets.all(10.0),
child: Column(
@ -57,8 +70,8 @@ class _SearchByClinicState extends State<SearchByClinic> {
),
borderRadius: BorderRadius.circular(10),
),
margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 20.0),
padding: EdgeInsets.all(10.0),
// margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 20.0),
padding: EdgeInsets.all(8.0),
width: MediaQuery.of(context).size.width,
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
@ -73,7 +86,7 @@ class _SearchByClinicState extends State<SearchByClinic> {
onChanged: (newValue) {
setState(() {
dropdownValue = newValue;
print(dropdownValue);
getDoctorsList(context);
});
},

@ -5,23 +5,24 @@ class CardCommon extends StatelessWidget {
final image;
final text;
final subText;
final type;
const CardCommon(
{@required this.image, @required this.text, @required this.subText});
{@required this.image,
@required this.text,
@required this.subText,
@required this.type});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
navigateToSearch(context);
navigateToSearch(context, this.type);
},
child: Container(
margin: EdgeInsets.fromLTRB(9.0, 9.0, 9.0, 9.0),
decoration: BoxDecoration(boxShadow: [
BoxShadow(color: Colors.grey[400], blurRadius: 2.0, spreadRadius: 0.0)
], borderRadius: BorderRadius.circular(10),
color: Colors.white),
], borderRadius: BorderRadius.circular(10), color: Colors.white),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
@ -39,9 +40,7 @@ class CardCommon extends StatelessWidget {
child: Text(this.subText,
overflow: TextOverflow.clip,
style: TextStyle(
color: Colors.black,
letterSpacing: 1.0,
fontSize: 15.0)),
color: Colors.black, letterSpacing: 1.0, fontSize: 15.0)),
),
Container(
alignment: Alignment.bottomRight,
@ -54,9 +53,12 @@ class CardCommon extends StatelessWidget {
);
}
Future navigateToSearch(context) async {
Future navigateToSearch(context, type) async {
Navigator.push(
context, MaterialPageRoute(builder: (context) => Search()));
context,
MaterialPageRoute(
builder: (context) => Search(
type: type,
)));
}
}

@ -1,6 +1,7 @@
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/models/Authentication/select_device_imei_res.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart';
@ -22,8 +23,7 @@ class LandingPage extends StatefulWidget {
_LandingPageState createState() => _LandingPageState();
}
class _LandingPageState extends State<LandingPage>
with SingleTickerProviderStateMixin {
class _LandingPageState extends State<LandingPage> {
int currentTab = 0;
PageController pageController;
ProjectViewModel projectProvider;
@ -94,7 +94,8 @@ class _LandingPageState extends State<LandingPage>
HomePage(),
MedicalProfilePage(),
MyAdmissionsPage(),
ToDo()
ToDo(),
BookingOptions()
],
),
bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab),

@ -0,0 +1,25 @@
import 'dart:async';
class RobotProvider {
static final RobotProvider _singleton = RobotProvider._internal();
var value;
StreamController<Map> controller = StreamController<Map>.broadcast();
getData() {
// return data;
}
intStream() {
controller.add({});
}
setValue(Map data) {
value = data;
controller.add(value);
}
factory RobotProvider() {
return _singleton;
}
RobotProvider._internal();
}

@ -3,17 +3,13 @@ import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart';
import 'package:flutter/cupertino.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'dart:async';
import 'dart:math' as Math;
import 'package:flutter/material.dart';
class SearchProvider with ChangeNotifier {
bool isLogin = false;
bool isLoading = true;
Map pageData = {};
Map get value => pageData;
ProjectViewModel projectProvider = ProjectViewModel();
// AuthProvider() {
// // getLisner();
// }
dynamic pageData = {};
Future<dynamic> getBotPages(request) async {
try {
@ -21,7 +17,7 @@ class SearchProvider with ChangeNotifier {
onSuccess: (dynamic response, int statusCode) {
pageData = response;
notifyListeners();
// notifyListeners();
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
@ -34,7 +30,7 @@ class SearchProvider with ChangeNotifier {
}
setLisener(data) {
pageData["id"] = 100;
//SearchProvider.pageData = data;
//projectProvider.setSearchValue(pageData);
notifyListeners();
}

@ -1,10 +1,11 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_loader_widget.dart';
import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'floating_button_search.dart';
import '../progress_indicator/app_loader_widget.dart';
import 'arrow_back.dart';
import 'network_base_view.dart';
@ -53,7 +54,7 @@ class AppScaffold extends StatelessWidget {
icon: Icon(FontAwesomeIcons.home),
color: Colors.white,
onPressed: () {
// TODO add navigator to home page
Navigator.of(context).pushNamed(HOME);
},
),
],
@ -66,14 +67,7 @@ class AppScaffold extends StatelessWidget {
)
: buildBodyWidget(),
bottomSheet: bottomSheet,
floatingActionButton: Padding(
padding: const EdgeInsets.only(bottom: 80),
child: FloatingActionButton(
child: Icon(Icons.mic),
onPressed: () {
roboSearch(context);
},
)),
floatingActionButton: FloatingSearchButton(),
);
}
@ -84,9 +78,4 @@ class AppScaffold extends StatelessWidget {
buildBodyWidget() {
return Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)]);
}
roboSearch(context) {
var dialog = RoboSearch(context: context);
dialog.showAlertDialog(context);
}
}

@ -0,0 +1,21 @@
import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart';
import 'package:flutter/material.dart';
class FloatingSearchButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(bottom: 80),
child: FloatingActionButton(
child: Icon(Icons.mic),
onPressed: () {
roboSearch(context);
},
));
}
roboSearch(context) {
var dialog = RoboSearch(context: context);
dialog.showAlertDialog(context);
}
}

@ -1,10 +1,13 @@
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/Search.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart';
import 'package:diplomaticquarterapp/pages/medical/my_admissions_page.dart';
import 'package:diplomaticquarterapp/services/robo_search/search_provider.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart';
import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
@ -17,6 +20,7 @@ import 'package:speech_to_text/speech_recognition_result.dart';
import 'package:speech_to_text/speech_to_text.dart';
import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart';
import 'dart:math';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
class SearchBot extends StatefulWidget {
@override
@ -25,8 +29,8 @@ class SearchBot extends StatefulWidget {
class _SearchBot extends State<SearchBot> {
// DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
// SearchProvider searchProvider = new SearchProvider();
ProjectViewModel projectProvider = ProjectViewModel();
SearchProvider searchProvider = new SearchProvider();
RobotProvider eventProvider = RobotProvider();
bool isLoading = false;
bool isError = false;
final SpeechToText speech = SpeechToText();
@ -34,11 +38,12 @@ class _SearchBot extends State<SearchBot> {
String _currentLocaleId = "";
String lastError;
double level = 0.0;
double minSoundLevel = 10000;
double maxSoundLevel = -10000;
double minSoundLevel = 50000;
double maxSoundLevel = -50000;
String reconizedWord = '';
FlutterTts flutterTts = FlutterTts();
var selectedLang;
bool isSearching = false;
String lastStatus;
@ -68,6 +73,9 @@ class _SearchBot extends State<SearchBot> {
child: FlatButton(
child: Text('Start'),
onPressed: () {
setState(() {
reconizedWord = 'Lisening...';
});
startVoiceSearch();
},
),
@ -107,9 +115,6 @@ class _SearchBot extends State<SearchBot> {
await flutterTts.speak(reconizedWord);
getPages(reconizedWord);
//Future.delayed(const Duration(seconds: 2), () {
//
// });
}
void soundLevelListener(double level) {
@ -145,7 +150,7 @@ class _SearchBot extends State<SearchBot> {
void statusListener(String status) {
setState(() {
reconizedWord = status == 'listening' ? 'Lisening...' : 'Wait....';
reconizedWord = status == 'listening' ? 'Lisening...' : 'Sorry....';
});
}
@ -155,23 +160,57 @@ class _SearchBot extends State<SearchBot> {
'Lang':
TranslationBase.of(context).locale.languageCode == 'en' ? 'En' : 'Ar'
};
if (text == 'book appointment') {
Navigator.push(context, FadePage(page: MyAdmissionsPage()));
}
// //searchProvider.setLisener(request);
// // searchProvider.getBotPages(request).then((result) => getCommands(result));
// // var dialog = RoboSearch(context: context);
// //projectProvider.setSearchValue(request);
// RoboSearch.closeAlertDialog(context);
// PageController pageController;
// pageController.jumpToPage(1);
// landing._changeCurrentTab(1);
searchProvider
.getBotPages(request)
.then((value) => {getCommands(value['Response'], value['Understand'])});
}
getCommands(result) {
isSearching = false;
print(result);
getCommands(result, understand) async {
RoboSearch.closeAlertDialog(context);
switch (result["CommandNumber"]) {
case '100':
Navigator.push(
context,
FadePage(
page: BookingOptions(
isAppbar: true,
)));
break;
case '101':
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Search(
type: 0,
)));
break;
case '102':
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Search(
type: 1,
)));
break;
case '103':
eventProvider.setValue(understand);
break;
default:
{
eventProvider.setValue({"Id": "17"});
// if (result['CommandNumber'] == '0') {
// searchProvider.setData(understand);
// }
}
break;
}
if (_currentLocaleId == 'en-GB') {
await flutterTts.speak(result['ResponseEn']);
} else {
await flutterTts.speak(result['ResponseAr']);
}
//searchProvider.setLisener(result);
}
}

Loading…
Cancel
Save