323 votes

Flutter - Enveloppe le texte lors du débordement, comme l'insertion de points de suspension ou le fondu.

J'essaie de créer une ligne dans laquelle le texte central a une taille maximale, et si le contenu du texte est trop grand, il s'adapte à la taille.

J'insère le TextOverflow.ellipsis pour raccourcir le texte et insérer les points triples ... mais cela ne fonctionne pas.

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)
                            ),
                          ),
                        ],
                      ),
                    ]
                  )
                )
              ],
            ),
          )
        ),
      ]
    )
  );
}

résultat :

enter image description here

attendu :

enter image description here

560voto

Collin Jackson Points 29995

Vous devez envelopper votre Container dans un Flexible pour laisser votre Row savoir que c'est ok pour le Container pour être plus étroite que sa largeur intrinsèque. Expanded fonctionnera également.

screenshot

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,
      ),
    ),
  ),
),

22 votes

J'ai un problème similaire sur Column. Cette approche ne fonctionne pas pour moi. stackoverflow.com/questions/52206221/

1 votes

Y a-t-il un moyen d'implémenter ceci dans un champ de texte ?

1 votes

Si vous voulez qu'il ait également le texte wrap_content, spécifiez la propriété fit avec FlexFit.loose,

231voto

CopsOnRoad Points 4705

Utilisation des ellipses

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

enter image description here


Utilisation du fondu

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

enter image description here


Utilisation du clip

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

enter image description here


Note :

Si vous utilisez Text à l'intérieur d'un Row vous pouvez mettre ci-dessus Text à l'intérieur de Expanded comme :

Expanded(
  child: AboveText(),
)

1 votes

Je peux ajouter un bouton plat lorsque le texte déborde, comme ...plus de lien

1 votes

@mr.hir Je suis désolé, je n'ai pas compris.

2 votes

Cela ne fonctionne pas si vous avez du texte et un autre widget (par exemple, une icône) centré dans une rangée.

34voto

Yauhen Sampir Points 330

Vous pouvez utiliser ce bout de code pour afficher le texte avec des points de suspension.

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

19 votes

Veuillez également inclure une description de ce code pour expliquer comment il répond à la question.

21voto

Cenk YAGMUR Points 273

Vous pouvez le faire comme ça

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

1voto

Randal Schwartz Points 9756

Je pense que le conteneur parent doit recevoir une largeur maximale de la taille appropriée. On dirait que la zone de texte va remplir l'espace qui lui est donné au-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X