loops - 如何在while循环中使用下载功能?
问题描述
我有以下代码,目的是在每个图像下方放置一个下载按钮,并在单击时下载该特定图像。但是,当我运行代码时,对于所有按钮,它都试图下载第 9 个图像,而循环运行直到 i = 8,即 8 个图像。请帮助如何解决这个问题?
Widget getWidgets(int index, String name) {
List<Widget> list = new List<Widget>();
int i = 1;
while (i <= index) {
list.add(new Column(
children: <Widget>[
SizedBox(
height: 15.0,
),
BeforeAfter(
beforeImage: Image.asset(
'assets/$name/OG$i.jpg',
//fit: BoxFit.cover,
),
afterImage: Image.asset(
'assets/$name/$i.jpg',
//fit: BoxFit.cover,
),
isVertical: false,
),
SizedBox(
height: 10.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("$name $i",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 17,
fontFamily: 'Raleway',
color: Colors.black)),
Container(
margin: EdgeInsets.only(left: 100.0),
width: 120.0,
height: 35.0,
child: FlatButton(
onPressed: () async {
final status = await Permission.storage.request();
if (status.isGranted) {
final externalDir = await getExternalStorageDirectory();
FlutterDownloader.enqueue(
url: 'assets/$name/$i.dng',
savedDir: externalDir.path,
fileName: '$name$i.dng',
showNotification: true,
openFileFromNotification: true,
);
} else {
print("Permission Denied");
}
},
child: Text('Download',
style: TextStyle(color: Colors.black, fontSize: 17)),
textColor: Colors.white,
shape: RoundedRectangleBorder(
side: BorderSide(
color: Colors.teal, width: 2, style: BorderStyle.solid),
borderRadius: BorderRadius.circular(50)),
),
),
],
),
],
));
i++;
}
return Column(children: list);
}
解决方案
实际上,在循环结束时,i
is 9
,这就是你看到你的行为的原因。您必须制作一个本地副本,i
以便该变量在捕获时保持在循环中的值:
while (i <= index) {
final localIndex = i;
// rest of your code, use localIndex here instead of i
i++;
}
推荐阅读
- excel - 如何编辑此返回多个匹配的 VBA 代码以在下面输入匹配?
- sql - 改变决赛桌结构的枢轴
- json - 在 Flutter Stateful Widget 中从 json 加载数据的问题
- git - 在 Azure Devops 管道中:推送标签有效,但不能推送
- c++ - 为什么在 try-catch 中完全封闭的构造函数中抛出的异常似乎被重新抛出?
- php - Meilisearch 用户特定过滤
- ansible - 循环通过 ansible cisco.ios.ios_facts gather_network_resources: l2_interfaces 返回值?
- botframework - Bot Framework Composer 遇到 QnA Maker 端点密钥问题
- docker - docker run 加载共享库 libstdc++.so.6 和 libgcc_s.so.1 时出错
- javascript - 在 javascript 中找到可能的 5000 阶乘