android - Flutter中如何将onTap函数传递给ListTile?
问题描述
我的抽屉内容:
drawer: Drawer(
elevation: 0.0,
child: Container(
color: kBackgroundColor,
child: ListView(
padding: EdgeInsets.zero,
children: <Widget>[
DrawerHeader(
decoration: BoxDecoration(
color: Colors.grey,
image: DecorationImage(
alignment: Alignment.topRight,
image: AssetImage('images/banner.png'),
fit: BoxFit.cover,
),
),
child: Text('App Test'),
),
ReusableOptionTile(
textData: 'Home',
icon: Icons.home,
onTouch: () {
print('Home Clicked');
Navigator.pop(context);
},
),
]
),
),
),
提取的列表磁贴内容:
class ReusableOptionTile extends StatelessWidget {
const ReusableOptionTile(
{required this.icon, required this.textData, required this.onTouch});
final IconData icon;
final String textData;
final Function onTouch;
@override
Widget build(BuildContext context) {
return ListTile(
title: Row(
children: [
Icon(icon),
SizedBox(
width: 5.0,
),
Text('$textData'),
],
),
onTap: onTouch, // ERROR POINT
);
}
}
我从 Drawer 中提取了 List Tile 以使代码更具可重用性,但现在无法为不同的 tile 传递 on tap 函数。在错误点显示错误“无法将参数类型'Function'分配给参数类型'void Function()?'。”
如何解决这个问题?
解决方案
onTouch
应提取为 void 函数
void onTouch(){
print('Home Clicked');
Navigator.pop(context);
}
然后
ReusableOptionTile(
textData: 'Home',
icon: Icons.home,
onTouch: onTouch,
),
并打电话给
ListTile(
title: Row(
children: [
Icon(icon),
SizedBox(
width: 5.0,
),
Text('$textData'),
],
),
onTap: onTouch(),
);
推荐阅读
- javascript - VueJS Axios 谷歌地图 API
- javascript - 三星互联网 CORS 仅发送 OPTIONS 请求
- python - beginner python: my isfile() check stopped working
- html - 用响应式模板中的文本框替换下拉菜单
- angular - How to retrieve/get data from Firebase DB Ionic and Firebase
- java - Kafka consumer poll forever
- android - 在我的 VectorDrawable 图像周围创建细长的矩形边框线
- javascript - React Stripe Payment 创建客户和订单/送货地址等
- python - Python在函数内切片列表
- javascript - 如何将 w3schools 示例保存为 AngularJs 组件?