flutter - 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);
}),
]
);
} }
解决方案
添加 WillPopScope 小部件,如下所示:
Widget build(BuildContext context) {
return WillPopScope(onWillPop:() async {
//reset your toggle button here
return true;
},child:
Scaffold(body:YourBody()));}
推荐阅读
- javascript - 如何用对象数组中的特定索引替换元素-Javascript
- amazon-ec2 - 如何在 Ansible 中排除 EC2 清单的实例?
- javascript - 检查来自字符串的时间是否大于当前时间
- symfony - 在树枝模板中自动生成可翻译的字符串
- javascript - Angular 5 + UI Router: Eagerly Loading Services for UI Router Resolve when your application is imported by a different root module
- url - 如何从golang中的确切网址重定向?
- python - 使用键列表从字典中选择值
- r - 显示在 R 中收敛的 k-means 算法的所有迭代?
- vue.js - VueJS: vs or related for grouping elements for conditional rendering
In Vue.js, if you want to conditionally render multiple elements via a
v-if/v-else-if
directive you can wrap them inside<template
- javascript - Promise 在 Node 中没有解决无限 while 循环?