传递函数两级深度不起作用



我在Grandparent上有一个函数。我把它传给家长,家长再传给孩子。函数是在子对象上调用的。预期的行为是执行了祖父母上的函数,但没有执行。什么也没发生。出于测试目的,我还在父级上包含了一个按钮,它可以正常工作。

因此,应该发生的是:当点击子项上的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(),
);
}
}

ListTile子项上的onTap是错误的。

有两种方法可以纠正:

onTap: onTapChange,

onTap: () => onTapChange(),

最新更新