首页 > 解决方案 > Flutter ontap 功能在启动时运行

问题描述

我的索引文件中有这段代码:

  _ontapd(_navigationLink,BuildContext context){
    print(_navigationLink);
  }
ListView.builder(
          padding: EdgeInsets.only(top: 20),
          itemCount: pages.length,
          itemBuilder: (context, index) {
            return ProfileCard(pages[index],_ontapd(_navigations[index],context));
          }),

而“ProfileCard”小部件中的这段代码:

  String cardText;
  Function _onTapFunc;
  ProfileCard(@required this.cardText, this._onTapFunc);


GestureDetector(
          onTap: _onTapFunc,
...
)

现在,每当我刷新应用程序时,都会为页面列表中的每个项目调用 _onTapFunc。为什么会这样?

标签: flutterdart

解决方案


它被调用是因为你在你的itemBuilder. 奇怪的是,您在这里没有收到静态分析错误。

在该行return ProfileCard(pages[index],_ontapd(_navigations[index],context));中,您正在调用_ontapd方法。请注意括号,这意味着您正在调用该方法并传递返回值,而不是传递对它的引用。然后将该值传递给ProfileCard.

要解决此问题,您需要删除括号。刚过_ontapd

return ProfileCard(pages[index],_ontapd);

然而,这确实会导致其他问题。onTap没有您的_ontapd方法所需的相同参数,因此未经修改就无法使用。

在您当前的实现_ontapd中,只打印传递给它的第一个参数,它甚至不使用第二个参数。所以这里更好的解决方案是传递 to 的值_navigationLinkProfileCard定义onTap打印该值。_ontapd然后可以完全删除

onTap: () {
  print(parameterPassed);
}

您提供的示例可能会被简化,在这种情况下,您希望对错误有足够的了解来自己找到解决方案,或者您必须提供更多详细信息。


推荐阅读