Один из способов сделать это - использовать возможности InheritedWidget
.
Сначала создайте InheritedWidget
:
class MyInheritedWidget extends InheritedWidget {
const MyInheritedWidget({
Key key,
VoidCallBack handleOnTap,
Widget child,
}) : assert(color != null),
assert(child != null),
super(key: key, child: child);
final VoidCallBack handleOnTap;
static MyInheritedWidget of(BuildContext context) {
return context.inheritFromWidgetOfExactType(MyInheritedWidget);
}
@override
bool updateShouldNotify(MyInheritedWidget old) => handleOnTap != old.handleOnTap;
}
Этот виджетusefull для извлечения общих данных между дочерними виджетами и одним из их родительских элементов в иерархии.
В главном файле создайте обработчик, соответствующий сигнатуре VoidCallBack
(или измените подпись, если хотите).
void _handleUserInteraction() {
// do you stuff to reset your timer
}
Так что теперь вы должны обернуть PageView
своим InheritedWidget
, чтобы включить его как можно выше в иерархию (как можно ближе к основному, насколько это возможно) и назначить ему метод обработки
MyInheritedWidget(child: PageView(), handleOnTap: _handleUserInteraction)
Наконец, в вашем onTap
вызовите обработчик InheritedWidget:
onTap: () {MyInheritedWidget.of(context).handleOnTap}