Flutter 颤振:更改列表中类按钮按下时的颜色
我已经看到了这个问题的各种变化,但还不能为我的用例拼凑出一个解决方案 我有一个Flutter 颤振:更改列表中类按钮按下时的颜色,flutter,dart,Flutter,Dart,我已经看到了这个问题的各种变化,但还不能为我的用例拼凑出一个解决方案 我有一个圆圈按钮列表 List<CircleButton> buttons = [ new CircleButton(onTap: () => print("Arts"), iconData: Icons.palette, label: "Arts"), new CircleButton(onTap: () => print("Board
圆圈按钮列表
List<CircleButton> buttons = [
new CircleButton(onTap: () => print("Arts"), iconData: Icons.palette, label: "Arts"),
new CircleButton(onTap: () => print("Board Games"), iconData: Icons.casino, label: "Board Games"),
new CircleButton(onTap: () => print("Causes"), iconData: Icons.volunteer_activism, label: "Causes"),
];
当点击按钮时,我想更新它的外观。我已经设置了CircleButton
类,以使布尔值isSelected
确定着色方式:
class CircleButton extends StatelessWidget {
final GestureTapCallback onTap;
final IconData iconData;
final String label;
bool isSelected = false;
CircleButton({Key key, this.onTap, this.iconData, this.label}) : super(key: key);
@override
Widget build(BuildContext context) {
double size = 65.0;
return new
InkResponse(
onTap: onTap,
child: new Container(
width: size,
height: size,
decoration: new BoxDecoration(
color: isSelected ? Color.fromRGBO(139, 207, 236, 1.0) : Color.fromRGBO(248, 248, 250, 1.0),
shape: BoxShape.circle,
),
child: new Icon(
iconData,
color: isSelected ? Colors.white : Color.fromRGBO(2, 78, 157, 1.0),
),
),
);
}
}
如何从
onTap
更新isSelected
变量?如果希望每个按钮管理其自己的选定状态(意味着点击按钮不会取消选择其他按钮),则必须使用StatefulWidget:
class CircleButton扩展StatefulWidget{
最后一个手势点击点击按钮;
最终Iconda Iconda;
最终字符串标签;
CircleButton({Key,this.onTap,this.iconData,this.label})
:super(key:key);
@凌驾
_CircleButtonState createState()=>_CircleButtonState();
}
类_CircleButtonState扩展状态{
bool-isSelected=false;
@凌驾
小部件构建(构建上下文){
双尺寸=65.0;
返回新的InkResponse(
onTap:(){
widget.onTap;
//添加这些行
设置状态(){
isSelected=!isSelected;
});
},
子容器:新容器(
宽度:大小,
高度:尺寸,
装饰:新盒子装饰(
颜色:已选择
?来自RGBO的颜色(1392072361.0)
:颜色。来自RGBO(248248250,1.0),
形状:BoxShape.circle,
),
孩子:新图标(
widget.iconda,
颜色:isSelected?颜色。白色:颜色。来自RGBO(2,78,157,1.0),
),
),
);
}
}
否则,如果您希望一次只选择一个按钮,只需在父窗口小部件中创建一个变量来存储选择的按钮:
int selectedButtonIndex;
列表按钮=[
新的圆形按钮(onTap:(){
印刷品(“艺术”);
setState((){selectedButtonIndex=selectedButtonIndex!=0?0:null;});
},Iconda:Icons.palete,标签:“艺术”,
isSelected:selectedButtonIndex==0,
),
新的圆形按钮(onTap:(){
印刷品(“棋盘游戏”);
setState((){selectedButtonIndex=selectedButtonIndex!=1?1:null;});
},iconData:赌场,标签:“棋盘游戏”,
isSelected:selectedButtonIndex==1,
),
...
];
并添加
isSelected
作为CircleButton
的参数。如果希望每个按钮管理其自己的选定状态(意味着点击按钮不会取消选择其他按钮),则必须使用StatefulWidget:
class CircleButton扩展StatefulWidget{
最后一个手势点击点击按钮;
最终Iconda Iconda;
最终字符串标签;
CircleButton({Key,this.onTap,this.iconData,this.label})
:super(key:key);
@凌驾
_CircleButtonState createState()=>_CircleButtonState();
}
类_CircleButtonState扩展状态{
bool-isSelected=false;
@凌驾
小部件构建(构建上下文){
双尺寸=65.0;
返回新的InkResponse(
onTap:(){
widget.onTap;
//添加这些行
设置状态(){
isSelected=!isSelected;
});
},
子容器:新容器(
宽度:大小,
高度:尺寸,
装饰:新盒子装饰(
颜色:已选择
?来自RGBO的颜色(1392072361.0)
:颜色。来自RGBO(248248250,1.0),
形状:BoxShape.circle,
),
孩子:新图标(
widget.iconda,
颜色:isSelected?颜色。白色:颜色。来自RGBO(2,78,157,1.0),
),
),
);
}
}
否则,如果您希望一次只选择一个按钮,只需在父窗口小部件中创建一个变量来存储选择的按钮:
int selectedButtonIndex;
列表按钮=[
新的圆形按钮(onTap:(){
印刷品(“艺术”);
setState((){selectedButtonIndex=selectedButtonIndex!=0?0:null;});
},Iconda:Icons.palete,标签:“艺术”,
isSelected:selectedButtonIndex==0,
),
新的圆形按钮(onTap:(){
印刷品(“棋盘游戏”);
setState((){selectedButtonIndex=selectedButtonIndex!=1?1:null;});
},iconData:赌场,标签:“棋盘游戏”,
isSelected:selectedButtonIndex==1,
),
...
];
并添加
isSelected
作为CircleButton
的参数,因为我不熟悉颤振,所以仍然掌握状态。这很有效!谢谢你,我是新来的,所以仍然掌握着美国的窍门。这很有效!非常感谢。
class CircleButton extends StatelessWidget {
final GestureTapCallback onTap;
final IconData iconData;
final String label;
bool isSelected = false;
CircleButton({Key key, this.onTap, this.iconData, this.label}) : super(key: key);
@override
Widget build(BuildContext context) {
double size = 65.0;
return new
InkResponse(
onTap: onTap,
child: new Container(
width: size,
height: size,
decoration: new BoxDecoration(
color: isSelected ? Color.fromRGBO(139, 207, 236, 1.0) : Color.fromRGBO(248, 248, 250, 1.0),
shape: BoxShape.circle,
),
child: new Icon(
iconData,
color: isSelected ? Colors.white : Color.fromRGBO(2, 78, 157, 1.0),
),
),
);
}
}