How can I make ElevatedButton look as if it is disabled but still have onPressed
pointing to a function, so it appears disabled but if you press it you get a dialog displaying a text explaining how you have that functionality enabled?
CodePudding user response:
You can wrap the ElevatedButton
with a GestureDetector
and use GestureDetector.onTap
instead of ElevatedButton.onPressed
. If the button is disabled, i.e. onPressed == null
, tap events on it passthrough to the GestureDetector
. Otherwise, the button gets the onPressed
event. Something like the following:
GestureDetector(
onTap: () {
print('GestureDetector.onTap');
// Show the dialog explaining why the button is disabled.
},
child: ElevatedButton(
onPressed: isDisabled
? null
: () {
print('ElevatedButton.onPressed');
},
child: const Text('Test'),
),
),
CodePudding user response:
Adding splashFactory to style removes the spalsh-effect on press. Like this:
ElevatedButton(
onPressed: onPressed,
child: Text(buttonText),
style: ElevatedButton.styleFrom(
minimumSize: const Size.fromHeight(40),
splashFactory: NoSplash.splashFactory,
primary: buttonColor,
),