Обратный вызов ListView onTap не работает Flutter - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть виджет WeekdayCell, который используется для создания ListView. Все логи c, которые изменяют цвет текста, когда выбранный вызывающий виджет onTap работает ожидаемо, но обратные вызовы onTap: и onTapCancel: из ListView не выполняются, так как я не получаю никакой печати в консоли при нажатии на ячейку , Можете ли вы заметить, что я делаю неправильно?
Как всегда большое спасибо за ваше время и помощь.

Виджет:

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:

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);
            },
          ),
        ),
      ),

1 Ответ

1 голос
/ 09 апреля 2020

Вы забыли добавить скобки. widget.onTap и widget.onTapCancel дает ссылку на функцию. Для его вызова / выполнения необходимо написать:

widget.isSelected == false ? widget.onTap() : widget.onTapCancel();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...