如何在Text
小部件内的flutter中的文本下划线?
我似乎找不到内在fontStyle
属性的下划线TextStyle
Answers:
强调所有内容时,可以在“文本”小部件上设置TextStyle。
Text(
'Hello world',
style: TextStyle(
decoration: TextDecoration.underline,
),
)
如果只想在文本的下划线,则需要使用Text.rich()
(或RichText小部件)并将字符串拆分为可以添加样式的TextSpans。
Text.rich(
TextSpan(
text: 'Hello ',
style: TextStyle(fontSize: 50),
children: <TextSpan>[
TextSpan(
text: 'world',
style: TextStyle(
decoration: TextDecoration.underline,
)),
// can add more TextSpans here...
],
),
)
TextSpan有点奇怪。该text
参数是默认样式,但是children
列表包含紧随其后的样式(可能是未样式)文本。text
如果要以样式文本开头,可以使用一个空字符串。
您还可以添加TextDecorationStyle来更改装饰的外观。这是破折号:
Text(
'Hello world',
style: TextStyle(
decoration: TextDecoration.underline,
decorationStyle: TextDecorationStyle.dashed,
),
)
和TextDecorationStyle.dotted
:
和TextDecorationStyle.double
:
和TextDecorationStyle.wavy
:
您可以在样式中使用TextDecoration在给定文本下划线。
例如
Text(
"Your text here",
style: TextStyle(
decoration: TextDecoration.underline),
)
)
激动人心的解决方案
如果您想控制文本和下划线之间的距离,可以使用此技巧。简而言之,您可以使用Colors.transparent隐藏实际文本,然后显示一个悬停在Text下划线上方的偏移阴影。
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,
),
)
我对这种方法唯一的问题是,您无法控制下划线距文本底部的距离。
如果要增加间距,则必须使用使用Container及其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问题,以寻求更简单的解决方案。
例如
Text(
"Terms and Condition",
style: TextStyle(
decoration:
TextDecoration.underline,
height: 1.5,
fontSize: 15,
fontWeight: FontWeight.bold,
fontFamily: 'Roboto-Regular',
),
),