首页 > 解决方案 > ToggleButtons 更改引用的值

问题描述

我是 Dart/Flutter 和面向对象编程的新手,所以如果这是基本的,我深表歉意。

如果用户按下后退按钮而不是保存,我想恢复切换按钮的初始值。我正在尝试创建要恢复的初始值的副本,但切换按钮正在更改我的恢复值。我的提升按钮(下图)似乎按预期运行。

谁能解释一下?切换按钮更改参考时,按钮是否更改了值?除了构建自定义按钮之外的任何解决方案?

List<bool> initValues = [true,false,false];
List<bool> isSelected = initValues;

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
  theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
  debugShowCheckedModeBanner: false,
  home: Scaffold(
    body: Center(
      child: MyWidget(),
    ),
  ),);}}

class MyWidget extends StatefulWidget {

 @override
   _MyWidget createState() => _MyWidget();}

class _MyWidget extends State<MyWidget> {
@override
Widget build(BuildContext context) {

return 
  Column(
  children:
[
 ToggleButtons(
  children: <Widget>[
    Icon(Icons.not_interested),
    Text('P'),
    Text('S'),
  ],
  onPressed: (int index) {
    setState(() {
      for (int buttonIndex = 0;
          buttonIndex < isSelected.length;
          buttonIndex++) {
        if (buttonIndex == index) {
          isSelected[buttonIndex] = true;
        } else {
          isSelected[buttonIndex] = false;
        }
      }
    }
 );
  },
  isSelected: isSelected,
),
 ElevatedButton(
   child: Text('P'),
   onPressed: (){
    
     isSelected = [false,true,false];


   }),
  ElevatedButton(
   child: Text('Print Value'),
   onPressed: (){
     
     print(initValues);
     print(isSelected);
          }),
   ]
);

} }

标签: flutterdarttoggle

解决方案


添加 WillPopScope 小部件,如下所示:

Widget build(BuildContext context) {
return WillPopScope(onWillPop:() async {
  //reset your toggle button here
  return true;
},child:
    Scaffold(body:YourBody()));}

推荐阅读