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