Reputation: 2943
I'm trying to migrate my FlatButton
to TextButton
. Since FlatButtons
are deprecated since I upgraded my flutter version. I'm currently struggling with adapting the background color.
Old button:
FlatButton(
height: height,
onPressed: onPressed,
shape: baseButtonBorder,
color: Colors.red,
child: Text(label, style: TextStyle(color: fontColor, fontWeight: boldLabel ? FontWeight.bold : FontWeight.normal)),
)`
New Button:
TextButton(
onPressed: onPressed,
style: ButtonStyle(backgroundColor: Colors.red), // <-- Does not work
child: Text(label, style: TextStyle(color: fontColor, fontWeight: boldLabel ? FontWeight.bold : FontWeight.normal)),
),
The flat button does not have a color
attribute so I tried to use the style
attribute and add a ButtonStyle
. How ever dart says:
The argument type 'MaterialColor' can't be assigned to the parameter type 'MaterialStateProperty<Color>'.
How can I style my TextButton
with the color red like I used to do with my FlatButton
? Do I need to create a MaterialStateProperty<Color>
with red?
Upvotes: 61
Views: 80214
Reputation: 2471
backgroundColor
property is MaterialStateProperty<Color?>
type. You can check in Flutter documentation.
So you have to use MaterialStateProperty
class to apply color. A quick example :
TextButton(
child: Text('test'),
style: ButtonStyle(backgroundColor: MaterialStateProperty.all(Colors.red)),
onPressed: () {},
),
Since version 3.0.1, we can use MaterialStatePropertyAll
as const
.
So it's a better approach, to use it :
TextButton(
child: Text('test'),
style: const ButtonStyle(
backgroundColor: MaterialStatePropertyAll(Colors.red),
),
onPressed: () {},
),
Since version 3.19, MaterialStateProperty
is deprecated. We need to use WidgetStateProperty
instead.
TextButton(
child: Text('test'),
style: const ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.red),
),
onPressed: () {},
),
Upvotes: 121
Reputation: 201
most Easy Way to add a BackGroundColor to Textbutton
TextButton(
style: TextButton.styleFrom(backgroundColor: Colors.red),
),
Upvotes: 3
Reputation: 606
For people looking for a clearer and easier way to do this, you can use TextButton.styleFrom()
. Example:
TextButton(
child: Text('Example'),
onPressed: () {},
style: TextButton.styleFrom(backgroundColor: Colors.red),
)
You can customize almost anything you want in styleFrom. This works for other buttons too, like ElevatedButton
and OutlinedButton
.
Upvotes: 41
Reputation: 702
Try this way,
TextButton(
onPressed: () {},
child: Container(
padding: EdgeInsets.fromLTRB(30, 10, 30, 10),
color: Colors.red,
child: Text(""),
),
)
Upvotes: 3