@ -12,6 +12,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import ' package:diplomaticquarterapp/widgets/avatar/large_avatar.dart ' ;
import ' package:diplomaticquarterapp/widgets/bottom_options/BottomSheet.dart ' ;
import ' package:diplomaticquarterapp/widgets/buttons/button.dart ' ;
import ' package:diplomaticquarterapp/widgets/buttons/defaultButton.dart ' ;
import ' package:diplomaticquarterapp/widgets/buttons/secondary_button.dart ' ;
import ' package:diplomaticquarterapp/widgets/data_display/text.dart ' ;
import ' package:diplomaticquarterapp/widgets/input/text_field.dart ' ;
@ -102,447 +103,447 @@ class _SendFeedbackPageState extends State<SendFeedbackPage> {
builder: ( _ , model , widget ) = > AppScaffold (
baseViewModel: model ,
isShowDecPage: false ,
body: Container (
height: MediaQuery . of ( context ) . size . height * 0.8 ,
child: SingleChildScrollView (
child: Form (
key: formKey ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
SizedBox (
height: 65 ,
) ,
Container (
margin: EdgeInsets . only ( left: 20 , right: 20 , top: 8 ) ,
child: Texts (
TranslationBase . of ( context ) . likeToHear ,
textAlign: TextAlign . center ,
) ,
) ,
InkWell (
onTap: ( ) {
confirmBox ( model ) ;
} ,
child: Container (
margin: EdgeInsets . only ( left: 10 , right: 10 , top: 15 ) ,
height: 50 ,
decoration: BoxDecoration (
border: Border . all ( color: Colors . grey ) ,
borderRadius: BorderRadius . circular ( 7 ) ,
color: Colors . white ,
shape: BoxShape . rectangle ,
body: Column (
children: [
Expanded (
child: SingleChildScrollView (
physics: BouncingScrollPhysics ( ) ,
padding: EdgeInsets . only ( top: 16 , bottom: 16 , right: 21 , left: 21 ) ,
child: Form (
key: formKey ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Text (
TranslationBase . of ( context ) . likeToHear ,
textAlign: TextAlign . center ,
style: TextStyle ( fontSize: 16 , fontWeight: FontWeight . w600 , color: Color ( 0xff2B353E ) , letterSpacing: - 0.64 , height: 23 / 16 ) ,
) ,
child: Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: < Widget > [
Container (
child: Texts (
getSelected ( context ) ,
variant: ' bodyText ' ,
SizedBox ( height: 21 ) ,
InkWell (
onTap: ( ) {
confirmBox ( model ) ;
} ,
child: Container (
padding: EdgeInsets . only ( left: 16 , right: 16 , bottom: 15 , top: 15 ) ,
alignment: Alignment . center ,
decoration: BoxDecoration (
borderRadius: BorderRadius . circular ( 15 ) ,
color: Colors . white ,
border: Border . all (
color: Color ( 0xffefefef ) ,
width: 1 ,
) ,
margin: EdgeInsets . only ( left: 10 , right: 10 ) ,
) ,
Icon (
Icons . arrow_drop_down ,
size: 22 ,
color: Colors . grey ,
)
] ,
) ,
) ,
) ,
if ( appointHistory ! = null & &
messageType = = MessageType . ComplaintOnAnAppointment )
InkWell (
onTap: ( ) {
setState ( ( ) {
isShowListAppointHistory = true ;
} ) ;
} ,
child: Container (
margin: EdgeInsets . all ( 8.0 ) ,
decoration: BoxDecoration (
color: Colors . white ,
borderRadius: BorderRadius . circular ( 8 )
) ,
child: Row (
children: < Widget > [
Container (
width: projectViewModel . isArabic ? 27 : 20 ,
height: projectViewModel . isArabic ? 105 : 90 ,
decoration: BoxDecoration (
/ / Colors . red [ 900 ] Color ( 0xff404545 )
color: appointHistory . isLiveCareAppointment
? Color ( 0xff404545 )
: ! appointHistory . isInOutPatient
? Colors . red [ 900 ]
: Theme . of ( context ) . primaryColor ,
borderRadius: BorderRadius . only (
topLeft: projectViewModel . isArabic
? Radius . circular ( 0 )
: Radius . circular ( 8 ) ,
bottomLeft: projectViewModel . isArabic
? Radius . circular ( 0 )
: Radius . circular ( 8 ) ,
topRight: projectViewModel . isArabic
? Radius . circular ( 8 )
: Radius . circular ( 0 ) ,
bottomRight: projectViewModel . isArabic
? Radius . circular ( 8 )
: Radius . circular ( 0 ) ,
child: Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: < Widget > [
Text (
getSelected ( context ) ,
style: TextStyle (
fontSize: 16 ,
fontWeight: FontWeight . w600 ,
letterSpacing: - 0.48 ,
color: Color ( 0xff2B353E ) ,
) ,
) ,
child: RotatedBox (
quarterTurns: 3 ,
child: Center (
child: Text (
appointHistory . isLiveCareAppointment
? TranslationBase . of ( context ) . liveCare . toUpperCase ( )
: ! appointHistory . isInOutPatient
? TranslationBase . of ( context )
. inPatient
. toUpperCase ( )
: TranslationBase . of ( context )
. outpatient
. toUpperCase ( ) ,
style: TextStyle ( color: Colors . white , fontSize: 12 ) ,
Icon (
Icons . keyboard_arrow_down ,
size: 22 ,
color: Colors . grey ,
)
] ,
) ,
) ,
) ,
SizedBox ( height: 12 ) ,
if ( appointHistory ! = null & & messageType = = MessageType . ComplaintOnAnAppointment )
InkWell (
onTap: ( ) {
setState ( ( ) {
isShowListAppointHistory = true ;
} ) ;
} ,
child: Container (
/ / margin: EdgeInsets . all ( 8.0 ) ,
decoration: BoxDecoration ( color: Colors . white , borderRadius: BorderRadius . circular ( 8 ) ) ,
child: Row (
children: < Widget > [
Container (
width: projectViewModel . isArabic ? 27 : 20 ,
height: projectViewModel . isArabic ? 105 : 90 ,
decoration: BoxDecoration (
/ / Colors . red [ 900 ] Color ( 0xff404545 )
color: appointHistory . isLiveCareAppointment
? Color ( 0xff404545 )
: ! appointHistory . isInOutPatient
? Colors . red [ 900 ]
: Theme . of ( context ) . primaryColor ,
borderRadius: BorderRadius . only (
topLeft: projectViewModel . isArabic ? Radius . circular ( 0 ) : Radius . circular ( 8 ) ,
bottomLeft: projectViewModel . isArabic ? Radius . circular ( 0 ) : Radius . circular ( 8 ) ,
topRight: projectViewModel . isArabic ? Radius . circular ( 8 ) : Radius . circular ( 0 ) ,
bottomRight: projectViewModel . isArabic ? Radius . circular ( 8 ) : Radius . circular ( 0 ) ,
) ,
) ) ,
) ,
Expanded (
flex: 4 ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Padding (
padding: const EdgeInsets . all ( 10.0 ) ,
child: Row (
children: < Widget > [
Expanded (
flex: 1 ,
child: LargeAvatar (
name: appointHistory . doctorNameObj ,
url: appointHistory . doctorImageURL ,
) ,
) ,
child: RotatedBox (
quarterTurns: 3 ,
child: Center (
child: Text (
appointHistory . isLiveCareAppointment
? TranslationBase . of ( context ) . liveCare . toUpperCase ( )
: ! appointHistory . isInOutPatient
? TranslationBase . of ( context ) . inPatient . toUpperCase ( )
: TranslationBase . of ( context ) . outpatient . toUpperCase ( ) ,
style: TextStyle ( color: Colors . white , fontSize: 12 ) ,
) ,
Expanded (
flex: 4 ,
child: Container (
margin: EdgeInsets . all ( 10 ) ,
child: Column (
crossAxisAlignment:
CrossAxisAlignment . start ,
children: < Widget > [
Texts (
appointHistory . doctorNameObj ,
bold: true ,
) ,
Texts (
DateUtil
. getMonthDayYearDateFormatted ( DateUtil . convertStringToDate ( appointHistory . appointmentDate ) ) ,
variant: ' caption3 ' ,
) ) ,
) ,
Expanded (
flex: 4 ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Padding (
padding: const EdgeInsets . all ( 10.0 ) ,
child: Row (
children: < Widget > [
Expanded (
flex: 1 ,
child: LargeAvatar (
name: appointHistory . doctorNameObj ,
url: appointHistory . doctorImageURL ,
) ,
) ,
Expanded (
flex: 4 ,
child: Container (
margin: EdgeInsets . all ( 10 ) ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Texts (
appointHistory . doctorNameObj ,
bold: true ,
) ,
Texts (
DateUtil . getMonthDayYearDateFormatted ( DateUtil . convertStringToDate ( appointHistory . appointmentDate ) ) ,
variant: ' caption3 ' ,
) ,
StarRating ( totalAverage: appointHistory . doctorRate . toDouble ( ) , forceStars: true ) ,
] ,
) ,
StarRating (
totalAverage: appointHistory
. doctorRate
. toDouble ( ) ,
forceStars: true ) ,
] ,
) ,
) ,
) ,
] ,
) ,
] ,
) ,
] ,
) ,
) ,
Expanded (
flex: 1 ,
child: Center (
child: Icon (
Icons . arrow_forward_ios ,
size: 15 ,
) ,
) ,
] ,
) ,
)
] ,
) ,
Expanded (
flex: 1 ,
child: Center (
child: Icon (
Icons . arrow_forward_ios ,
size: 15 ,
) ,
) ,
)
] ,
) ,
) ,
) ,
) ,
if ( messageType = = MessageType . ComplaintOnAnAppointment & &
model . appointHistoryList . length ! = 0 & &
isShowListAppointHistory )
Container (
height: model . appointHistoryList . length > 2
? MediaQuery . of ( context ) . size . height * 0.25
: MediaQuery . of ( context ) . size . height * 0.15 ,
child: ListView . builder (
itemCount: model . appointHistoryList . length ,
itemBuilder: ( context , index ) = > InkWell (
onTap: ( ) {
setState ( ( ) {
appointHistory = model . appointHistoryList [ index ] ;
isShowListAppointHistory = false ;
} ) ;
} ,
child: Container (
margin: EdgeInsets . only ( left: 8 , right: 8 ) ,
color: Colors . white ,
child: Column (
children: < Widget > [
Row (
if ( messageType = = MessageType . ComplaintOnAnAppointment & & model . appointHistoryList . length ! = 0 & & isShowListAppointHistory )
Container (
height: model . appointHistoryList . length > 2 ? MediaQuery . of ( context ) . size . height * 0.25 : MediaQuery . of ( context ) . size . height * 0.15 ,
child: ListView . builder (
itemCount: model . appointHistoryList . length ,
itemBuilder: ( context , index ) = > InkWell (
onTap: ( ) {
setState ( ( ) {
appointHistory = model . appointHistoryList [ index ] ;
isShowListAppointHistory = false ;
} ) ;
} ,
child: Container (
margin: EdgeInsets . only ( left: 8 , right: 8 ) ,
color: Colors . white ,
child: Column (
children: < Widget > [
Expanded (
flex: 4 ,
child: Column (
crossAxisAlignment:
CrossAxisAlignment . start ,
children: < Widget > [
Padding (
padding: const EdgeInsets . all ( 10.0 ) ,
child: Row (
children: < Widget > [
Expanded (
flex: 1 ,
child: LargeAvatar (
name: model
. appointHistoryList [
index ]
. doctorNameObj ,
url: model
. appointHistoryList [
index ]
. doctorImageURL ,
) ,
) ,
Expanded (
flex: 4 ,
child: Container (
margin: EdgeInsets . all ( 10 ) ,
child: Column (
crossAxisAlignment:
CrossAxisAlignment
. start ,
children: < Widget > [
Texts (
model
. appointHistoryList [
index ]
. doctorNameObj ,
bold: true ,
) ,
Texts (
DateUtil . getMonthDayYearDateFormatted ( DateUtil . convertStringToDate ( model . appointHistoryList [ index ] . appointmentDate ) ) ,
variant: ' caption3 ' ,
Row (
children: < Widget > [
Expanded (
flex: 4 ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Padding (
padding: const EdgeInsets . all ( 10.0 ) ,
child: Row (
children: < Widget > [
Expanded (
flex: 1 ,
child: LargeAvatar (
name: model . appointHistoryList [ index ] . doctorNameObj ,
url: model . appointHistoryList [ index ] . doctorImageURL ,
) ,
) ,
Expanded (
flex: 4 ,
child: Container (
margin: EdgeInsets . all ( 10 ) ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Texts (
model . appointHistoryList [ index ] . doctorNameObj ,
bold: true ,
) ,
Texts (
DateUtil . getMonthDayYearDateFormatted ( DateUtil . convertStringToDate ( model . appointHistoryList [ index ] . appointmentDate ) ) ,
variant: ' caption3 ' ,
) ,
StarRating ( totalAverage: model . appointHistoryList [ index ] . doctorRate . toDouble ( ) , forceStars: true ) ,
] ,
) ,
StarRating (
totalAverage: model
. appointHistoryList [
index ]
. doctorRate
. toDouble ( ) ,
forceStars: true ) ,
] ,
) ,
) ,
) ,
] ,
) ,
] ,
) ,
] ,
) ,
) ,
Expanded (
flex: 1 ,
child: Center (
child: Icon (
Icons . arrow_forward_ios ,
size: 15 ,
) ,
) ,
] ,
) ,
)
] ,
) ,
Expanded (
flex: 1 ,
child: Center (
child: Icon (
Icons . arrow_forward_ios ,
size: 15 ,
) ,
) ,
SizedBox (
height: 5 ,
) ,
Divider (
height: 0.5 ,
color: Colors . grey [ 400 ] ,
)
] ,
) ,
SizedBox (
height: 5 ,
) ,
Divider (
height: 0.5 ,
color: Colors . grey [ 400 ] ,
)
] ,
) ,
) ,
) ,
) ,
) ,
) ,
Container (
margin: EdgeInsets . only ( left: 10 , right: 10 , top: 15 ) ,
child: TextFields (
hintText: TranslationBase . of ( context ) . subject ,
controller: titleController ,
fontSize: 13.5 ,
hintColor: Colors . black ,
fontWeight: FontWeight . w600 ,
onChanged: ( v ) {
setState ( ( ) { } ) ;
} ,
validator: ( value ) {
if ( value . isEmpty )
return TranslationBase . of ( context ) . emptySubject ;
else
return null ;
} ,
) ,
) ,
Container (
margin: EdgeInsets . only ( left: 10 , right: 10 , top: 15 ) ,
child: TextFields (
hintText: TranslationBase . of ( context ) . message ,
fontSize: 13.5 ,
hintColor: Colors . black ,
fontWeight: FontWeight . w600 ,
maxLines: 25 ,
minLines: 13 ,
controller: messageController ,
suffixIcon: Icons . mic ,
onSuffixTap: ( ) {
openSpeechReco ( ) ;
} ,
onChanged: ( v ) {
setState ( ( ) { } ) ;
inputWidget ( TranslationBase . of ( context ) . subject , " xxxxxxxx " , titleController ) ,
SizedBox ( height: 12 ) ,
inputWidget ( TranslationBase . of ( context ) . message , " xxxxxxxx " , messageController , lines: 11 , suffixTap: ( ) {
openSpeechReco ( ) ;
} ) ,
SizedBox ( height: 12 ) ,
InkWell (
onTap: ( ) {
ImageOptions . showImageOptions ( context , ( String image , File file ) {
setState ( ( ) {
images . add ( image ) ;
} ) ;
} ) ;
} ,
validator: ( value ) {
if ( value . isEmpty )
return TranslationBase . of ( context ) . emptyMessage ;
else
return null ;
} ) ,
) ,
InkWell (
onTap: ( ) {
ImageOptions . showImageOptions ( context ,
( String image , File file ) {
setState ( ( ) {
images . add ( image ) ;
} ) ;
} ) ;
} ,
child: Container (
margin: EdgeInsets . only ( left: 10 , right: 10 , top: 15 ) ,
height: 50 ,
decoration: BoxDecoration (
border: Border . all ( color: Colors . grey ) ,
borderRadius: BorderRadius . circular ( 7 ) ,
color: Colors . white ,
shape: BoxShape . rectangle ,
) ,
child: Center (
child: Row (
crossAxisAlignment: CrossAxisAlignment . center ,
mainAxisAlignment: MainAxisAlignment . center ,
children: < Widget > [
Icon ( Icons . attach_file ) ,
Texts (
TranslationBase . of ( context ) . selectAttachment ,
variant: ' bodyText ' ,
textAlign: TextAlign . center ,
child: Container (
padding: EdgeInsets . only ( left: 16 , right: 16 , bottom: 15 , top: 15 ) ,
alignment: Alignment . center ,
decoration: BoxDecoration (
borderRadius: BorderRadius . circular ( 15 ) ,
color: Colors . white ,
border: Border . all (
color: Color ( 0xffefefef ) ,
width: 1 ,
) ,
] ,
) ,
child: Row (
crossAxisAlignment: CrossAxisAlignment . center ,
mainAxisAlignment: MainAxisAlignment . center ,
children: < Widget > [
Icon (
Icons . attach_file ,
color: Color ( 0xff2B353E ) ,
) ,
Text (
TranslationBase . of ( context ) . selectAttachment ,
style: TextStyle ( fontSize: 16 , fontWeight: FontWeight . w600 , color: Color ( 0xff2B353E ) , letterSpacing: - 0.64 , height: 23 / 16 ) ,
) ,
] ,
) ,
) ,
) ,
) ,
) ,
. . . List . generate (
images . length ,
( index ) = > Container (
margin: EdgeInsets . all ( 10 ) ,
padding: EdgeInsets . all ( 8.0 ) ,
child: Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: < Widget > [
Row (
crossAxisAlignment: CrossAxisAlignment . start ,
. . . List . generate (
images . length ,
( index ) = > Container (
margin: EdgeInsets . all ( 10 ) ,
padding: EdgeInsets . all ( 8.0 ) ,
child: Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: < Widget > [
Icon ( FontAwesomeIcons . paperclip ) ,
SizedBox (
width: 8 ,
) ,
Texts (
' image ${ index + 1 } .png ' ,
Row (
crossAxisAlignment: CrossAxisAlignment . start ,
children: < Widget > [
Icon ( FontAwesomeIcons . paperclip ) ,
SizedBox (
width: 8 ,
) ,
Texts (
' image ${ index + 1 } .png ' ,
) ,
] ,
) ,
InkWell (
onTap: ( ) {
setState ( ( ) {
images . remove ( images [ index ] ) ;
} ) ;
} ,
child: Icon (
FontAwesomeIcons . trashAlt ,
color: Colors . red [ 300 ] ,
) )
] ,
) ,
InkWell (
onTap: ( ) {
setState ( ( ) {
images . remove ( images [ index ] ) ;
} ) ;
} ,
child: Icon (
FontAwesomeIcons . trashAlt ,
color: Colors . red [ 300 ] ,
) )
] ,
) ,
) ) ,
SizedBox (
height: 100 ,
) ) ,
] ,
) ,
] ,
) ,
) ,
) ,
) ,
Container (
color: Colors . white ,
padding: EdgeInsets . only ( top: 16 , bottom: 16 , right: 21 , left: 21 ) ,
child: DefaultButton (
TranslationBase . of ( context ) . send ,
( titleController . text . toString ( ) . isEmpty | | messageController . text . toString ( ) . isEmpty )
? null
: ( ) {
final form = formKey . currentState ;
if ( form . validate ( ) ) {
GifLoaderDialogUtils . showMyDialog ( context ) ;
model
. sendCOCItem (
title: titleController . text ,
attachment: images . length > 0 ? images [ 0 ] : " " ,
details: messageController . text ,
cOCTypeName: getCOCName ( ) ,
appointHistory: messageType = = MessageType . ComplaintOnAnAppointment ? appointHistory : null )
. then ( ( value ) {
if ( value ) {
setState ( ( ) {
titleController . text = " " ;
messageController . text = " " ;
images = [ ] ;
} ) ;
setMessageType ( MessageType . NON ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
AppToast . showSuccessToast ( message: TranslationBase . of ( context ) . yourFeedback ) ;
} else {
AppToast . showErrorToast ( message: model . error ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
}
} ) ;
}
} ,
color: Color ( 0xffD02127 ) ,
textColor: ( titleController . text . toString ( ) . isEmpty | | messageController . text . toString ( ) . isEmpty ) ? Color ( 0xff000000 ) : Colors . white ,
disabledColor: Color ( 0xffEAEAEA ) ,
) ,
) ,
] ,
) ,
bottomSheet: Container (
height: 80 ,
width: double . infinity ,
padding: EdgeInsets . all ( 15.0 ) ,
child: Center (
child: Container (
height: MediaQuery . of ( context ) . size . height * 0.1 ,
child: SecondaryButton (
label: TranslationBase . of ( context ) . send ,
textColor: Colors . white ,
disabled: ( titleController . text . toString ( ) . isEmpty | |
messageController . text . toString ( ) . isEmpty ) ,
onTap: ( ) {
final form = formKey . currentState ;
if ( form . validate ( ) ) {
GifLoaderDialogUtils . showMyDialog ( context ) ;
model
. sendCOCItem (
title: titleController . text ,
attachment: images . length > 0 ? images [ 0 ] : " " ,
details: messageController . text ,
cOCTypeName: getCOCName ( ) ,
appointHistory: messageType = =
MessageType . ComplaintOnAnAppointment
? appointHistory
: null )
. then ( ( value ) {
if ( value ) {
setState ( ( ) {
titleController . text = " " ;
messageController . text = " " ;
images = [ ] ;
} ) ;
setMessageType ( MessageType . NON ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
AppToast . showSuccessToast (
message: TranslationBase . of ( context ) . yourFeedback ) ;
} else {
AppToast . showErrorToast ( message: model . error ) ;
GifLoaderDialogUtils . hideDialog ( context ) ;
}
} ) ;
}
} ,
) ,
) ;
}
Widget inputWidget ( String _labelText , String _hintText , TextEditingController _controller , { VoidCallback suffixTap , bool isEnable = true , bool hasSelection = false , int lines } ) {
return Container (
padding: EdgeInsets . only ( left: 16 , right: 16 , bottom: 15 , top: 15 ) ,
alignment: Alignment . center ,
decoration: BoxDecoration (
borderRadius: BorderRadius . circular ( 15 ) ,
color: Colors . white ,
border: Border . all (
color: Color ( 0xffefefef ) ,
width: 1 ,
) ,
) ,
child: InkWell (
onTap: hasSelection ? ( ) { } : null ,
child: Row (
children: [
Expanded (
child: Column (
mainAxisSize: MainAxisSize . min ,
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
Text (
_labelText ,
style: TextStyle (
fontSize: 11 ,
fontWeight: FontWeight . w600 ,
color: Color ( 0xff2B353E ) ,
letterSpacing: - 0.44 ,
) ,
) ,
TextField (
enabled: isEnable ,
scrollPadding: EdgeInsets . zero ,
keyboardType: TextInputType . number ,
controller: _controller ,
maxLines: lines ,
onChanged: ( value ) = > { setState ( ( ) { } ) } ,
style: TextStyle (
fontSize: 14 ,
height: 21 / 14 ,
fontWeight: FontWeight . w400 ,
color: Color ( 0xff2B353E ) ,
letterSpacing: - 0.44 ,
) ,
decoration: InputDecoration (
isDense: true ,
hintText: _hintText ,
hintStyle: TextStyle (
fontSize: 14 ,
height: 21 / 14 ,
fontWeight: FontWeight . w400 ,
color: Color ( 0xff575757 ) ,
letterSpacing: - 0.56 ,
) ,
suffixIconConstraints: BoxConstraints ( minWidth: 50 ) ,
suffixIcon: suffixTap = = null ? null : IconButton ( icon: Icon ( Icons . mic , color: Color ( 0xff2E303A ) ) , onPressed: suffixTap ) ,
/ / prefixIconConstraints: BoxConstraints ( minWidth: 50 ) ,
/ / prefixIcon: suffix = = null
/ / ? null
/ / : Text (
/ / " + " + suffix ,
/ / style: TextStyle (
/ / fontSize: 14 ,
/ / height: 21 / 14 ,
/ / fontWeight: FontWeight . w500 ,
/ / color: Color ( 0xff2E303A ) ,
/ / letterSpacing: - 0.56 ,
/ / ) ,
/ / ) ,
contentPadding: EdgeInsets . zero ,
border: InputBorder . none ,
focusedBorder: InputBorder . none ,
enabledBorder: InputBorder . none ,
) ,
) ,
] ,
) ,
) ,
) ,
if ( hasSelection ) Icon ( Icons . keyboard_arrow_down_outlined ) ,
] ,
) ,
) ,
) ;
@ -595,10 +596,8 @@ class _SendFeedbackPageState extends State<SendFeedbackPage> {
openSpeechReco ( ) async {
new RoboSearch ( context: context ) . showAlertDialog ( context ) ;
_currentLocaleId =
TranslationBase . of ( AppGlobal . context ) . locale . languageCode ;
bool available = await speech . initialize (
onStatus: statusListener , onError: errorListener ) ;
_currentLocaleId = TranslationBase . of ( AppGlobal . context ) . locale . languageCode ;
bool available = await speech . initialize ( onStatus: statusListener , onError: errorListener ) ;
if ( available ) {
speech . listen (
onResult: resultListener ,
@ -641,8 +640,7 @@ class _SendFeedbackPageState extends State<SendFeedbackPage> {
}
Future < void > initSpeechState ( ) async {
bool hasSpeech = await speech . initialize (
onError: errorListener , onStatus: statusListener ) ;
bool hasSpeech = await speech . initialize ( onError: errorListener , onStatus: statusListener ) ;
print ( hasSpeech ) ;
if ( ! mounted ) return ;
}
@ -652,9 +650,7 @@ class FeedbackTypeDialog extends StatefulWidget {
final Function ( MessageType ) onValueSelected ;
final MessageType messageTypeDialog ;
const FeedbackTypeDialog (
{ Key key , this . onValueSelected , this . messageTypeDialog = MessageType . NON } )
: super ( key: key ) ;
const FeedbackTypeDialog ( { Key key , this . onValueSelected , this . messageTypeDialog = MessageType . NON } ) : super ( key: key ) ;
@ override
State createState ( ) = > new FeedbackTypeDialogState ( ) ;
@ -699,14 +695,12 @@ class FeedbackTypeDialogState extends State<FeedbackTypeDialog> {
child: InkWell (
onTap: ( ) = > setMessageDialogType ( MessageType . NON ) ,
child: ListTile (
title:
Texts ( TranslationBase . of ( context ) . notClassified ) ,
title: Texts ( TranslationBase . of ( context ) . notClassified ) ,
leading: Radio (
value: MessageType . NON ,
groupValue: messageTypeDialog ,
activeColor: Theme . of ( context ) . primaryColor ,
onChanged: ( MessageType value ) = >
setMessageDialogType ( value ) ,
onChanged: ( MessageType value ) = > setMessageDialogType ( value ) ,
) ,
) ,
) ,
@ -721,17 +715,14 @@ class FeedbackTypeDialogState extends State<FeedbackTypeDialog> {
Expanded (
flex: 1 ,
child: InkWell (
onTap: ( ) = > setMessageDialogType (
MessageType . ComplaintOnAnAppointment ) ,
onTap: ( ) = > setMessageDialogType ( MessageType . ComplaintOnAnAppointment ) ,
child: ListTile (
title:
Texts ( TranslationBase . of ( context ) . complainAppo ) ,
title: Texts ( TranslationBase . of ( context ) . complainAppo ) ,
leading: Radio (
value: MessageType . ComplaintOnAnAppointment ,
groupValue: messageTypeDialog ,
activeColor: Theme . of ( context ) . primaryColor ,
onChanged: ( MessageType value ) = >
setMessageDialogType ( value ) ,
onChanged: ( MessageType value ) = > setMessageDialogType ( value ) ,
) ,
) ,
) ,
@ -746,17 +737,14 @@ class FeedbackTypeDialogState extends State<FeedbackTypeDialog> {
Expanded (
flex: 1 ,
child: InkWell (
onTap: ( ) = > setMessageDialogType (
MessageType . ComplaintWithoutAppointment ) ,
onTap: ( ) = > setMessageDialogType ( MessageType . ComplaintWithoutAppointment ) ,
child: ListTile (
title: Texts (
TranslationBase . of ( context ) . complainWithoutAppo ) ,
title: Texts ( TranslationBase . of ( context ) . complainWithoutAppo ) ,
leading: Radio (
value: MessageType . ComplaintWithoutAppointment ,
groupValue: messageTypeDialog ,
activeColor: Theme . of ( context ) . primaryColor ,
onChanged: ( MessageType value ) = >
setMessageDialogType ( value ) ,
onChanged: ( MessageType value ) = > setMessageDialogType ( value ) ,
) ,
) ,
) ,
@ -778,8 +766,7 @@ class FeedbackTypeDialogState extends State<FeedbackTypeDialog> {
value: MessageType . Question ,
groupValue: messageTypeDialog ,
activeColor: Theme . of ( context ) . primaryColor ,
onChanged: ( MessageType value ) = >
setMessageDialogType ( value ) ,
onChanged: ( MessageType value ) = > setMessageDialogType ( value ) ,
) ,
) ,
) ,
@ -794,16 +781,14 @@ class FeedbackTypeDialogState extends State<FeedbackTypeDialog> {
Expanded (
flex: 1 ,
child: InkWell (
onTap: ( ) = >
setMessageDialogType ( MessageType . Compliment ) ,
onTap: ( ) = > setMessageDialogType ( MessageType . Compliment ) ,
child: ListTile (
title: Texts ( TranslationBase . of ( context ) . compliment ) ,
leading: Radio (
value: MessageType . Compliment ,
groupValue: messageTypeDialog ,
activeColor: Theme . of ( context ) . primaryColor ,
onChanged: ( MessageType value ) = >
setMessageDialogType ( value ) ,
onChanged: ( MessageType value ) = > setMessageDialogType ( value ) ,
) ,
) ,
) ,
@ -818,16 +803,14 @@ class FeedbackTypeDialogState extends State<FeedbackTypeDialog> {
Expanded (
flex: 1 ,
child: InkWell (
onTap: ( ) = >
setMessageDialogType ( MessageType . Suggestion ) ,
onTap: ( ) = > setMessageDialogType ( MessageType . Suggestion ) ,
child: ListTile (
title: Texts ( TranslationBase . of ( context ) . suggestion ) ,
leading: Radio (
value: MessageType . Suggestion ,
groupValue: messageTypeDialog ,
activeColor: Theme . of ( context ) . primaryColor ,
onChanged: ( MessageType value ) = >
setMessageDialogType ( value ) ,
onChanged: ( MessageType value ) = > setMessageDialogType ( value ) ,
) ,
) ,
) ,