gpt4 book ai didi

flutter - 在 Bottom Sheet 中切换不会更改 Flutter 上的状态

转载 作者:IT王子 更新时间:2023-10-29 06:35:22 25 4
gpt4 key购买 nike

我在使用 Bottom Sheet 内的开关时遇到了一些问题。当我点击它时,它不会改变它的状态。只有第一次,状态才能正确更改。

这是我使用的简单代码:

  bool _switchValue = false;

@override
Widget build(BuildContext context)
{
return new Scaffold(
body: Center(
child: RaisedButton(
child: const Text('SHOW BOTTOM SHEET'),
onPressed: () {
showModalBottomSheet<void>(context: context, builder: (BuildContext context) {
return Container(
child: CupertinoSwitch(
value: _switchValue,
onChanged: (bool value) {
setState(() {
_switchValue = value;
});
},
)
);
});
}
)
)
);
}

谁能帮帮我?

最佳答案

您需要将开关放在它自己的 StatefulWidget 中,并使用回调将值返回给您的主类。 Bottom Sheet 使用不同的上下文,因此在上面的示例中调用 setState 不起作用。

class _MyHomePageState extends State<MyHomePage> {
bool _switchValue = false;

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: RaisedButton(
child: const Text('SHOW BOTTOM SHEET'),
onPressed: () {
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return BottomSheetSwitch(
switchValue: _switchValue,
valueChanged: (value) {
_switchValue = value;
},
);
},
);
},
),
),
),
);
}
}

class BottomSheetSwitch extends StatefulWidget {
BottomSheetSwitch({@required this.switchValue, @required this.valueChanged});

final bool switchValue;
final ValueChanged valueChanged;

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

class _BottomSheetSwitch extends State<BottomSheetSwitch> {
bool _switchValue;

@override
void initState() {
_switchValue = widget.switchValue;
super.initState();
}

@override
Widget build(BuildContext context) {
return Container(
child: CupertinoSwitch(
value: _switchValue,
onChanged: (bool value) {
setState(() {
_switchValue = value;
widget.valueChanged(value);
});
}),
);
}
}

关于flutter - 在 Bottom Sheet 中切换不会更改 Flutter 上的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com