我有一个ListTile(在抽屉中),点击它后,进入一个新的屏幕,在该屏幕中,用户可以从多个(使用for循环)IconButtons(在ListView中)中进行选择,但是当用户被发送到选择屏幕时(当他/她点击ListTile时)实际执行当点击按钮时要执行的功能,并且因此该功能(顺便打开另一个屏幕)被执行与ListView中的IconButtons相同的次数以及单击它们之前的次数。
有关详细信息,请参阅源代码:
单击ListTile时:
setState(() {
goDownloads(files);
});
打开新屏幕的功能:
goDownloads(List<File> files) async {
for (int n = 0; n < files.length; n++) {
String url = files[n].path;
Widget container = new Container(
child: new Row(
children: <Widget>[
new IconButton(
onPressed: openBook(url),//This is the code that gets executed before it's supposed to
icon: new Icon(Icons.open_in_browser),
),
...
]
)
);
dlbooks.add(container);
}
setState(() {
Navigator.of(context).push(new MaterialPageRoute<Null>(
builder: (BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('My Page')),
body: new Center(
child: new ListView(
children: dlbooks
),
),
);
},
));
});
}
我在main.dart文件中也有完整的代码,虽然我不推荐它,因为它写得不好,我还是个菜鸟。 https://pastebin.com/vZapvCKx 提前谢谢!
答案 0 :(得分:2)
此代码将函数传递给按下按钮时执行的onPressed
onPressed: () => openBook(url)
您的代码
onPressed: openBook(url)
执行openBook(url)
并将结果传递给onPressed
,以便在按下按钮时执行,这似乎不是您想要的。