Функция прохождения двух уровней глубоко не работает - PullRequest
1 голос
/ 22 апреля 2020

У меня есть функция на бабушке и дедушке. Я передаю его родителю, а родитель передает его ребенку. Функция вызывается на ребенка. Ожидаемое поведение заключается в том, что функция на бабушке и дедушке выполняется, но это не так. Ничего не произошло. В целях тестирования я также включил кнопку на родительском элементе, которая работает правильно, как и ожидалось.

Итак, что должно произойти: при нажатии listTile на дочернем элементе на консоли должно появиться «print from parent» .

Дедушка (фрагмент):

StateLoaded(
   vm: vm,
   procesStatus: _procesStatus,
   onTapChange: () => print('print from parent'),
),

Родитель (фрагмент):

class StateLoaded extends StatelessWidget {
  const StateLoaded({
    @required this.vm,
    @required ProcesStatus procesStatus,
    @required this.onTapChange,
  }) : _procesStatus = procesStatus;

  final AuthViewModel vm;
  final ProcesStatus _procesStatus;
  final Function() onTapChange;

  @override
  Widget build(BuildContext context) {
    return Visibility(
      visible: vm.failureVm.failure == null &&
          vm.isAuth &&
          _procesStatus == ProcesStatus.loaded,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          SizedBox(height: 8),
          Avatar(),
          Divider(),
          UserName(vm: vm, onTapChange: onTapChange),

Ребенок:

class UserName extends StatelessWidget {
  const UserName({
    @required this.vm,
    @required this.onTapChange,
  });

  final AuthViewModel vm;
  final Function() onTapChange;

  @override
  Widget build(BuildContext context) {
    return ListTile(
      leading: Icon(
        SimpleLineIcons.pencil,
        color: Theme.of(context).primaryColor,
        size: 18,
      ),
      title: Text(
        vm.userName ?? '',
        style: linkTextStyle,
      ),
      onTap: onTapChange(),
    );
  }
}

1 Ответ

0 голосов
/ 22 апреля 2020

OnTap на дочернем элементе ListTile неверен.

Есть два способа исправить это:

onTap: onTapChange,

или

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