flutter - 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。为什么会这样?
解决方案
它被调用是因为你在你的itemBuilder
. 奇怪的是,您在这里没有收到静态分析错误。
在该行return ProfileCard(pages[index],_ontapd(_navigations[index],context));
中,您正在调用该_ontapd
方法。请注意括号,这意味着您正在调用该方法并传递返回值,而不是传递对它的引用。然后将该值传递给ProfileCard
.
要解决此问题,您需要删除括号。刚过_ontapd
return ProfileCard(pages[index],_ontapd);
然而,这确实会导致其他问题。onTap
没有您的_ontapd
方法所需的相同参数,因此未经修改就无法使用。
在您当前的实现_ontapd
中,只打印传递给它的第一个参数,它甚至不使用第二个参数。所以这里更好的解决方案是传递 to 的值_navigationLink
并ProfileCard
定义onTap
打印该值。_ontapd
然后可以完全删除
onTap: () {
print(parameterPassed);
}
您提供的示例可能会被简化,在这种情况下,您希望对错误有足够的了解来自己找到解决方案,或者您必须提供更多详细信息。
推荐阅读
- reactjs - 在哪种生命周期方法中,我必须调用我的操作创建者来检查用户是否经过身份验证?
- angular - 找不到“AppModule”ngx-rocket metronic 主题的 NgModule 元数据中的错误
- kaggle - Kaggle - Image.open OSError:无法识别图像文件
- c++ - 如果用户不小心给出了不正确的数据类型,cin 如何工作?
- javascript - vuejs 从数组中删除项目
- javascript - Imgur Api 使用 Fetch es6 获取画廊
- android - 无法选择 Flutter Dropdownbutton 的项目
- docker - Docker - Appdynamics - 机器代理问题
- android - 6:BuyFlow UI 需要显示
- php - sql循环只返回一个结果