Flutter TextButton 填充
Flutter TextButton padding
随着 Flutter 2.0 版本的发布,FlatButton
已被 TextButton
取代。
因此,填充 属性 不再直接可用,而是作为 ButtonStyle
属性.
我的问题是,由于 EdgeInsets
不再可用,我该如何设置它?
TextButton(
style: new ButtonStyle(
padding: ???,
),
//padding: const EdgeInsets.all(0), //NOT AVAILABLE
child: Text("Support", style: Theme.of(context).textTheme.headline2),
onPressed: () => {Navigator.pushNamed(context, SupportScreen().routeName)},
),
你可以这样做,例如:
TextButton(
onPressed: () {},
child: Text('Hello World'),
style: TextButton.styleFrom(
padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
primary: Colors.teal,
),
),
TextButton.styleFrom() 参考文档:
https://api.flutter.dev/flutter/material/TextButton-class.html
使用新按钮的示例和解决方法:
https://www.woolha.com/tutorials/flutter-using-textbutton-widget-examples
您可以为 MaterialStates 设置不同的值:
class TextButtonPadding extends StatelessWidget {
EdgeInsets _getPadding(Set<MaterialState> states) {
const interactiveStates = <MaterialState>{
MaterialState.pressed,
MaterialState.hovered,
};
if (states.any(interactiveStates.contains)) {
return EdgeInsets.all(30.0);
}
return EdgeInsets.zero;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: TextButton(
style: ButtonStyle(
padding: MaterialStateProperty.resolveWith(_getPadding),
),
onPressed: () {},
child: Text(
'Text Button',
),
),
),
);
}
}
或为所有 MaterialStates 设置一个值:
class TextButtonPadding extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: TextButton(
style: ButtonStyle(
padding: MaterialStateProperty.all(
EdgeInsets.all(30.0),
),
),
onPressed: () {},
child: Text(
'Text Button',
),
),
),
);
}
}
请看https://api.flutter.dev/flutter/material/MaterialStateProperty-class.html
这是我的 TextButton 代码
Container(
child: TextButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all<Color>(Colors.green),
padding: MaterialStateProperty.all<EdgeInsets>(
EdgeInsets.all(10)),
),
child: Text(
"Login",
style: TextStyle(
height: 1.0,
fontSize: 30,
color: Colors.white,
),
),
onPressed: () => {print("login")},
),
),
看到我为 TextButton 小部件使用了样式 属性 来插入填充和背景
对于两者,我都使用 MaterialStateProperty.all
随着 Flutter 2.0 版本的发布,FlatButton
已被 TextButton
取代。
因此,填充 属性 不再直接可用,而是作为 ButtonStyle
属性.
我的问题是,由于 EdgeInsets
不再可用,我该如何设置它?
TextButton(
style: new ButtonStyle(
padding: ???,
),
//padding: const EdgeInsets.all(0), //NOT AVAILABLE
child: Text("Support", style: Theme.of(context).textTheme.headline2),
onPressed: () => {Navigator.pushNamed(context, SupportScreen().routeName)},
),
你可以这样做,例如:
TextButton(
onPressed: () {},
child: Text('Hello World'),
style: TextButton.styleFrom(
padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
primary: Colors.teal,
),
),
TextButton.styleFrom() 参考文档: https://api.flutter.dev/flutter/material/TextButton-class.html
使用新按钮的示例和解决方法: https://www.woolha.com/tutorials/flutter-using-textbutton-widget-examples
您可以为 MaterialStates 设置不同的值:
class TextButtonPadding extends StatelessWidget {
EdgeInsets _getPadding(Set<MaterialState> states) {
const interactiveStates = <MaterialState>{
MaterialState.pressed,
MaterialState.hovered,
};
if (states.any(interactiveStates.contains)) {
return EdgeInsets.all(30.0);
}
return EdgeInsets.zero;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: TextButton(
style: ButtonStyle(
padding: MaterialStateProperty.resolveWith(_getPadding),
),
onPressed: () {},
child: Text(
'Text Button',
),
),
),
);
}
}
或为所有 MaterialStates 设置一个值:
class TextButtonPadding extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: TextButton(
style: ButtonStyle(
padding: MaterialStateProperty.all(
EdgeInsets.all(30.0),
),
),
onPressed: () {},
child: Text(
'Text Button',
),
),
),
);
}
}
请看https://api.flutter.dev/flutter/material/MaterialStateProperty-class.html
这是我的 TextButton 代码
Container(
child: TextButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all<Color>(Colors.green),
padding: MaterialStateProperty.all<EdgeInsets>(
EdgeInsets.all(10)),
),
child: Text(
"Login",
style: TextStyle(
height: 1.0,
fontSize: 30,
color: Colors.white,
),
),
onPressed: () => {print("login")},
),
),
看到我为 TextButton 小部件使用了样式 属性 来插入填充和背景 对于两者,我都使用 MaterialStateProperty.all