21
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutter の Text 、赤文字に黄色のアンダーラインってなんなの?

Posted at

Flutter の Text ウィジェットについてのお話です。

例えばサンプルプログラム。

/// 全体的にコメントも省略
// 省略
body: Center(
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      Text(
        'You have pushed the button this many times:',
      ),
      Text(
        '$_counter',
        style: Theme.of(context).textTheme.display1,
      ),
    ],
  ),
),
// 省略

こんな感じに実装されていて、 Text ウィジェットは二箇所で利用されています。
sample_app.png
サンプルアプリを起動したときの表示はこうです。

Text に手を加えてみる

いざアプリ開発に取り掛かると、サンプルアプリのようにシンプルではなく様々な装飾を行います。

今回は二箇所の Text をドラッグできるようにしてみましょう。

/// 全体的にコメントも省略
// 省略
body: Center(
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      Draggable(
        child: Text(
          'You have pushed the button this many times:',
        ),
        feedback: Text(
          'You have pushed the button this many times:',
        ),
      ),
      Draggable(
        child: Text(
          '$_counter',
          style: Theme.of(context).textTheme.display1,
        ),
        feedback: Text(
          '$_counter',
          style: Theme.of(context).textTheme.display1,
        ),
      ),
    ],
  ),
),
// 省略

Draggable を使ってそれぞれをドラッグ可能な Text にしてみました。

じゃあ動作を確認してみます。
draggable1.gif
いいですね!

もう一方のほうの Text も確認してみます。
draggable2.gif
ふぁあああああああ!?

なんだこのビビッドにもほどがあるテーマは……。

何が起こったのか?

実はこの派手なテーマは、 DefaultTextStyle クラスのデフォルト値のようです。

シンプルに Text を利用している際はきれいに表示されていても、ダイアログなどを始め、他のウィジェットでラップした場合などにこのテーマで表示されてしまうことが 稀によくあります

解決方法

テーマをちゃんと設定してやる

カウンター( 0 と表示されている Text )側のテーマが崩れていないのを見てもわかるように、自ら Text にテーマを指定してやることでこの現象を防ぐことが可能です。

その場合、フォントサイズやカラーの他に decoration: TextDecoration.none を指定して 黄色の二重下線 を消すのを忘れないようにしましょう。

アプリケーションのテーマでラップしてやる

これは知らなかったのですが、 MaterialApp の場合、 Material ウィジェットで Text をラップしてやると、このテーマが変わってしまう現象を防ぐことができるようです。

Material(
  child: Text(
    'You have pushed the button this many times:',
  ),
),

こんな感じでラップしてやれば OK です!
draggable3.gif
バッチリですね!

まとめ

Text がいきなり 赤字黄色のアンダーライン で表示されると焦りますよね :sweat_smile:
(ぼくは焦りましたw)

Text にテーマを指定する方法は知っていたのですが、もともと指定していなかったところに追加するのは違和感を感じていましたので、 Material でラップする方法を知れてよかったです。

日本語の情報も少なめだったので、困っている人の手助けになれば幸いです :yum:

参考にしたサイト

:link:Yellow lines under Text Widgets in Flutter? | stackoverflow

21
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?