flutter - 按下时 Flutter Button Grid 布局调用每个按钮
问题描述
我已经实现了一个带有卡片的仪表板,使它们可以点击。我已将这些卡片放入网格布局中,并尝试为每张卡片 onTap 提供一个简单的动画。但是当我尝试点击网格布局中的单个项目时,所有项目都会被调用。有人可以帮我解决这个问题吗?我将提供我的代码片段。
网格
Widget createGridItem(int position) {
var icondata = Icons.add;
var title = "";
switch (position) {
case 0:
icondata = Icons.pie_chart;
break;
case 1:
icondata = Icons.perm_device_info;
break;
}
return GestureDetector(
onTap: () => buttonHandler(),
child: Transform.scale(
scale: _scale,
child: homeEnabledButtons(
context,
title,
icondata,
),
),
);
GridView(
shrinkWrap: true,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 30,
mainAxisSpacing: 30,
),
children: [
createGridItem(0),
createGridItem(1),
createGridItem(2),
createGridItem(3),
], ),
按钮项目
Widget homeEnabledButtons(
BuildContext context, String title, IconData icon, Function fun) {
return
Card(
elevation: 10.0,
color: color,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
icon,
color: primaryColor,
size: 100.0,
),
Text(
title,
textAlign: TextAlign.center,
style: AppTheme.subTitleATextStyle,
),
],
),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(15))),
);
}
动画调用自
void buttonHandler() {
_controller.forward();
Timer(const Duration(milliseconds: 100), () {
_controller.reverse();
});
Timer(const Duration(milliseconds: 50), () {
print("something");
});
}
解决方案
传递位置以检查已点击哪个索引。
Widget createGridItem(int position) {
var icondata = Icons.add;
var title = "";
switch (position) {
case 0:
icondata = Icons.pie_chart;
break;
case 1:
icondata = Icons.perm_device_info;
break;
default:
icondata;
}
return GestureDetector(
onTap: () => buttonHandler(position),
child: Transform.scale(
scale: 1,
child: homeEnabledButtons(
context,
title,
icondata,
() {},
),
),
);
}
void buttonHandler(int position) {
print("button handler $position");
// _controller.forward();
// Timer(const Duration(milliseconds: 100), () {
// _controller.reverse();
// });
// Timer(const Duration(milliseconds: 50), () {
// print("something");
// });
}
Widget homeEnabledButtons(
BuildContext context, String title, IconData icon, Function fun) {
return Card(
elevation: 10.0,
// color: color,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
icon,
// color: primaryColor,
size: 100.0,
),
Text(
title,
textAlign: TextAlign.center,
// style: AppTheme.subTitleATextStyle,
),
],
),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(15))),
);
}
推荐阅读
- c# - 如何从文本文件的字段中删除换行符
- python - 无法打印两位小数
- latex - 如何解决 Latex 中“\newword”的“未定义控制序列”错误?
- c# - ASP.NET Core:带有 OpenID Connect 的注册按钮
- prolog - 从 XPCE 中的编辑器中读取文本
- python - Select 在来自每个客户端的几条消息后返回空套接字列表
- accumulo - 授予所有表的累积用户权限
- python - jsonResponse = r.json() NameError: name 'r' is not defined
- rest - 是否应该为 404 和 204 响应设置 Content-Type 标头?
- python - RuntimeWarning:从未等待协程'main'