我正在使用ListTile列表中的每个项目.每个项目都是从数据阵列动态创建的.ListTile提供onTap,但它对我来说不够,因为我需要通过获取密钥或索引来找出点击了哪个项目.
ListTile:
new ListTile(
//leading: const Icon(Icons.flight_land),
title: const Text('Trix\'s airplane'),
subtitle: const Text('The airplane is only in Act II.'),
enabled: true,
onTap: () { //TODO: get the identifier for this item },
trailing: new Container(
child: new Row(
children: [
new Text("70%"),
const Icon(Icons.flight_land)
]
)
),
)
Run Code Online (Sandbox Code Playgroud)
你想ListTile在a中构建你的s 列表ListView,并使用List.generate构造函数来获取children这里的索引是一个简单的例子:
import "package:flutter/material.dart";
class ListTest extends StatefulWidget {
@override
_ListTestState createState() => new _ListTestState();
}
class _ListTestState extends State<ListTest> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
int _id;
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
appBar: new AppBar(title: new Text("List"),),
body: new ListView(
children: new List.generate(10, (int index){
return new ListTile(title: new Text("item#$index"),
onTap:(){
setState((){
_id = index; //if you want to assign the index somewhere to check
});
_scaffoldKey.currentState.showSnackBar(new SnackBar(content: new Text("You clicked item number $_id")));
},
);
})
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,List.generate对于小列表工作正常,如果您正在读取可扩展列表(例如:用户列表),您需要使用ListView.builder而不是ListView它有一个builder参数,允许您通过索引循环遍历列表.
new ListView.builder(itemBuilder: (BuildContext context, int index) {
//return your list
},
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用捕获项目信息的闭包创建 ListTile 实例。在这个例子中,_tappedFolder 函数是用 ListTile 的每个 Text 的标签调用的。
List<ListTile> _buildFolderTiles() {
var list = List<ListTile>();
for (var each in ['A:','B:','C:','D:']) {
list.add(ListTile(
title: Text(each),
onTap: (){ _tappedFolder(each); }
));
}
return list;
}
void _tappedFolder(String which) {
print("tapped ${which}");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17081 次 |
| 最近记录: |