使用浮动操作按钮更改图标颜色
Changes icon color by using Floating Action Button
我想使用浮动操作按钮更改图标颜色。如果我按红色按钮,图标会变成红色。
代码:
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
FloatingActionButton.extended(
icon: Icon(Icons.colorize),
label: Text('Red'),
backgroundColor: Colors.red,
),
因此,您首先要确定的是您当前的小部件是 StatefulWidget
,如果您不知道那是什么或如何知道您的小部件是否是有状态小部件,您应该 可能 查看 flutter 初学者教程。
现在,您需要为图标的颜色声明一个变量,并将该颜色传递给图标:
Color iconColor = Colors.blue;
...
Icon(Icons.alarm, color: iconColor),
...
接下来,在您的浮动操作按钮的按下方法上:
onPressed; () => setState(() => iconColor = Colors.red)), // whatever color you want here
setState
部分很重要,因为它告诉 flutter 使用新值重建小部件。
您可以这样做(使用 StatefulWidget 小部件和 setState):
class ChangeIconColor extends StatefulWidget {
@override
ChangeIconColorState createState() => ChangeIconColorState();
}
class ChangeIconColorState extends State<ChangeIconColor> {
Color selectedColor = Colors.blue;
changeColor(Color color){
setState(() {
selectedColor = color;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: Row(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
FloatingActionButton.extended(
onPressed: () {
changeColor(Colors.red);
},
icon: Icon(Icons.colorize),
label: Text('Red'),
backgroundColor: Colors.red,
),
]),
body: Container(
child: Icon(
Icons.lock_clock,
color: selectedColor,
)),
);
}
}
如果你想使用 StatelessWidget,你可以像这样使用 ValueNotifier:
class ChangeIconColorState extends StatelessWidget {
final ValueNotifier<Color> selectedColorNotifier = ValueNotifier(Colors.blue);
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: Row(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
FloatingActionButton.extended(
onPressed: () {
selectedColorNotifier.value = Colors.red;
},
icon: Icon(Icons.colorize),
label: Text('Red'),
backgroundColor: Colors.red,
),
]),
body: Container(
child: ValueListenableBuilder(
builder: (context, Color color, child) {
return Icon(
Icons.lock_clock,
color: color,
);
},
valueListenable: selectedColorNotifier,
)),
);
}
}
我想使用浮动操作按钮更改图标颜色。如果我按红色按钮,图标会变成红色。
代码:
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
FloatingActionButton.extended(
icon: Icon(Icons.colorize),
label: Text('Red'),
backgroundColor: Colors.red,
),
因此,您首先要确定的是您当前的小部件是 StatefulWidget
,如果您不知道那是什么或如何知道您的小部件是否是有状态小部件,您应该 可能 查看 flutter 初学者教程。
现在,您需要为图标的颜色声明一个变量,并将该颜色传递给图标:
Color iconColor = Colors.blue;
...
Icon(Icons.alarm, color: iconColor),
...
接下来,在您的浮动操作按钮的按下方法上:
onPressed; () => setState(() => iconColor = Colors.red)), // whatever color you want here
setState
部分很重要,因为它告诉 flutter 使用新值重建小部件。
您可以这样做(使用 StatefulWidget 小部件和 setState):
class ChangeIconColor extends StatefulWidget {
@override
ChangeIconColorState createState() => ChangeIconColorState();
}
class ChangeIconColorState extends State<ChangeIconColor> {
Color selectedColor = Colors.blue;
changeColor(Color color){
setState(() {
selectedColor = color;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: Row(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
FloatingActionButton.extended(
onPressed: () {
changeColor(Colors.red);
},
icon: Icon(Icons.colorize),
label: Text('Red'),
backgroundColor: Colors.red,
),
]),
body: Container(
child: Icon(
Icons.lock_clock,
color: selectedColor,
)),
);
}
}
如果你想使用 StatelessWidget,你可以像这样使用 ValueNotifier:
class ChangeIconColorState extends StatelessWidget {
final ValueNotifier<Color> selectedColorNotifier = ValueNotifier(Colors.blue);
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: Row(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
FloatingActionButton.extended(
onPressed: () {
selectedColorNotifier.value = Colors.red;
},
icon: Icon(Icons.colorize),
label: Text('Red'),
backgroundColor: Colors.red,
),
]),
body: Container(
child: ValueListenableBuilder(
builder: (context, Color color, child) {
return Icon(
Icons.lock_clock,
color: color,
);
},
valueListenable: selectedColorNotifier,
)),
);
}
}