web-dev-qa-db-fra.com

Flutter - deux textes d'affilée avec un gauche débordant gracieusement

Comment puis-je obtenir deux widgets de texte côte à côte pour permettre uniquement à celui le plus à gauche de déborder gracieusement?

Un widget de texte dans une colonne est facile à déborder gracieusement. Deux widgets de texte côte à côte d'affilée sont problématiques.

Le débordement de pile veut plus de détails, mais honnêtement, je perds probablement plus de temps à ce stade.

Widget _listItem({String title, String subtitle}){
  return Row(
    children: <Widget>[
      _listItemIcon(),
      Expanded(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            _listItemTitle(title),
            Row(
              children: <Widget>[
                _listItemSubtitle(subtitle), // how do I allow this to overflow gracefully
                _listItemTime("2m") // but stop this from overflowing
              ],
            )
          ],
        ),
      ),
      _listItemFavorite()
    ],
  );
}

//////////////
Widget _listItemIcon(){
  return Icon(Icons.message);
}

Widget _listItemTitle(String title){
  return Text(
    title,
    softWrap: false,
    overflow: TextOverflow.fade,
    style: TextStyle(
      fontSize:24.0
    ),
  );
}

Widget _listItemSubtitle(String subtitle){
  return Text(
    "[$subtitle]",
    softWrap: false,
    overflow: TextOverflow.fade,
    );
}

Widget _listItemTime(String time){
  return Text(
    "[$time]",
    softWrap: false,
    overflow: TextOverflow.fade,
    );
}

Widget _listItemFavorite(){
  return Icon(Icons.favorite);
}

enter image description here

6
Luke Pighetti

Vous pouvez utiliser le widget Flexible:

Widget _listItemSubtitle(String subtitle) {
  return new Flexible(
    fit: FlexFit.loose,
    child: Text(
      "[$subtitle]",
      softWrap: false,
      overflow: TextOverflow.fade,
    ),
  );
}

result


Alternative:

Si vous préférez que le widget temps soit toujours à droite, vous pouvez envelopper le texte des sous-titres dans un widget Expanded:

Widget _listItemSubtitle(String subtitle){
  return Expanded(
    child: Text(
      "[$subtitle]",
      softWrap: false,
      overflow: TextOverflow.fade,
    ),
  );
}

result

7
boformer