Flutter 根据警报对话框响应更改开关按钮颜色
我使用的是一个名为flatter的包,当用户选择取消操作时,我想将按钮的颜色从绿色更改为红色,反之亦然。我可以看到onChange函数中的值发生了变化,但按钮保持不变。因此,如果我单击按钮,然后在警报对话框中选择“否”选项,我希望按钮恢复到原始状态Flutter 根据警报对话框响应更改开关按钮颜色,flutter,dart,Flutter,Dart,我使用的是一个名为flatter的包,当用户选择取消操作时,我想将按钮的颜色从绿色更改为红色,反之亦然。我可以看到onChange函数中的值发生了变化,但按钮保持不变。因此,如果我单击按钮,然后在警报对话框中选择“否”选项,我希望按钮恢复到原始状态 Widget build(BuildContext context) { final scaffold = Scaffold.of(context); bool isSwitchOn = true; r
Widget build(BuildContext context) {
final scaffold = Scaffold.of(context);
bool isSwitchOn = true;
return ListTile(
leading: Text(widget.title),
//title: ,
trailing: Container(
width: 200,
child: Row(
children: <Widget>[
SwitcherButton(
value: isSwitchOn,
onColor: Colors.greenAccent,
offColor: Colors.redAccent,
onChange: (value) {
print(value);
AwesomeDialog(
context: context,
dialogType: DialogType.QUESTION,
animType: AnimType.TOPSLIDE,
title: value==true?'Mark item as availeble ?':'Mark item as unavailable?',
desc:'hello',
btnCancelOnPress: () {
setState(() {
isSwitchOn=!value;
print('Value after cancel is ' + isSwitchOn.toString());
});
},
btnOkText: "Yes",
btnCancelText:"No",
btnOkOnPress: () {
setState(() {
});
},
)..show();
},
),
],
),
),
);
}
小部件构建(构建上下文){
最终脚手架=脚手架(上下文);
bool-isSwitchOn=true;
返回列表块(
前导:文本(widget.title),
//标题:,
拖尾:集装箱(
宽度:200,
孩子:排(
儿童:[
开关按钮(
值:isSwitchOn,
onColor:Colors.greenAccent,
offColor:Colors.redAccent,
onChange:(值){
印刷品(价值);
令人敬畏的对话(
上下文:上下文,
dialogType:dialogType.QUESTION,
animType:animType.TOPSLIDE,
标题:value==true?“将项目标记为可用?”:“将项目标记为不可用”,
描述:你好,
BTNCELONPRESS:(){
设置状态(){
isSwitchOn=!值;
打印('取消后的值为'+isSwitchOn.toString());
});
},
btnOkText:“是”,
btnCancelText:“否”,
btnOkOnPress:(){
设置状态(){
});
},
)…显示();
},
),
],
),
),
);
}
以下是用于视觉目的的屏幕截图。当我从绿色切换到红色时,会出现一个警报对话框,其中有两个选项:是和否。如果我单击否,则切换按钮应保持绿色。换句话说,它应该回到它的原始价值
bool isSwitchOn在每次调用build函数时都设置为true,正如您在build方法中声明的那样。
在build方法(类中的实例变量)之外声明bool isSwitchOn。您可以复制下面的粘贴运行完整代码
步骤1:移动
bool-isSwitchOn=true代码>外部构建
第二步:SwitcherButton
使用UniqueKey()
SwitcherButton(
key: UniqueKey(),
第三步:btnOkOnPress
setisSwitchOn
btnOkOnPress: () {
setState(() {
isSwitchOn = value;
});
},
工作演示
完整代码
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:flutter/material.dart';
import 'package:switcher_button/switcher_button.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class CustomSwitch extends StatefulWidget {
final String title;
CustomSwitch({this.title});
@override
_CustomSwitchState createState() => _CustomSwitchState();
}
class _CustomSwitchState extends State<CustomSwitch> {
bool isSwitchOn = true;
@override
Widget build(BuildContext context) {
return ListTile(
leading: Text(widget.title),
//title: ,
trailing: Container(
width: 200,
child: Row(
children: <Widget>[
SwitcherButton(
key: UniqueKey(),
value: isSwitchOn,
onColor: Colors.greenAccent,
offColor: Colors.redAccent,
onChange: (value) {
print(value);
AwesomeDialog(
context: context,
dialogType: DialogType.QUESTION,
animType: AnimType.TOPSLIDE,
title: value == true
? 'Mark item as availeble ?'
: 'Mark item as unavailable?',
desc: 'hello',
btnCancelOnPress: () {
setState(() {
isSwitchOn = !value;
print('Value after cancel is ' + isSwitchOn.toString());
});
},
btnOkText: "Yes",
btnCancelText: "No",
btnOkOnPress: () {
setState(() {
isSwitchOn = value;
});
},
)..show();
},
),
],
),
),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CustomSwitch(title: "Chicken Burger"),
],
),
),
);
}
}
import'package:awesome_dialog/awesome_dialog.dart';
进口“包装:颤振/材料.省道”;
导入“包:切换器按钮/切换器按钮.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类CustomSwitch扩展StatefulWidget{
最后的字符串标题;
CustomSwitch({this.title});
@凌驾
_CustomSwitchState createState()=>\u CustomSwitchState();
}
类_CustomSwitchState扩展状态{
bool-isSwitchOn=true;
@凌驾
小部件构建(构建上下文){
返回列表块(
前导:文本(widget.title),
//标题:,
拖尾:集装箱(
宽度:200,
孩子:排(
儿童:[
开关按钮(
键:UniqueKey(),
值:isSwitchOn,
onColor:Colors.greenAccent,
offColor:Colors.redAccent,
onChange:(值){
印刷品(价值);
令人敬畏的对话(
上下文:上下文,
dialogType:dialogType.QUESTION,
animType:animType.TOPSLIDE,
标题:value==true
“将项目标记为可用?”
:“将项目标记为不可用?”,
描述:“你好”,
BTNCELONPRESS:(){
设置状态(){
isSwitchOn=!值;
打印('取消后的值为'+isSwitchOn.toString());
});
},
btnOkText:“是”,
btnCancelText:“否”,
btnOkOnPress:(){
设置状态(){
isSwitchOn=值;
});
},
)…显示();
},
),
],
),
),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
CustomSwitch(标题:“鸡肉汉堡”),
],
),
),
);
}
}
请查看我的最新问题。我不是在寻找警报对话框功能。我想改变开关按钮的状态。不,它不会改变颜色。我试过这个,但它仍然不会改变开关按钮。