J'ai ListView.Builder avec une colonne enfant et listtile et rangée de cette colonne de cette colonne. Ce que j'essaie d'atteindre est, lorsqu'un utilisateur appuyez sur l'élément de liste de lecture, il fera la ligne visible. Comment puis-je obtenir quel élément listtile est cliqué et la ligne connectée à celle-ci sera visible?
Voici le code: p> puis-je le faire par les touches ou Comment puis-je obtenir le bon article? p> p>
3 Réponses :
La meilleure chose à faire est de faire une instance privée pour chaque Disclaimer: STRUT> Je n'ai pas utilisé votre code, mais j'ai montré la meilleure façon de réaliser ce que vous voulez Atteindre en ce moment. P> Page d'accueil: P> listtile code> avec la ligne code> sous elle. De cette manière, vous pouvez effectuer l'opération à un widget spécifique, cela n'affectera pas d'autres. class _ListTileWidget extends State<ListTileWidget> {
// This is for individual ListTile reference
bool isSelected = false;
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ListTile(
title: Text(widget.title),
onTap: () => setState((){ isSelected = !isSelected; }) // doing toggle
),
// for each listtile individually, it shows/hide Row accordingly
isSelected
? Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("Edit"),
SizedBox(width: 50.0),
Text("Delete")
]
) : Container()
]
);
}
}
Utilisez Vérifiez le code d'échantillon: P>
import 'package:flutter/material.dart';
class ExpansionTileSample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('ExpansionTile'),
),
body: ListView.builder(
itemBuilder: (BuildContext context, int index) =>
EntryItem(data[index]),
itemCount: data.length,
),
),
);
}
}
// One entry in the multilevel list displayed by this app.
class Entry {
Entry(this.title, [this.children = const <Entry>[]]);
final String title;
final List<Entry> children;
}
// The entire multilevel list displayed by this app.
final List<Entry> data = <Entry>[
Entry(
'Chapter A',
<Entry>[
Entry(
'Section A0',
<Entry>[
Entry('Item A0.1'),
Entry('Item A0.2'),
Entry('Item A0.3'),
],
),
Entry('Section A1'),
Entry('Section A2'),
],
),
Entry(
'Chapter B',
<Entry>[
Entry('Section B0'),
Entry('Section B1'),
],
),
Entry(
'Chapter C',
<Entry>[
Entry('Section C0'),
Entry('Section C1'),
Entry(
'Section C2',
<Entry>[
Entry('Item C2.0'),
Entry('Item C2.1'),
Entry('Item C2.2'),
Entry('Item C2.3'),
],
),
],
),
];
// Displays one Entry. If the entry has children then it's displayed
// with an ExpansionTile.
class EntryItem extends StatelessWidget {
const EntryItem(this.entry);
final Entry entry;
Widget _buildTiles(Entry root) {
if (root.children.isEmpty) return ListTile(title: Text(root.title));
return ExpansionTile(
key: PageStorageKey<Entry>(root),
title: Text(root.title),
children: root.children.map(_buildTiles).toList(),
);
}
@override
Widget build(BuildContext context) {
return _buildTiles(entry);
}
}
void main() {
runApp(ExpansionTileSample());
}
visibleedit strong> fonctionnera sur toutes les lignes forts> et ceci est une erreur, vous devez définir une variable à l'intérieur de la catégorie
Quel est le problème actuel? Avec ce code
@ Jitsm555 Il rend toutes les lignes visibles, je veux seulement que les articles à tarauds sont visibles.