在点击按钮之前执行的颤动代码

时间:2018-03-05 16:31:56

标签: android button onclick dart flutter

我有一个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 提前谢谢!

1 个答案:

答案 0 :(得分:2)

此代码将函数传递给按下按钮时执行的onPressed

onPressed: () => openBook(url)

您的代码

onPressed: openBook(url)

执行openBook(url)并将结果传递给onPressed,以便在按下按钮时执行,这似乎不是您想要的。