Flutter 单击按钮时在按钮周围绘制边框

Flutter 单击按钮时在按钮周围绘制边框,flutter,flutter-layout,Flutter,Flutter Layout,目标:每当用户按下按钮时,围绕扁平按钮绘制边框 换句话说:onPressed()被调用?->绘图边框() 用例:最终用户界面应允许用户选择多个按钮,这些按钮应具有边框,以让用户知道它们已被选中 问题:无法以编程方式绘制边框,更不用说在同一UI中有多个按钮(大约9个按钮左右) 按钮代码: FlatButton( color: kWhite, onPressed: () {}, child: Image.asset('assets/images/gucci.jpg'),

目标:每当用户按下按钮时,围绕
扁平按钮绘制边框

换句话说:
onPressed()
被调用?-><代码>绘图边框()


用例:最终用户界面应允许用户选择多个按钮,这些按钮应具有边框,以让用户知道它们已被选中

问题:无法以编程方式绘制边框,更不用说在同一UI中有多个按钮(大约9个按钮左右)

按钮代码:

 FlatButton(
   color: kWhite,
   onPressed: () {},
   child: Image.asset('assets/images/gucci.jpg'),
   shape: RoundedRectangleBorder( //Draw when user clicks on the button 
     side: BorderSide(
     color: kDarkTitleColor, width: 1),
     ),
       padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
      ),

您可以将按钮包装在
StatefulWidget
中,如下所示:

class BorderedFlatButton extends StatefulWidget {
  @override
  _BorderedFlatButtonState createState() => _BorderedFlatButtonState();
}

class _BorderedFlatButtonState extends State<BorderedFlatButton> {
  bool isSelected = false;

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      color: kWhite,
      onPressed: () {
        print(isSelected);
        setState(() {
          isSelected = !isSelected;
        });
      },
      child: Image.asset('assets/images/gucci.jpg'),
      shape: RoundedRectangleBorder(
        side: BorderSide(
            color: isSelected ? kDarkTitleColor : Colors.transparent, width: 1),
      ),
      padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
    );
  }
}
类边界FlatButton扩展StatefulWidget{
@凌驾
_BorderedFlatButtonState createState()=>\u BorderedFlatButtonState();
}
类_BorderedFlatButtonState扩展状态{
bool-isSelected=false;
@凌驾
小部件构建(构建上下文){
返回按钮(
颜色:kWhite,
已按下:(){
印刷品(已选出);
设置状态(){
isSelected=!isSelected;
});
},
子级:Image.asset('assets/images/gucci.jpg'),
形状:圆形矩形边框(
边线(
颜色:isSelected?kDarkTitleColor:颜色。透明,宽度:1),
),
填充:从LTRB(10,10,10,10)开始的边缘设置,
);
}
}

PS:这里我添加了一个状态变量
isSelected
,它指示按钮是否被选中。

我不明白您的问题。你为什么不能画呢?只需将按钮移动到单独的StatefulWidget,并在点击时处理状态更改,显示和隐藏此边框。请确保使用透明边框颜色,因为如果尝试使用宽度,则无法使用此颜色。