質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

1745閲覧

flutterのテキスト折り返し方法について

退会済みユーザー

退会済みユーザー

総合スコア0

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2023/02/07 12:06

編集2023/02/08 13:39

実現したいこと

初めてflutterを触ってますが、テキストの折り返しがうまくできません。
下記のコードで実装しておりますが、テキストが見切れていエラーが出てしまいます。
maxLinesとoverflowを指定しますが、こちらの原因がわかりません。
どうかわかりますでしょうか。。。。

発生している問題・エラーメッセージ

════════ Exception caught by rendering library ═════════════════════════════════ A RenderFlex overflowed by 704 pixels on the right. The relevant error-causing widget was Row

該当のソースコード

dart

1child: Row( 2 children: [ 3 Expanded( 4 child: Container( 5 height: 150, 6 decoration: BoxDecoration(color: Colors.yellow, border: Border.all(color: Colors.black, width: 0.5)), 7 child: Row( 8 children: [ 9 Container( 10 margin: const EdgeInsets.all(10), 11 width: 150, 12 height: 150, 13 decoration: BoxDecoration( 14 border: Border.all(color: Colors.black, width: 0.5), 15 ), 16 ), 17 // TODO: 折り返す処理を加える 18 const Text( 19 "testtesttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttest", 20 style: TextStyle(fontSize: 20), 21 maxLines: 3, 22 overflow: TextOverflow.ellipsis, 23 ), 24 ], 25 ), 26 ), 27 ), 28 ], 29 ),

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

1

ベストアンサー

TextをExpandedでラッピングする。

dart

1 const Expanded( 2 child: Text( 3 "testtesttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttestttest", 4 style: TextStyle(fontSize: 20), 5 maxLines: 3, 6 overflow: TextOverflow.ellipsis, 7 ), 8 ),

実行環境不明ですが、VSCodeでデバッグ実行するとデバッグコンソールに問題に関する詳細のメッセージが出ます。
そこに原因と対策が示されています。

なんとなく意訳すると以下の様な感じです。

  • 原因
    Rowの中にTextが平置きされているので、とりあえずTextの横幅はText自身に決めさせている。
    Textはその文字を表示するため横幅いっぱいまで伸ばした。
    そしてRowの中に配置しようとしたら、表示エリアからはみ出してしまった。

  • 対策
    TextをExpandedなどの親(Row)の大きさ基準のサイズ決定をするウィジェットの子供にする。
    もしくはClipRectなどでクリッピングする。

投稿2023/02/07 23:47

ta.fu

総合スコア1742

退会済みユーザー😄を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/02/08 13:44

ご回答ありがとうございます。 ご回答いただき、ありがとうございます。 ※エラー文について、再度修正しました。 デバックコンソール上では、7行目のRowがエラーと表示されています。 上記の参考コードについては、TextをExpandedで囲った際でも見切れてしまいますが、 Text自身の幅を指定した方がいいんでしょうか?
ta.fu

2023/02/08 23:37

overflow: TextOverflow.ellipsisの設定をしているので、Textの文字列がTextウィジェットのmaxLinesと横幅から計算される表示領域内に納めることが出来ない場合、納められない文字部分については「...」と以降省略的な文字列に置換されて表示されるのは、仕様です。 物理的な表示領域が広大なのであれば、Textの高さや幅を大きくしまたmaxLinesも大きくすることで、指定された文字列をすべて表示させるということもできると思いますが、実際の表示領域というのは制限があることが普通です。 そういう意味で、Textの表示の仕様を踏まえ、指定されている文字列をどのようにTextの表示領域に納めるようにするのか決めるのはあなた自身です。 今回のようなものは、想定する表示領域に納めることが出来ない文字列が指定される可能性がある場合には、その終端が「...」となるellipsis指定をするのは妥当だと、自分ではそう判断します。 後「見切れる」と文章で書かれていますが、UI系の質問は、要求する表示と実際の表示をキャプチャなどで提示するのが良いです。人によりその文章から受け取るニュアンスが異なる場合が結構あるので。 今回のコメントも、わざわざellipsisとパラメータで指定しているのに、「見切れる」と書いて仕様通りではないような意味合いで書かれていたように思い、終端が「...」になっている状態以外なことが起こっているのではないかと感じてしまいました。
退会済みユーザー

退会済みユーザー

2023/02/09 12:51

ご回答、ご指摘ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問