Флаттер: возможно ли создать несколько элементов в плитке расширения? - PullRequest
0 голосов
/ 04 марта 2019

Я использую Flutter, и я хотел бы создать ExpansionTile Список с двумя элементами в одной и той же плитке.

Например:

name: /....... White-Space ...... / Snow.

имя: / ....... White-Space ...... / John.

местоположение: / ....... White-Space ...... / Winterfell.

Но я не знаю, возможно ли это. (После некоторого поиска в интернетеи документ)

Я пытался работать с колонкой, строкой, .. в собственности детей, но ничего не помогало.

У кого-то есть решение?

Мой код:

class Entry{
 const Entry(this.title,[this.children = const <Entry>[]]);
 final String title;
 final List<Entry> children;
 }

 const List<Entry> data = <Entry> [
 Entry(
 '   Profile',
 <Entry>[
   Entry('Jhon'),
   Entry('Snow'),
   Entry('Winterfell'),
 ],
),

...

  class Collapsible extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemBuilder: (BuildContext context, int index) => EntryItem(data[index]),
      itemCount: data.length,
    );
  }
}
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(
      backgroundColor: Colors.white30,
        initiallyExpanded: true,
        key: PageStorageKey<Entry>(root),
        title: Center(child: Text(root.title),),
    children: root.children.map(_buildTiles).toList()
    );
  }
  @override
  Widget build(BuildContext context) {
    return _buildTiles(entry);
  }
}

1 Ответ

0 голосов
/ 04 марта 2019

(отредактировано)

Это то, что вы ищете?

class Collapsible extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemBuilder: (context, i) {
        if(i >= data.length) return null;
        return ExpansionTile(
          title: Text('name: ${data[i].title}'),
          children: [
            Text('firstname: ${data[i].children[0].title}'),
            Text('firstname: ${data[i].children[1].title}'),
          ]
        );
      },
      itemCount: data.length,
    );
  }
}
...