Flutter:是否可以在扩展块中创建多个元素?
Flutter : Is it possible to create multiple elements in a expansion tile?
我使用 Flutter,我想创建一个 ExpansionTile 在同一个 Tile 中包含 2 个元素的列表。
例如:
name :/.......White-Space....../ Snow.
firstname :/.......White-Space....../ John.
location :/.......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);
}
}
(已编辑)
这是您要找的吗?
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,
);
}
}
我使用 Flutter,我想创建一个 ExpansionTile 在同一个 Tile 中包含 2 个元素的列表。
例如:
name :/.......White-Space....../ Snow.
firstname :/.......White-Space....../ John.
location :/.......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);
}
}
(已编辑)
这是您要找的吗?
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,
);
}
}