Flutter - Bungkus teks pada overflow, seperti menyisipkan elipsis atau fade


122

Saya mencoba membuat garis di mana teks tengah memiliki ukuran maksimum, dan jika konten teks terlalu besar, ukurannya pas.

Saya memasukkan TextOverflow.ellipsisproperti untuk mempersingkat teks dan memasukkan tiga poin ...tetapi tidak berfungsi.

main.dart

import 'package:flutter/material.dart';

void main() {
runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) => new Scaffold(
    appBar: new AppBar(
      backgroundColor: new Color(0xFF26C6DA),
    ),
    body: new ListView  (
      children: <Widget>[
        new Card(
          child: new Container(
            padding: new EdgeInsets.symmetric(horizontal: 16.0, vertical: 18.0),
            child: new Row(
              children: <Widget>[
                new Container(
                  padding: new EdgeInsets.only(right: 24.0),
                  child: new CircleAvatar(
                    backgroundColor: new Color(0xFFF5F5F5),
                    radius: 16.0,
                  )
                ),
                new Container(
                  padding: new EdgeInsets.only(right: 13.0),
                  child: new Text(
                    'Text lar...',
                    overflow: TextOverflow.ellipsis,
                    style: new TextStyle(
                      fontSize: 13.0,
                      fontFamily: 'Roboto',
                      color: new Color(0xFF212121),
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
                new Container(
                  child: new Column(
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: <Widget>[
                      new Row(
                        children: <Widget>[
                          new Text(
                            'Bill  ',
                            style: new TextStyle(
                              fontSize: 12.0,
                              fontFamily: 'Roboto',
                              color: new Color(0xFF9E9E9E)
                            ),
                          ),
                          new Text(
                            '\$ -999.999.999,95',
                            style: new TextStyle(
                              fontSize: 14.0,
                              fontFamily: 'Roboto',
                              color: new Color(0xFF212121)
                            ),
                          ),
                        ],
                      ),
                      new Row(
                        children: <Widget>[
                          new Text(
                            'Limit  ',
                            style: new TextStyle(
                              fontSize: 12.0,
                              fontFamily: 'Roboto',
                              color: new Color(0xFF9E9E9E)
                            ),
                          ),
                          new Text(
                            'R\$ 900.000.000,95',
                            style: new TextStyle(
                              fontSize: 14.0,
                              fontFamily: 'Roboto',
                              color: new Color(0xFF9E9E9E)
                            ),
                          ),
                        ],
                      ),
                    ]
                  )
                )
              ],
            ),
          )
        ),
      ]
    )
  );
}

hasil:

masukkan deskripsi gambar di sini

diharapkan:

masukkan deskripsi gambar di sini

Jawaban:


250

Anda harus membungkus Anda Containerdengan a Flexibleuntuk memberi Rowtahu Anda bahwa Containerboleh saja untuk lebih sempit dari lebar intrinsiknya. Expandedjuga akan bekerja.

tangkapan layar

Flexible(
  child: new Container(
    padding: new EdgeInsets.only(right: 13.0),
    child: new Text(
      'Text largeeeeeeeeeeeeeeeeeeeeeee',
      overflow: TextOverflow.ellipsis,
      style: new TextStyle(
        fontSize: 13.0,
        fontFamily: 'Roboto',
        color: new Color(0xFF212121),
        fontWeight: FontWeight.bold,
      ),
    ),
  ),
),

1
Saya memiliki masalah serupa di Kolom. Pendekatan ini tidak berhasil untuk saya. stackoverflow.com/questions/52206221/…
Michael Tedla

adakah cara kita bisa menerapkan ini di textfield?
mangkool

jika Anda ingin agar teks wrap_content juga menentukan properti fit dengan FlexFit.loose,
martinseal1987

109

Menggunakan Ellipsis

Text(
  "This is a long text",
  overflow: TextOverflow.ellipsis,
),

masukkan deskripsi gambar di sini


Menggunakan Fade

Text(
  "This is a long text",
  overflow: TextOverflow.fade,
  maxLines: 1,
  softWrap: false,
),

masukkan deskripsi gambar di sini


Menggunakan Clip

Text(
  "This is a long text",
  overflow: TextOverflow.clip,
  maxLines: 1,
  softWrap: false,
),

masukkan deskripsi gambar di sini


catatan:

Jika Anda menggunakan Textinside a Row, Anda bisa meletakkan di atas Textinside Expandedseperti:

Expanded(
  child: AboveText(),
)

dapatkah saya menambahkan ketika teks meluap kemudian menambahkan tombol datar seperti ... tautan lebih lanjut
mr.hir

@ mr.hir Maaf saya tidak mengerti.
CopsOnRoad

Ini tidak berfungsi jika Anda memiliki teks dan widget lain (mis. Ikon) di tengah baris.
Lukasz Ciastko

softWrap: falseadalah apa yang saya butuhkan, terima kasih!
coldembrace

Hai, bagaimana jika kita ingin menambahkan, misalnya, halaman baru dengan teks yang meluap?
Nithin Sai

22

Anda dapat menggunakan kode ini yang dipotong untuk menampilkan teks dengan elipsis

Text(
    "Introduction to Very very very long text",
    maxLines: 1,
    overflow: TextOverflow.ellipsis,
    softWrap: false,
    style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
),

11
Harap sertakan juga deskripsi kode ini untuk menjelaskan cara menjawab pertanyaan.
jkdev

14

Anda bisa melakukannya seperti itu

Expanded(
   child: Text(
   'Text',
   overflow: TextOverflow.ellipsis,
   maxLines: 1
   )
)

8

pertama, bungkus Anda Rowatau Columndi widget Flexibleatau Expandedlalu

Text(
    'your long text here',
    overflow: TextOverflow.fade,
    maxLines: 1,
    softWrap: false,
    style: Theme.of(context).textTheme.body1,
)

Ya, ini cara yang benar, pertama-tama membungkus Kolom di dalam yang Diperluas benar-benar berhasil! dan untuk menggunakan Teks di dalam anak Kolom.
ArifMustafa

5

Salah satu cara untuk memperbaiki kelebihan Widget Teks dalam satu baris jika misalnya pesan obrolan bisa menjadi satu baris yang sangat panjang. Anda dapat membuat Container dan BoxConstraint dengan maxWidth di dalamnya.

            Container(
              constraints: BoxConstraints(maxWidth: 200),
                child: Text(
                  (chatName == null) ? " ": chatName,
                  style: TextStyle(
                      fontWeight: FontWeight.w400,
                      color: Colors.black87,
                      fontSize: 17.0),
                )
            ),

ini berhasil untuk saya terima kasih
aida


3
SizedBox(
    width: 200.0,
    child: Text('PRODUCERS CAVITY FIGHTER 50X140g',
                overflow: TextOverflow.ellipsis,
                style: Theme.of(context).textTheme.body2))

Cukup bungkus di dalam widget yang dapat mengambil lebar tertentu agar berfungsi atau yang akan mengasumsikan lebar penampung induk.


0

Saya pikir Container induk perlu diberi maxWidth dengan ukuran yang sesuai. Sepertinya kotak Teks akan mengisi ruang apa pun yang diberikan di atas.


0

Bergantung pada situasi Anda, menurut saya ini adalah pendekatan terbaik di bawah.

final maxWidth = MediaQuery.of(context).size.width * 0.4;
Container(
        textAlign: TextAlign.center),
        child: Text('This is long text',
        constraints: BoxConstraints(maxWidth: maxWidth),
),

0

Jika Anda hanya menempatkan teks sebagai anak (ren) kolom, ini adalah cara termudah agar teks secara otomatis dibungkus. Dengan asumsi Anda tidak memiliki sesuatu yang lebih rumit. Dalam kasus tersebut, saya akan berpikir Anda akan membuat ukuran wadah Anda sesuai keinginan Anda dan meletakkan kolom lain di dalam dan kemudian teks Anda. Sepertinya ini bekerja dengan baik. Wadah ingin mengecilkan ukuran isinya, dan ini tampaknya secara alami bertentangan dengan pembungkusan, yang membutuhkan lebih banyak upaya.

Column(
  mainAxisSize: MainAxisSize.min,
  children: <Widget>[
    Text('This long text will wrap very nicely if there isn't room beyond the column\'s total width and if you have enough vertical space available to wrap into.',
      style: TextStyle(fontSize: 16, color: primaryColor),
      textAlign: TextAlign.center,),
  ],
),

0

Ada banyak jawaban tetapi akankah lebih banyak mengamatinya.

1. klip

Klip teks yang meluap untuk memperbaiki wadahnya.

SizedBox(
          width: 120.0,
          child: Text(
            "Enter Long Text",
            maxLines: 1,
            overflow: TextOverflow.clip,
            softWrap: false,
            style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 20.0),
          ),
        ),

Keluaran:

masukkan deskripsi gambar di sini

2. memudar

Fade teks yang meluap menjadi transparan.

SizedBox(
          width: 120.0,
          child: Text(
            "Enter Long Text",
            maxLines: 1,
            overflow: TextOverflow.fade,
            softWrap: false,
            style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 20.0),
          ),
        ), 

Keluaran:

masukkan deskripsi gambar di sini

3. elipsis

Gunakan elipsis untuk menunjukkan bahwa teks telah meluap.

SizedBox(
          width: 120.0,
          child: Text(
            "Enter Long Text",
            maxLines: 1,
            overflow: TextOverflow.ellipsis,
            softWrap: false,
            style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 20.0),
          ),
        ),

Keluaran:

masukkan deskripsi gambar di sini

4. terlihat

Merender teks yang meluap di luar penampungnya.

SizedBox(
          width: 120.0,
          child: Text(
            "Enter Long Text",
            maxLines: 1,
            overflow: TextOverflow.visible,
            softWrap: false,
            style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 20.0),
          ),
        ),

Keluaran:

masukkan deskripsi gambar di sini


-3

Mencoba:

 Expanded(
  child: Container(
      child: Text('OVER FLOW TEST TEXTTTT',
          overflow: TextOverflow.fade)),
),

Ini akan ditampilkan OVER FLOW. Jika terjadi overflow maka akan ditangani.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.