在小部件树中检测到 Flutter Duplicate GlobalKey

时间:2021-05-09 07:35:11

标签: flutter flutter-layout flutter-web

我在切换到另一个页面(从登录页面到仪表板页面)时遇到了这个问题。

错误:

在小部件树中检测到重复的 GlobalKey。

... 由于 GlobalKey 重新父级而强制移除一个或多个子级后未更新的特定父级是:

  • 展开(flex: 1)

代码:

class LoginPage extends StatelessWidget {
  final GlobalKey<ScaffoldState> _key = GlobalKey<ScaffoldState>();
  final FocusNode passFocus = FocusNode();
  final FocusNode emailFocus = FocusNode();

  @override
  Widget build(BuildContext context) {
    final authProvider = Provider.of<AuthProvider>(context);

    return authProvider.status == Status.Authenticating
        ? Loading()
        : Scaffold(
          key: _key,
            body: ...

class LayoutTemplate extends StatelessWidget {
  final GlobalKey<ScaffoldState> _key = GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _key,
      body: ...

这是我的导航服务:

class NavigationService {
  final GlobalKey<NavigatorState> navigatorKey =
  GlobalKey<NavigatorState>();

  Future<dynamic> navigateTo(String routeName, {ArgumentsClass arguments}) {
    return navigatorKey.currentState.pushNamed(routeName, arguments: arguments);
  }

  Future<dynamic> globalNavigateTo(String routeName, BuildContext context) {
    return Navigator.of(context).pushNamed(routeName);
  }

  void goBack() {
    return navigatorKey.currentState.pop();
  }
}

1 个答案:

答案 0 :(得分:0)

您在导航服务中创建了一个密钥并将其发送到任何地方 脚手架键是一种独特的东西,你必须在一个特定的页面中创建和使用它