У меня есть функция на бабушке и дедушке. Я передаю его родителю, а родитель передает его ребенку. Функция вызывается на ребенка. Ожидаемое поведение заключается в том, что функция на бабушке и дедушке выполняется, но это не так. Ничего не произошло. В целях тестирования я также включил кнопку на родительском элементе, которая работает правильно, как и ожидалось.
Итак, что должно произойти: при нажатии 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(),
);
}
}