flutter - 传递函数两级深度不起作用
问题描述
我对祖父母有一个功能。我把它传给父母,父母把它传给孩子。该函数在子节点上调用。预期的行为是执行祖父母上的函数,但事实并非如此。什么都没发生。出于测试目的,我还在父级上添加了一个按钮,它可以按预期正常工作。
所以,应该发生的事情是:当点击孩子上的 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(),
推荐阅读
- python - 显示估计器的所有参数,包括默认值
- microsoft-graph-api - 多租户应用程序的授权 API 响应中不存在刷新令牌
- javascript - 那里有一个 y 轴数据点,但每周图表中缺少 x 轴数据点
- docker - 如何清除与(kubernetes)k8s相关的容器?
- serial-port - 逆向工程串行协议
- node.js - 如何获取渲染的 html 的屏幕截图来创建 png?
- javascript - 运行 google 电子表格的 javascript 代码时,显示“TypeError: Cannot read property 'createEvent' of null”消息
- visual-studio - 当 ItemsSource 加载大数据时,Xamarin.Forms 会阻止 UI
- haskell - 模式绑定:为什么允许递归模式?
- vb6 - 在 Tally ERP9 响应 xml 中