你现在做的是 - 每次点击你:
ExpansionTile
但是你没有对返回的值做任何事情,它甚至没有机会进入你的小部件树,它只是简单地构建而没有用它做任何事情。
ExpansionTile 是一个小部件,包括:
每个3个插槽可以容纳Widget(或树):
leading
title
trailing
和a children 数组 - 展开时显示的内容;
children
码:
@override Widget build(BuildContext context) { return Container( child: ListView.builder(itemBuilder: (BuildContext ctxt, int index) { return new Container( margin: new EdgeInsets.fromLTRB(0, 10, 20, 0), decoration: new BoxDecoration( //color:Color.fromRGBO(255, 255,255, 1), borderRadius: new BorderRadius.only( topRight: const Radius.circular(35), bottomRight: const Radius.circular(35)), ), width: double.infinity, // height: 55, child: Card( elevation: 5, clipBehavior: Clip.antiAlias, shape: RoundedRectangleBorder( borderRadius: new BorderRadius.only( topRight: const Radius.circular(35), bottomRight: const Radius.circular(35)), ), child: expansionList(ctxt, index), ), ); }), ); }
并将任何你想要的东西放在折叠的瓷砖上 leading 和 title ,如果你想自定义箭头 - 使用自定义 trailing 。
Widget expansionList(BuildContext context, int index) { print("Building expansion tile"); return new ExpansionTile( initiallyExpanded: false, leading: Icon(Icons.all_inclusive), title: Column( children: <Widget>[ Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ Text('Content'), RaisedButton( child: Text('Button'), onPressed: () {}, ), Text('Row 1'), ], ), Row( crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Text('Content row 2'), ], ), Row( mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[ Text('Content row 3') ], ) ], ), children: <Widget>[ Image.network( "https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png", height: 55, ), ], ); }
PS熟悉代码格式化热键组合,并始终使用尾随逗号 - 代码将自动格式化更好