簡體   English   中英

顫振,復選框狀態不變,怎么辦?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM