フラッターでテキストに下線を引く方法


118

Textウィジェット内のフラッターでテキストに下線を引く方法は?

fontStyleプロパティ内に下線が見つからないようですTextStyle

回答:


271

すべてに下線を引くときは、テキストウィジェットでTextStyleを設定できます。

ここに画像の説明を入力してください

Text(
  'Hello world',
  style: TextStyle(
    decoration: TextDecoration.underline,
  ),
)

テキストの一部に下線を引くだけの場合は、Text.rich()(またはリッチテキストウィジェット)を使用して、文字列をスタイルを追加できる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、リストには、それに続くスタイル(そしておそらくunstyled)のテキストが含まれています。textスタイル付きのテキストから始めたい場合は、空の文字列を使用できます。

TextDecorationStyleを追加して、装飾の外観を変更することもできます。ここに破線があります:

ここに画像の説明を入力してください

Text(
  'Hello world',
  style: TextStyle(
    decoration: TextDecoration.underline,
    decorationStyle: TextDecorationStyle.dashed,
  ),
)

およびTextDecorationStyle.dotted

ここに画像の説明を入力してください

およびTextDecorationStyle.double

ここに画像の説明を入力してください

およびTextDecorationStyle.wavy

ここに画像の説明を入力してください


11
単語と下線の間にスペースを追加することはできますか?
felangga

@felangga、それは良い質問です。それはおそらくベースラインに関連しているでしょう。それはもっと探求したいことですが、どうすればいいのかまだわかりません。ソースコードを調べて、理解できたら教えてください。
Suragch

テキストと下線の間にスペースを追加することには未解決の問題があります。 github.com/flutter/flutter/issues/30541
ジョー・ミュラー

テキストと下線の間にスペースを増やしてみましょう2つのソリューションについては、以下の私の答えを参照してください@felangga
ジョー・ミュラー

努力と説明に感謝
Sana'aAl-ahdal20年

34

あなたは適用することによって、それを行うdecoration: TextDecoration.underlineTextStyleしますText

テーマの例:

          Text(
            "text",
            style: Theme
                .of(context)
                .accentTextTheme
                .subhead
                .copyWith(decoration: TextDecoration.underline),
          )

基本的な例:

          Text(
            "text",
            style: TextStyle(decoration: TextDecoration.underline),
          )

3

TextDecorationをスタイルで使用して、特定のテキストに下線を引くことができます。

例えば

Text(
    "Your text here",
    style: TextStyle(
        decoration: TextDecoration.underline),
    )
)

3

エキサイティングなソリューション
テキストと下線の間の距離を制御したい場合は、このハックを使用できます。つまり、Colors.transparentを使用して実際のテキストを非表示にしてから、テキストの下線の上に浮かぶオフセットシャドウを表示します。

        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とそのパディングプロパティを使用する型破りなアプローチを使用する必要があります。

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の問題に注目してください。


影を使用したさらに別の醜い解決策。最終的なanswerStyle = TextStyle(装飾:TextDecoration.underline、decorationStyle:TextDecorationStyle.dashed、color:Colors.transparent、decorationColor:Colors.black、shadows:[Shadow(color:Colors.black、offset:Offset(0、-5)) ]、);
SathishKumar20年

それはとても素晴らしい感謝です
rounpaleum20年

@ジョー、とても賢い!私はあなたの解決策の一部を盗み、ここで私の問題に適用しました(あなたに信用を与えようとしましたが、それはあなたのプロフィールにリンクしていませんでした):stackoverflow.com/q/65293992/1459653ありがとう!
MarkGavagan20年

2

例えば

Text(
  "Terms and Condition",
  style: TextStyle(
    decoration:
        TextDecoration.underline,
    height: 1.5,
    fontSize: 15,
    fontWeight: FontWeight.bold,
    fontFamily: 'Roboto-Regular',
  ),
),
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.