flutter - 颤振开关小部件未更新
问题描述
我已经创建了一个具有 Flutter 开关小部件的无状态小部件我在父级中实现了这个小部件并传入了所需的参数,但是当我按下开关时它不会改变值。
我认为这可能是由于子小部件不是有状态的,但这并没有什么区别。
这是我的两个小部件文件中的代码的简短示例
class SettingsButton extends StatelessWidget {
final String text;
final bool initalValue;
final void Function(bool) onOffCallback;
SettingsButton({
this.text,
this.initalValue = false,
this.onOffCallback,
});
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width,
child: SubHeading(text),
),
Switch(
onChanged: isOnOff ? onOffCallback : null,
activeColor: Theme.of(context).accentColor,
value: initalValue,
)
]);
class _SettingsState extends State<Settings> {
bool test = true;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: ListView(
children: [
Column(
children: [
SettingsButton(
text: "Test",
onOffCallback: (test) => setState(() {
print("Called");
test = !test;
}),
initalValue: test,
),
],
)
],
),
);
}
解决方案
您正在设置在回调中收到的测试变量,而不是在_SettingsState
类中定义的变量。您应该拥有的是回调:
onOffCallback: (newTest) => setState(() {
print("$newTest");
test = newTest;
// or (it shouldn't matter)
test = !test;
print("$test");
}),
推荐阅读
- r - 在存储在多列上的数据框中查找值
- pytorch - PyTorch get_device_capability() 输出说明
- postman - 无法通过无头 api 在撇号中发布文章
- google-apps-script - Google 工作表错误:访问带有 id 的文档时服务电子表格超时
- swift - 集合视图中单元格的宽度不正确
- oracle - 无法使用 Oracle PL/SQL 访问 Web 服务
- javascript - 查找文本并在单选按钮单击时替换它
- c - libcurl 会话和可选的连接重用
- autofac - Autofac RegisterAssemblyTypes 尝试解析所有公共类型
- typescript - console.log 使用 http get 从 json url 记录数据