From 5c859034d610a6b87c69e682bcd9d9ad04640009 Mon Sep 17 00:00:00 2001 From: Sultan Khan Date: Sun, 4 Oct 2020 12:58:43 +0300 Subject: [PATCH] voice search --- assets/images/CloseIcon.png | Bin 0 -> 1285 bytes assets/images/book.svg | 1 + assets/images/robort_svg.svg | 82 ++++++++++++++++ assets/images/symptom.svg | 30 ++++++ .../all_habib_medical_service_page.dart | 6 +- lib/pages/BookAppointment/DoctorProfile.dart | 20 ++-- lib/pages/BookAppointment/SearchResults.dart | 16 +-- .../components/SearchByClinic.dart | 2 +- lib/pages/landing/landing_page.dart | 21 +++- lib/pages/symptom-checker/symtom-checker.dart | 43 ++++++++ lib/routes.dart | 5 +- lib/widgets/others/app_scaffold_widget.dart | 76 ++++++++------- .../others/floating_button_search.dart | 92 ++++++++++++++++-- lib/widgets/robo-search/search.dart | 24 ++--- pubspec.yaml | 4 +- 15 files changed, 342 insertions(+), 80 deletions(-) create mode 100644 assets/images/CloseIcon.png create mode 100644 assets/images/book.svg create mode 100644 assets/images/robort_svg.svg create mode 100644 assets/images/symptom.svg create mode 100644 lib/pages/symptom-checker/symtom-checker.dart diff --git a/assets/images/CloseIcon.png b/assets/images/CloseIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e68fea9bd77bfc622d9fc0036ea59eb7f2742e GIT binary patch literal 1285 zcmV+g1^W7lP)V;^%5U;ff5j^(Ux zf0>!x+1b6B^Ye2^OM|L02LN@t=IE;XzW#tNR2N^Hj(w2UJthi-09XLfple>SsUgAH z!JkP2N(9KDY9NF)0C>#a_snVUojV@e|`(8jsUGzCx*p_RAkA04PrAT-a&`_QVQC7MhI zD$r#pZv4o3$8@z~I`)pgjW7$@$aPnE6zDn^fY9(%L|5^vObO|PF1XB~Y8(_Skj80o ze8FkLLdZHU6AbWM$%KV)TF2~zdvN_u4Thh;!k>Mcqe-|{GobwNKKwmBh2LA-ENzl1 zUS@pNdxw_&SYTA1Sa9?08~62%<|_PpwyF&UVcdGR4OeDo-QTa*YH;-8702xYEqA&D zNy+!7w$L&>7%1!jb_6@5DnATV<>`tGn@KIN85al*KP(Hv=q7&YKna53Dd;^#&C}d# zWFZZ%mN90aj|bhnER-l1sI$F&t$XzeL&gY*#nmdt3XB=LP~u=5J%0(OU%s*2Gid?{ zn}q-a6cHH5A1=(gb>%LU&-52>WBfSgZauDJ2rFpx$q0t0=nqlqWogiuu_Dng|qQ5e9KC95bk3z320DGMkFgk>vIltd<7 zKOb3aS+a(DB`Q@WCeaxvSC*`)lSF~YPRDZqrRy#-CsBIP$xT$UWF}R-pvpSZ=q73z zSxO&Q-r0e0Wvv-NaT$0(*yhMsH{nXu;-KJnG0NQ$-~yo{%_okw!xny3bCW12qDi8F z4!un@;}bI$E5U_d?EJWN6SW{H$L~LKR_{hP=PzZRaP1}YN||UeT&v>=mNG{LZ$FSc z?@mri9n-N#RZD*^vq2lvE|Vsz{}VtcxL$_cL!LVR!$@I!%r3*G8T5p@A4pjG&$1IB z=UNXssul=@cKdD?7{;#Y*ny!Tbb-ip>=qrdD4K>*#r?PyGpm53jumyVC=v+ySffBt znsJ-|W7kw^j^B#=+!UxOa;#Nok(nB5799pC9xdt6&|Wf@!0Vq2LWbsyKD zYAjGHZKVvR6PA~#i2ZRHWHD=WCG|{zLs}GWb3aQY=?ALRDF9mxhm!g< \ No newline at end of file diff --git a/assets/images/robort_svg.svg b/assets/images/robort_svg.svg new file mode 100644 index 00000000..07d3d4b4 --- /dev/null +++ b/assets/images/robort_svg.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/symptom.svg b/assets/images/symptom.svg new file mode 100644 index 00000000..aa670da1 --- /dev/null +++ b/assets/images/symptom.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart b/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart index 616b5fd8..24df0bf6 100644 --- a/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart +++ b/lib/pages/AlHabibMedicalService/all_habib_medical_service_page.dart @@ -9,6 +9,7 @@ import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dar import 'package:diplomaticquarterapp/pages/livecare/livecare_home.dart'; import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart'; import 'package:diplomaticquarterapp/pages/paymentService/payment_service.dart'; +import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -199,9 +200,8 @@ class _AllHabibMedicalServiceState extends State { title: TranslationBase.of(context).todoList, ), ServicesContainer( - onTap: () => Navigator.push( - context, - FadePage(), + onTap: () => Navigator.of(context).pushNamed( + SYMPTOM_CHECKER, ), imageLocation: 'assets/images/new-design/body_icon.png', title: 'Symptom Checker'), diff --git a/lib/pages/BookAppointment/DoctorProfile.dart b/lib/pages/BookAppointment/DoctorProfile.dart index d3b6fc7c..c51ce5a6 100644 --- a/lib/pages/BookAppointment/DoctorProfile.dart +++ b/lib/pages/BookAppointment/DoctorProfile.dart @@ -42,16 +42,16 @@ class _DoctorProfileState extends State vsync: this, initialIndex: widget.isOpenAppt == true ? 1 : 0); - event.controller.stream.listen((p) { - if (p['clinic_id'] != null && - p['doctor_id'] != null && - p['project_id'] != null) { - setState(() { - // need to take the data from here - // dropdownValue = p['clinic_id']; - }); - } - }); + // event.controller.stream.listen((p) { + // if (p['clinic_id'] != null && + // p['doctor_id'] != null && + // p['project_id'] != null) { + // setState(() { + // // need to take the data from here + // // dropdownValue = p['clinic_id']; + // }); + // } + // }); _tabController = new TabController(length: 2, vsync: this); widget.authUser = new AuthenticatedUser(); getPatientData(); diff --git a/lib/pages/BookAppointment/SearchResults.dart b/lib/pages/BookAppointment/SearchResults.dart index 2b5fac17..e9767072 100644 --- a/lib/pages/BookAppointment/SearchResults.dart +++ b/lib/pages/BookAppointment/SearchResults.dart @@ -1,6 +1,6 @@ import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart'; -import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; +// import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -18,12 +18,12 @@ class SearchResults extends StatefulWidget { } class _SearchResultsState extends State { - var event = RobotProvider(); + // var event = RobotProvider(); List tempList = []; @override void initState() { - event.controller.stream.listen((p) {}); + // event.controller.stream.listen((p) {}); super.initState(); } @@ -41,9 +41,13 @@ class _SearchResultsState extends State { ...List.generate( widget.patientDoctorAppointmentListHospital.length, (index) => AppExpandableNotifier( - title: widget - .patientDoctorAppointmentListHospital[index].filterName + " - " +widget - .patientDoctorAppointmentListHospital[index].distanceInKMs + " " + TranslationBase.of(context).km, + title: widget.patientDoctorAppointmentListHospital[index] + .filterName + + " - " + + widget.patientDoctorAppointmentListHospital[index] + .distanceInKMs + + " " + + TranslationBase.of(context).km, bodyWidget: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/pages/BookAppointment/components/SearchByClinic.dart b/lib/pages/BookAppointment/components/SearchByClinic.dart index e844d4d1..9d833db1 100644 --- a/lib/pages/BookAppointment/components/SearchByClinic.dart +++ b/lib/pages/BookAppointment/components/SearchByClinic.dart @@ -26,7 +26,7 @@ class _SearchByClinicState extends State { bool nearestAppo = false; String dropdownValue; String projectDropdownValue; - var event = RobotProvider(); + // var event = RobotProvider(); List clinicsList = []; List projectsList = []; bool isMobileAppDentalAllow = false; diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index ad8ae6a5..abe89a30 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -12,6 +12,7 @@ import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart'; import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart'; import 'package:diplomaticquarterapp/pages/medical/my_admissions_page.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; +import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/bottom_navigation/bottom_nav_bar.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; @@ -19,6 +20,7 @@ import 'package:diplomaticquarterapp/widgets/drawer/app_drawer_widget.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:permission_handler/permission_handler.dart'; import 'home_page.dart'; @@ -38,7 +40,7 @@ class _LandingPageState extends State with WidgetsBindingObserver { ProjectViewModel projectProvider; final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); final authService = new AuthProvider(); - + var event = RobotProvider(); bool isPageNavigated = false; _changeCurrentTab(int tab) { @@ -280,6 +282,19 @@ class _LandingPageState extends State with WidgetsBindingObserver { ); }, ), + actions: [ + IconButton( + iconSize: 50, + icon: SvgPicture.asset( + 'assets/images/robort_svg.svg', + height: 100, + width: 100, + ), + onPressed: () { + triggerRobot(); + } //do something, + ) + ], centerTitle: true, ), drawer: SafeArea(child: AppDrawer()), @@ -306,6 +321,10 @@ class _LandingPageState extends State with WidgetsBindingObserver { ); } + triggerRobot() { + // event.setValue({"doctor_id": '40036'}); + } + getText(currentTab) { switch (currentTab) { case 0: diff --git a/lib/pages/symptom-checker/symtom-checker.dart b/lib/pages/symptom-checker/symtom-checker.dart new file mode 100644 index 00000000..f7475abf --- /dev/null +++ b/lib/pages/symptom-checker/symtom-checker.dart @@ -0,0 +1,43 @@ +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class SymptomChecker extends StatelessWidget { + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowAppBar: true, + appBarTitle: 'Symptom Checker', + body: Center( + child: SvgPicture.string( + ''' + + + + + + + + + + + + + + + + + + + + + + + + + + +'''))); + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 27161669..8d109983 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -10,6 +10,7 @@ import 'package:diplomaticquarterapp/pages/login/login.dart'; import 'package:diplomaticquarterapp/pages/login/register.dart'; import 'package:diplomaticquarterapp/pages/family/add-family_type.dart'; import 'package:diplomaticquarterapp/pages/family/add-family-member.dart'; +import 'package:diplomaticquarterapp/pages/symptom-checker/symtom-checker.dart'; const String INIT_ROUTE = '/'; const String HOME = '/'; @@ -25,6 +26,7 @@ const String MY_FAMILIY = 'my-family'; const String ADD_FAMILY_MEMBER_TYPE = 'add-family-member-type'; const String ADD_FAMILY_MEMBER = 'add-family-member'; const String LIVE_CARE = 'live-care'; +const String SYMPTOM_CHECKER = 'symptom-checker'; var routes = { HOME: (_) => LandingPage(), WELCOME_LOGIN: (_) => WelcomeLogin(), @@ -37,5 +39,6 @@ var routes = { MY_FAMILIY: (_) => MyFamily(), ADD_FAMILY_MEMBER_TYPE: (_) => AddFamilyMemberType(), ADD_FAMILY_MEMBER: (_) => AddMember(), - LIVE_CARE: (_) => LiveCareHome() + LIVE_CARE: (_) => LiveCareHome(), + SYMPTOM_CHECKER: (_) => SymptomChecker() }; diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index eda27361..0c9c12ed 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -9,6 +9,7 @@ import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/search.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; @@ -41,44 +42,44 @@ class AppScaffold extends StatelessWidget { AppGlobal.context = context; return Scaffold( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, - appBar: isShowAppBar - ? AppBar( - elevation: 0, - backgroundColor: Theme.of(context).appBarTheme.color, - textTheme: TextTheme( - headline6: TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - title: Text(appBarTitle.toUpperCase()), - leading: Builder( - builder: (BuildContext context) { - return ArrowBack(); + backgroundColor: Theme.of(context).scaffoldBackgroundColor, + appBar: isShowAppBar + ? AppBar( + elevation: 0, + backgroundColor: Theme.of(context).appBarTheme.color, + textTheme: TextTheme( + headline6: + TextStyle(color: Colors.white, fontWeight: FontWeight.bold), + ), + title: Text(appBarTitle.toUpperCase()), + leading: Builder( + builder: (BuildContext context) { + return ArrowBack(); + }, + ), + centerTitle: true, + actions: [ + IconButton( + icon: Icon(FontAwesomeIcons.home), + color: Colors.white, + onPressed: () { + Navigator.of(context).popUntil(ModalRoute.withName('/')); }, ), - centerTitle: true, - actions: [ - IconButton( - icon: Icon(FontAwesomeIcons.home), - color: Colors.white, - onPressed: () { - Navigator.of(context).popUntil(ModalRoute.withName('/')); - }, - ), - ], - ) - : null, - body: baseViewModel != null - ? NetworkBaseView( - child: buildBodyWidget(), - baseViewModel: baseViewModel, - ) - : buildBodyWidget(), - bottomSheet: bottomSheet, - bottomNavigationBar: - this.isBottomBar == true ? BottomBarSearch() : SizedBox() - //floatingActionButton: FloatingSearchButton(), - ); + ], + ) + : null, + body: baseViewModel != null + ? NetworkBaseView( + child: buildBodyWidget(), + baseViewModel: baseViewModel, + ) + : buildBodyWidget(), + bottomSheet: bottomSheet, + // bottomNavigationBar: + // this.isBottomBar == true ? BottomBarSearch() : SizedBox() + // floatingActionButton: FloatingSearchButton(), + ); } buildAppLoaderWidget(bool isLoading) { @@ -86,6 +87,7 @@ class AppScaffold extends StatelessWidget { } buildBodyWidget() { - return body; //Stack(children: [body, buildAppLoaderWidget(isLoading)]); + // return body; //Stack(children: [body, buildAppLoaderWidget(isLoading)]); + return Stack(children: [body, FloatingSearchButton()]); } } diff --git a/lib/widgets/others/floating_button_search.dart b/lib/widgets/others/floating_button_search.dart index 34b1240e..37a3e3c0 100644 --- a/lib/widgets/others/floating_button_search.dart +++ b/lib/widgets/others/floating_button_search.dart @@ -1,17 +1,93 @@ import 'package:diplomaticquarterapp/widgets/robo-search/robosearch.dart'; import 'package:diplomaticquarterapp/widgets/robo-search/search.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class FloatingSearchButton extends StatefulWidget { + @override + _FloatingSearchButton createState() => _FloatingSearchButton(); +} + +class _FloatingSearchButton extends State + with TickerProviderStateMixin { + Offset position = Offset(30.0, 40.0); + AlignmentDirectional _ironManAlignment = AlignmentDirectional(0.0, 0.7); + + @override + void initState() { + // TODO: implement initState + super.initState(); + } -class FloatingSearchButton extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(bottom: 80), - child: FloatingActionButton( - child: Icon(Icons.mic), - onPressed: () { - SearchBot(); - }, + return Positioned( + left: position.dx, + top: position.dy, + child: Draggable( + feedback: Container(child: getStack()), + child: Container( + child: AnimatedContainer( + duration: Duration(seconds: 2), + alignment: _ironManAlignment, + child: getStack(), + )), + childWhenDragging: Container( + color: Colors.transparent, + ), + onDragEnd: (details) { + setState(() { + position = details.offset; + }); + })); + + // Draggable( + // feedback: getStack(), + // childWhenDragging: Container(), + // child: getStack(), + // onDragEnd: (drag) { + // setState(() { + // top = top + drag.offset.dy < 0 ? 0 : top + drag.offset.dy; + // left = left + drag.offset.dx < 0 ? 0 : left + drag.offset.dx; + // }); + // }); + } + + Widget getStack() { + return Container( + height: 150, + width: 150, + child: Stack( + children: [ + Positioned( + top: 10, + right: 0, + child: GestureDetector( + onTap: () { + print("hi"); + setState(() { + _ironManAlignment = AlignmentDirectional(0.0, -0.20); + }); + }, // handle your image tap here + child: Image.asset( + 'assets/images/CloseIcon.png', + fit: BoxFit.cover, // this is the solution for border + width: 30.0, + height: 30.0, + )), + ), + GestureDetector( + onTap: () { + // animationController.forward(); + }, // handle your image tap here + child: SvgPicture.asset('assets/images/robort_svg.svg')) + // new RawMaterialButton( + // // shape: new CircleBorder(), + // elevation: 1.0, + // child: SvgPicture.asset('assets/images/robort_svg.svg'), + // onPressed: () {}, + // ), + ], )); } diff --git a/lib/widgets/robo-search/search.dart b/lib/widgets/robo-search/search.dart index b6426b6d..c1ce33d1 100644 --- a/lib/widgets/robo-search/search.dart +++ b/lib/widgets/robo-search/search.dart @@ -30,7 +30,7 @@ class SearchBot with ChangeNotifier { } SearchProvider searchProvider = new SearchProvider(); - RobotProvider eventProvider = RobotProvider(); + // RobotProvider eventProvider = RobotProvider(); bool isLoading = false; bool isError = false; final SpeechToText speech = SpeechToText(); @@ -203,19 +203,19 @@ class SearchBot with ChangeNotifier { type: 1, ))); break; - case '103': - eventProvider.setValue({"clinic_id": understand}); - break; - - case '104': - eventProvider.setValue({"project_id": understand}); - break; - case '105': - eventProvider.setValue({"doctor_id": understand}); - break; + // case '103': + // eventProvider.setValue({"clinic_id": understand}); + // break; + + // case '104': + // eventProvider.setValue({"project_id": understand}); + // break; + // case '105': + // eventProvider.setValue({"doctor_id": understand}); + // break; default: { - eventProvider.setValue({"doctor_id": '40036'}); + //eventProvider.setValue({"doctor_id": '40036'}); //eventProvider.setValue(); // if (result['CommandNumber'] == '0') { // searchProvider.setData(understand); diff --git a/pubspec.yaml b/pubspec.yaml index 9b9588fd..75d9b1fd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -146,7 +146,9 @@ flutter: - assets/images/login/ - assets/json/ - assets/sounds/ - + - assets/images/symptom.svg + - assets/images/robort_svg.svg + fonts: - family: WorkSans