J'ai donc un écran de paramètres qui est une ListView et je veux que l'utilisateur puisse appuyer sur toute la ligne de la liste pour modifier ce paramètre. Cependant, je n'arrive pas à trouver un moyen non insensé de développer l'enfant du GestureDetector pour remplir tout l'espace horizontal.
Ma liste vue:
ListView(
children: [
GestureDetector(
onTap: () {
print('tapped the row');
},
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Totals expressed in', style: TextStyle(fontSize: 16.0)),
Text('Percentages', style: TextStyle(color: Colors.black54, fontSize: 15.0)),
],
),
),
),
Divider(height: 1.0),
// followed by other elements in the list view
Cela détectera le tap mais seulement l'espace que les éléments de texte occupent horizontalement (une fraction de la largeur de l'écran). Je connais le widget Expanded , mais partout où j'essaie de le mettre, j'obtiens une erreur indiquant qu'il doit être un descendant du code Row ou Column > ou l'exception:
Les enfants RenderFlex ont une flexion non nulle mais les contraintes de hauteur entrantes sont illimitées.
3 Réponses :
Dans votre code, changez - crossAxisAlignment: CrossAxisAlignment.start en:
Column(
crossAxisAlignment: CrossAxisAlignment.stretch
Cela fera que les enfants de la colonne occupent tout l'espace horizontal.
J'ai utilisé un conteneur avec une couleur d'arrière-plan transparente pour résoudre ce problème.
Essayez InkWell. InkWell permet à l'espace cliquable de s'étirer sur toute la ligne.