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

时间:2018-11-06 09:56:20

标签: dart flutter

在我的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 个答案:

答案 0 :(得分:1)

onPressed的返回值将被忽略。

final VoidCallback onPressed;

从传递的回调中返回并不会返回封闭函数(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()再次执行,您可以在其中检查单位isPressed(或者更好地命名为wasPressed)并这次返回不同的内容

答案 1 :(得分: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),
        )
      ],
    );
  }

此代码中没有对齐,样式和修饰,我认为您可以自己添加所需的内容