首页 > 解决方案 > 传递函数两级深度不起作用

问题描述

我对祖父母有一个功能。我把它传给父母,父母把它传给孩子。该函数在子节点上调用。预期的行为是执行祖父母上的函数,但事实并非如此。什么都没发生。出于测试目的,我还在父级上添加了一个按钮,它可以按预期正常工作。

所以,应该发生的事情是:当点击孩子上的 listTile 时,“从父母打印”应该出现在控制台上。

祖父母(片段):

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

标签: flutter

解决方案


ListTile 孩子上的 onTap 是错误的。

有两种方法可以纠正它:

onTap: onTapChange,

或者

  onTap: () => onTapChange(),

推荐阅读