Flutter从Node.js服务器下载PDF:GridView的onTap自动触发问题
嘿,我一眼就瞅出问题出在哪啦!
为啥启动时就自动下载?
你在给ResourceDetail的onTap赋值时,直接写了downloadFile(...)——这可不是把函数当作点击回调传进去,而是当场就执行了这个下载函数!GridView在构建每一个item的时候,都会触发这个函数调用,所以一启动所有文件就开始下载了,完全没等你点击。
怎么改?
把onTap改成用匿名函数包裹起来,这样只有用户真正点击的时候,才会执行下载逻辑。修改后的代码片段是这样的:
ResourceDetail( name: snapshot.data.data[i].title, author: snapshot.data.data[i].user.name, // 用匿名函数包裹,点击时才触发下载 onTap: () => downloadFile( 'url/api/${items.source}', snapshot.data.data[i].title, items.extension ), ),
额外小建议
- 可以给下载按钮加个加载状态,防止用户重复点击触发多次下载
- 记得给
downloadFile加上异常捕获哦,比如网络失败、存储权限不足这些情况,给用户个提示会更友好
内容的提问来源于stack exchange,提问作者Zero Live
相关产品推荐
相关产品推荐

