Есть ли у GlobalKey аналог HookWidget?

Я хочу позвонить onPopPageв следующем коде в родительском виджете. Традиционно я могу использовать GlobalKey<SomeState>().currentState.someMethod.

Но что лучше всего с HookWidget?

class SomeWidget extends HookWidget {
  final innerNavigatorKey = GlobalKey<NavigatorState>();
  
  @override
  Widget build(BuildContext context) {
    final isPasswordReset = useState(false);

    final onPopPage = useMemoized(() => (_, __) {
          if (isInInnerRoute.value &&
              innerNavigatorKey.currentState?.onWillPop() == true) {
            return true;
          }
          return false;
        });

    return Navigator(
      pages: [
        NoTransitionPage(child: _buildLogin(() {
          isInInnerRoute.value = true;
        })),
        if (isInInnerRoute.value)
          NoTransitionPage(
              child: SomePage(navigatorKey: innerNavigatorKey)),
      ],
      onPopPage: onPopPage,
    );
  }
}

class NoTransitionPage extends Page {
  final Widget child;

  NoTransitionPage({Key key, this.child}) : super(key: key);

  Route createRoute(BuildContext context) {
    return PageRouteBuilder(
      maintainState: false,
      settings: this,
      pageBuilder: (_, __, ___) => child,
    );
  }
}

1 ответ

Я спросил автора библиотеки и получил ответ. Суть в том, что следует избегать использования ключей.

Другие вопросы по тегам