gpt4 book ai didi

Flutter,复选框状态没有改变,怎么办?

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

我有一个 ListView 构建器,它创建了一些 ListTitle,其中有一个复选框。

当我在复选框的 onChangedsetState 时,值似乎没有改变。

class ProjectPage extends StatefulWidget {
final project;

ProjectPage({Key key, this.project}) : super(key: key);

@override
_ProjectPageState createState() => new _ProjectPageState();
}

class _ProjectPageState extends State<ProjectPage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Container(
child: Column(
children: <Widget>[
new Expanded(
child: new ListView.builder(
itemBuilder: (BuildContext context, int index) => new ItemsItem(item: widget.project.items[index]),
itemCount: widget.project.items.length,
),
),
],
),
),
);
}
}

class ItemsItem extends StatefulWidget {
final item;

ItemsItem({Key key, this.item}) : super(key: key);

@override
_ItemsItemState createState() => new _ItemsItemState();
}

class _ItemsItemState extends State<ItemsItem> {
final GlobalKey<ScaffoldState> _mainState = new GlobalKey<ScaffoldState>();

@override
Widget build(BuildContext context) {
bool _isCompleted = widget.item.isCompleted;

return new ListTile(
key: _mainState,
title: new Row(
children: <Widget>[
new Expanded(child: new Text(widget.item.name)),
new Checkbox(
value: _isCompleted,
onChanged: (bool newValue) {
setState(() {
_isCompleted = newValue;
});
},
),
],
),
);
}
}

这似乎并没有改变值

setState(() {
_isCompleted = newValue;
});

有什么想法吗?

编辑:项目类

class Item {
final int id;
final String name;
final bool isCompleted;

Item({
this.id,
this.name,
this.isCompleted,
});

Item.fromJson(Map json)
: id = json['id'],
name = json['name'],
isCompleted = json['isCompleted'],

set isCompleted(bool value) {
isCompleted = value;
}
}

最佳答案

_isCompleted 是构建方法中的局部变量。当复选框的状态发生变化时,您将局部变量设置为新值。 setState 导致再次调用 build 方法,它从 widget.item.isCompleted 获取旧的和未更改的值。您需要将 widget.item.isCompleted 设置为新的更改值:

setState(() {
widget.item.isCompleted = newValue;
});

顺便说一句,因为您的 ItemsItem 只是一个包含一行文本和一个复选框的 ListTile,您应该使用内置小部件 CheckboxListTile

关于Flutter,复选框状态没有改变,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971221/

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