如何在颤振文本小部件内下划线文本?
我似乎无法在TextStyle的fontStyle属性内找到下划线
如何在颤振文本小部件内下划线文本?
我似乎无法在TextStyle的fontStyle属性内找到下划线
当前回答
在一行中控制文本和下划线之间的距离
在Joe Muller的回答的基础上,有一种扩展方法,允许控制文本/下划线距离,而不会使小部件树的代码变得混乱。它是这样使用的:
Widget build(BuildContext context) {
final myStyle = Theme.of(context).textTheme.headline4;
return Text(
'Hello, World!',
//------------------------------------------------
// simply apply the underlined method to the style
style: myStyle?.underlined(distance: 2),
//------------------------------------------------
);
}
这是扩展:
extension TextStyleX on TextStyle {
/// A method to underline a text with a customizable [distance] between the text
/// and underline. The [color], [thickness] and [style] can be set
/// as the decorations of a [TextStyle].
TextStyle underlined({
Color? color,
double distance = 1,
double thickness = 1,
TextDecorationStyle style = TextDecorationStyle.solid,
}) {
return copyWith(
shadows: [
Shadow(
color: this.color ?? Colors.black,
offset: Offset(0, -distance),
)
],
color: Colors.transparent,
decoration: TextDecoration.underline,
decorationThickness: thickness,
decorationColor: color ?? this.color,
decorationStyle: style,
);
}
}
扩展还允许控制下划线的颜色,厚度和风格,就像任何其他下划线装饰。看看这个达特pad中一个更完整的例子。
这仍然是一个hack,但它允许在等待Flutter团队修复时保持小部件树的代码干净。
其他回答
下面是一个简单的代码
Text(
'Welcome to Flutter',
style: TextStyle(decoration:TextDecoration.underline,),
),
您可以使用decorationStyle来定制它
Text(
'Welcome to Flutter',
style: TextStyle(
fontSize: 24,
decoration: TextDecoration.underline,
decorationStyle: TextDecorationStyle.double,
),
),
以下是其他TextDecorationStyle值:
TextDecorationStyle.dashed TextDecorationStyle.dotted TextDecorationStyle.double TextDecorationStyle.wavy
例如
Text(
"Terms and Condition",
style: TextStyle(
decoration:
TextDecoration.underline,
height: 1.5,
fontSize: 15,
fontWeight: FontWeight.bold,
fontFamily: 'Roboto-Regular',
),
),
你可以在样式中使用TextDecoration来强调给定的文本。
例如
Text(
"Your text here",
style: TextStyle(
decoration: TextDecoration.underline),
)
)
激动人心的解决方案 如果你想控制文本和下划线之间的距离,你可以使用这个方法。简而言之,使用Colors隐藏实际文本。然后在文本下划线上方显示偏移阴影。
Text(
"Forgot Password?",
style: TextStyle(
shadows: [
Shadow(
color: Colors.black,
offset: Offset(0, -5))
],
color: Colors.transparent,
decoration:
TextDecoration.underline,
decorationColor: Colors.blue,
decorationThickness: 4,
decorationStyle:
TextDecorationStyle.dashed,
),
)
正如你将在下面看到的,如果你使用框外文本下划线,它会粘在文本的底部,看起来有点难看,
无聊的解决方案
使用文本小部件,您可以添加自定义样式和颜色的下划线:
Text(
"Forgot Password?",
style: TextStyle(
decoration: TextDecoration.underline,
decorationColor: Colors.blue,
decorationThickness: 4,
decorationStyle: TextDecorationStyle.dashed,
),
)
我使用这种方法的唯一问题是,您无法控制下划线与文本底部的距离。
如果你想增加间距,你将不得不使用一种非常规的方法,使用容器和它的padding属性。
Container(
padding: EdgeInsets.only(
bottom: 5, // Space between underline and text
),
decoration: BoxDecoration(
border: Border(bottom: BorderSide(
color: Colors.amber,
width: 1.0, // Underline thickness
))
),
child: Text(
"Forgot Password?",
style: TextStyle(
color: Colors.black,
),
),
)
请关注这个GitHub问题,以获得更简单的解决方案。
在一行中控制文本和下划线之间的距离
在Joe Muller的回答的基础上,有一种扩展方法,允许控制文本/下划线距离,而不会使小部件树的代码变得混乱。它是这样使用的:
Widget build(BuildContext context) {
final myStyle = Theme.of(context).textTheme.headline4;
return Text(
'Hello, World!',
//------------------------------------------------
// simply apply the underlined method to the style
style: myStyle?.underlined(distance: 2),
//------------------------------------------------
);
}
这是扩展:
extension TextStyleX on TextStyle {
/// A method to underline a text with a customizable [distance] between the text
/// and underline. The [color], [thickness] and [style] can be set
/// as the decorations of a [TextStyle].
TextStyle underlined({
Color? color,
double distance = 1,
double thickness = 1,
TextDecorationStyle style = TextDecorationStyle.solid,
}) {
return copyWith(
shadows: [
Shadow(
color: this.color ?? Colors.black,
offset: Offset(0, -distance),
)
],
color: Colors.transparent,
decoration: TextDecoration.underline,
decorationThickness: thickness,
decorationColor: color ?? this.color,
decorationStyle: style,
);
}
}
扩展还允许控制下划线的颜色,厚度和风格,就像任何其他下划线装饰。看看这个达特pad中一个更完整的例子。
这仍然是一个hack,但它允许在等待Flutter团队修复时保持小部件树的代码干净。