[英]Flutter, checkbox state doesn't change, how to?
我有一個ListView
器,該生成器創建了幾個ListTitle
,其中帶有一個復選框。
當我在復選框的onChanged
上設置setState
時,該值似乎沒有改變。
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是build方法內的局部變量。 當復選框的狀態更改時,可以將局部變量設置為新值。 setState導致再次調用build方法,該方法從widget.item.isCompleted獲取舊的和未更改的值。 您需要將widget.item.isCompleted設置為新的更改值:
setState(() {
widget.item.isCompleted = newValue;
});
順便說一句,由於您的ItemsItem只是一個ListTile,其中包含帶有文本和Checkbox的行,因此您應該使用內置小部件CheckboxListTile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.