我正在用颤动编写我的第一个应用程序,并且遇到了InkWell在点击时没有检测到的问题。它是一个比我能找到的例子更复杂的结构。我写了以下函数:
class ChatOverviewElements {
static Widget buildChatEntry(BuildContext context, String username,
String lastMessageText,
String lastMessageDate, bool group,
int unread, int chatID) {
return new Material(
child: new Ink(
padding: const EdgeInsets.only(right: 32.0),
child: new InkWell(
onTap: ChatOverviewNavigation.openChat(context, chatID),
child: new Row(
children: <Widget>[
new Container(
padding: const EdgeInsets.all(10.0),
child: new Icon(
Icons.account_circle,
size: 60.0,
),
),
new Expanded (
child: new Container(
padding: const EdgeInsets.only(right: 5.0),
height: 60.0,
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Row(
children: <Widget>[
group ? new Icon(Icons.group) : new Container(),
new Container(width: group ? 10.0 : 0.0,),
TextStyles.username(username),
],
),
TextStyles.chatSnippet(lastMessageText),
],
),
),
),
new Column(
children: <Widget>[
new Row(
children: <Widget>[
new Icon(
Icons.done_all,
color: Colors.green,
),
new Container(width: 8.0,),
TextStyles.chatDate(lastMessageDate),
]),
new Icon(
Icons.thumb_up,
color: Colors.grey[500],
)
],
),
],
),
),
),
);
}
}
它创建了一个像你一样在WhatsApp等中看到的框,其中包含用户名,消息预览,未读徽章(拇指向上图标是占位符),依此类推。我希望它可以替换那个外部容器,所以我改变它并且墨水(看到涟漪)并添加了InkWell和其他所有东西作为那个孩子。这不起作用。它没有检测到所有的点击,我不明白为什么。
调用构建函数来创建ListView的子项,ListView本身嵌套在Scaffold和Material App中。但这不重要,我在ListView中尝试了StackOverflow的简单示例,这些示例工作得很好。
所以问题是:我在这里做错了什么?那个InkWell必须在哪里,所以整个容器都是可取的,容器背景上会显示一个波纹?
答案 0 :(得分:2)
onTap: ChatOverviewNavigation.openChat(context, chatID),
应该是
onTap: () => ChatOverviewNavigation.openChat(context, chatID),
否则ChatOverviewNavigation.openChat(context, chatID)
的结果将用作onTap
处理程序。