我在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(),