首页 文章

我希望IconButton中的onPressed方法返回一个新的Container

提问于
浏览
0

在我的flutter应用程序中,我希望当我按下IconButton时,应用程序会显示我在新容器中单击的图像 . 这是我的代码:

Widget build(BuildContext context) {
return Container(
    child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          0 < favorites.length
              ? IconButton(
                  icon: Image.network(favorites[0]),
                  onPressed: (){
                      return new Container(
                        child: Column(
                          children: <Widget>[
                            Image.network(favorites[0])
                          ],
                        ),
                      );

                  },
                )
              : Container(),
        ]));

}

我希望我点击的图像显示在黑色矩形中:https://i.stack.imgur.com/YqOYa.png

2 回答

  • 1

    onPressed 的返回值只是被忽略 .

    final VoidCallback onPressed;
    

    从传递的回调返回 not 返回封闭函数( build() ),因此返回容器将没有任何效果 .

    你最想要的是类似的东西

    onPressed: () {
         setState(() {isPressed = true;})
       }
    
       bool isPressed = false;
    
       build() {
         if(isPressed) {
           return new Container(
             child: Column(
               children: <Widget>[
                 Image.network(favorites[0])
               ],
             ),
           );
         } else {
           return /* as you have it in your question */
         }
       }
    

    调用 setState() 将导致 build() 再次执行,在那里你可以检查flat isPressed (或者更好地命名为 wasPressed )并且这次返回不同的内容 .

  • 0

    你必须这样做:

    List<String> favorites;
      String selectedIcon;
      Widget build(BuildContext context) {
        return Column(
          children: <Widget>[
            Row(children: favorites.map((String src) => IconButton(
              icon: Image.network(src),
              onPressed: (){
                setState(() {
                  selectedIcon = src;
                });
              },
            )).toList(),),
            Container(
              child: Image.network(selectedIcon),
            )
          ],
        );
      }
    

    这段代码中没有对齐,样式,装饰,我想你可以自己添加你需要的东西

相关问题