首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListView onTap回调不工作颤振

问ListView onTap回调不工作颤振
EN

Stack Overflow用户
提问于 2020-04-08 20:42:48
回答 1查看 425关注 0票数 0

我有一个小部件WeekdayCell,用于构建一个ListView。当选择调用小部件的onTap时,使文本更改颜色的所有逻辑都是预期的,但是onTap:和onTapCancel:从ListView回调不执行,因为当我点击单元格时,控制台中没有任何打印。你能发现我做错了什么吗?

一如既往地感谢你的时间和帮助。

小部件:

代码语言:javascript
复制
class WeedayCell extends StatefulWidget {
  String day;
  bool isSelected;
  Function onTap;
  Function onTapCancel;
  WeedayCell(
      {@required this.day,
      @required this.isSelected,
      @required this.onTap,
      @required this.onTapCancel});
  @override
  List<Object> get props => [day, isSelected];
  @override
  _WeedayCellState createState() => new _WeedayCellState();
}

class _WeedayCellState extends State<WeedayCell> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: new Column(
        children: [
          new ListTile(
            selected: widget.isSelected,
            title: Text(
              '${widget.day}',
              style: TextStyle(
                  color: widget.isSelected == false
                      ? Colors.black
                      : Colors.redAccent,
                  fontSize: 20,
                  fontWeight: FontWeight.w500),
            ),
            onTap: () {
              setState(() {
                widget.isSelected == false ? widget.onTap : widget.onTapCancel;
                widget.isSelected = !widget.isSelected;
              });
            },
          )
        ],
      ),
    );
  }
}

ListView:

代码语言:javascript
复制
body: Container(
        padding: EdgeInsets.all(20),
        child: ListView.builder(
          itemCount: weekdays.length,
          itemBuilder: (BuildContext context, int index) => WeedayCell(
            day: '${weekdays[index]}',
            isSelected: false,
            onTap: () {
//            repeatWeekdays.add(weekdays[index]);
              repeatWeekdays.add(index);
              print(repeatWeekdays);
            },
            onTapCancel: () {
//            int indexToRemove = repeatWeekdays.indexOf(weekdays[index]);
//            repeatWeekdays.removeAt(indexToRemove);
              repeatWeekdays.remove(index);
              print(repeatWeekdays);
            },
          ),
        ),
      ),
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 21:05:41

你忘了加括号了。widget.onTap和widget.onTapCancel为您提供了函数的引用。要调用/执行它,需要编写:

代码语言:javascript
复制
widget.isSelected == false ? widget.onTap() : widget.onTapCancel();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61109678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档