Flutter - 断言失败:第 61 行第 12 行:'_route == ModalRoute.of(context)':不正确

Posted

技术标签:

【中文标题】Flutter - 断言失败:第 61 行第 12 行:\'_route == ModalRoute.of(context)\':不正确【英文标题】:Flutter - Failed assertion: line 61 pos 12: '_route == ModalRoute.of(context)': is not trueFlutter - 断言失败:第 61 行第 12 行:'_route == ModalRoute.of(context)':不正确 【发布时间】:2021-02-23 06:28:06 【问题描述】:

单击我的应用程序中的按钮时,会打开一个弹出窗口。单击按钮一次,然后它可以正常工作,但是每当我连续单击该按钮 2 3 次时,我都会收到下面给出的错误。

我收到此错误。

flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown while finalizing the widget tree:
flutter: Duplicate GlobalKey detected in widget tree.
flutter: The following GlobalKey was specified multiple times in the widget tree. This will lead to parts of
flutter: the widget tree being truncated unexpectedly, because the second time a key is seen, the previous
flutter: instance is moved to the new location. The key was:
flutter: - [LabeledGlobalKey<FormState>#5f491]
flutter: This was determined by noticing that after the widget with the above global key was moved out of its
flutter: previous parent, that previous parent never updated during this frame, meaning that it either did
flutter: not update at all or updated before the widget was moved, in either case implying that it still
flutter: thinks that it should have a child with that global key.
flutter: The specific parent that did not update after having one or more children forcibly removed due to
flutter: GlobalKey reparenting is:
flutter: - Column(direction: vertical, mainAxisAlignment: start, crossAxisAlignment: center, renderObject:
flutter: RenderFlex#d62e9 relayoutBoundary=up21)
flutter: A GlobalKey can only be specified on one widget at a time in the widget tree.
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      BuildOwner.finalizeTree.<anonymous closure> (package:flutter/src/widgets/framework.dart:2881:15)
flutter: #1      BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2906:8)
flutter: #2      WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:915:18)
flutter: #3      RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
flutter: #4      SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
flutter: #5      SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
flutter: #6      SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
flutter: #10     _invoke (dart:ui/hooks.dart:251:10)
flutter: #11     _drawFrame (dart:ui/hooks.dart:209:3)
flutter: (elided 3 frames from dart:async)
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
'package:flutter/src/widgets/will_pop_scope.dart': Failed assertion: line 61 pos 12: '_route == ModalRoute.of(context)': is not true.
The relevant error-causing widget was: 
  Form-[LabeledGlobalKey<FormState>#5f491] file:///Users/pkimac/Documents/Project/GateInn/lib/screens/GateKeeperManageScreen.dart:78:18
════════════════════════════════════════════════════════════════════════════════════════════════════
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: Failed assertion: boolean expression must not be null
#0      _GateKeeperManageScreenState.showAlertView.<anonymous closure> (package:gateinn/screens/GateKeeperManageScreen.dart:150:11)
#1      _rootRunUnary (dart:async/zone.dart:1198:47)
#2      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
#3      _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
#4      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
#5      Future._propagateToListeners (dart:async/future_impl.dart:725:32)
#6      Future._completeWithValue (dart:async/future_impl.dart:529:5)
#7      _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
#8      _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
#9      Alert.show (package:gateinn/library/alert_view/alert.dart)
<asynchronous suspension>
#10     _GateKeeperManageScreenState.showAlertView (package:gateinn/screens/GateKeeperManageScreen.dart<…>

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
Duplicate GlobalKey detected in widget tree.
════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown building
flutter: Overlay-[LabeledGlobalKey<OverlayState>#abe0f](dependencies: [_EffectiveTickerMode], state:
flutter: OverlayState#3c1ef(entries: [OverlayEntry#00489(opaque: true; maintainState: false),
flutter: OverlayEntry#fabc5(opaque: false; maintainState: true), OverlayEntry#8e6f6(opaque: true;
flutter: maintainState: false), OverlayEntry#9029f(opaque: false; maintainState: true)])):
flutter: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 5098 pos 14:
flutter: '_dependents.isEmpty': is not true.

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
'package:flutter/src/widgets/framework.dart': Failed assertion: line 5098 pos 14: '_dependents.isEmpty': is not true.
The relevant error-causing widget was: 
  FlutterEasyLoading file:///Users/pkimac/Documents/Project/GateInn/lib/main.dart:253:16
════════════════════════════════════════════════════════════════════════════════════════════════════
flutter: #31     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #32     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #33     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #34     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #35     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #36     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #37     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #38     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #39     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #40     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #41     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #42     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #43     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #44     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #45     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #46     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #47     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #48     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #49     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #50     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #51     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #52     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #53     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #54     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #55     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #56     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #57     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #58     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #59     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #60     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #61     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #62     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #63     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #64     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #65     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #66     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #67     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #68     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #69     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #70     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #71     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #72     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #73     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #74     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #75     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #76     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #77     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #78     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #79     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #80     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #81     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #82     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #83     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #84     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #85     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #86     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #87     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #88     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #89     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #90     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #91     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #92     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #93     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #94     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #95     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #96     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #97     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #98     ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #99     _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #100    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #101    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #102    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #103    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #104    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #105    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #106    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #107    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #108    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #109    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #110    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #111    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #112    SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6105:14)
flutter: #113    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #114    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #115    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #116    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #117    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #118    ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4681:14)
flutter: #119    _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:2018:13)
flutter: #120    _InactiveElements.add (package:flutter/src/widgets/framework.dart:2030:7)
flutter: #121    Element.deactivateChild (package:flutter/src/widgets/framework.dart:3605:29)
flutter: #122    RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5740:11)
flutter: #123    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6246:17)
flutter: #124    Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15)
flutter: #125    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16)
flutter: #126    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4800:11)
flutter: #127    Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5)
flutter: #128    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2730:33)
flutter: #129    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:913:20)
flutter: #130    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:302:5)
flutter: #131    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
flutter: #132    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1055:9)
flutter: #133    SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:971:5)
flutter: #137    _invoke (dart:ui/hooks.dart:251:10)
flutter: #138    _drawFrame (dart:ui/hooks.dart:209:3)
flutter: (elided 5 frames from class _AssertionError and dart:async)
flutter:
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
[VERBOSE-2:profiler_metrics_ios.mm(184)] Error retrieving thread information: (ipc/send) invalid destination port
[VERBOSE-2:profiler_metrics_ios.mm(184)] Error retrieving thread information: (ipc/send) invalid destination port

这是我的代码

class _KeeperManageScreenState extends State<KeeperManageScreen> 

  final addFormKey = GlobalKey<FormState>();

  TextEditingController userIdController = TextEditingController();
  TextEditingController passwordController = TextEditingController();
  TextEditingController reEnterPasswordController = TextEditingController();
  
  showAlertView(BuildContext context) 
    var alertStyle = AlertStyle(
      animationType: AnimationType.grow,
      overlayColor: Colors.black87,
      isCloseButton: true,
      isOverlayTapDismiss: true,
      descStyle: TextStyle(fontWeight: FontWeight.bold),
      titleStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: 18),
      animationDuration: Duration(milliseconds: 400),
    );

    Alert(
        context: myGlobals.scaffoldKey.currentContext,
        style: alertStyle,
        title: getTranslated(context, "Test"),
        content: Form(
          key: addFormKey,
          child: Column(
            children: <Widget>[
              TextFormField(
                controller: userIdController,
                decoration: InputDecoration(
                  icon: Icon(Icons.account_circle),
                  labelText: getTranslated(context, "Login Id"),
                ),
              ),
              TextFormField(
                controller: passwordController,
                decoration: InputDecoration(
                  icon: Icon(Icons.lock),
                  labelText: getTranslated(context, "Password"),
                  // hintText: getTranslated(context, "Password")
                ), ,
              ),
              TextFormField(
                controller: reEnterPasswordController,
                decoration: InputDecoration(
                  icon: Icon(Icons.lock),
                  labelText: getTranslated(context, "Confirm Password"),
                ),
              )
            ],
          ),
        ),
        buttons: [
          DialogButton(
            color: appThemeColor,
            onPressed: () 
              onAddBtnPressed();
            ,
            child: Text(
              "Add",
              style: TextStyle(color: Colors.white, fontSize: 20),
            ),
          )
        ]).show();
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      key: myGlobals.scaffoldKey,
      appBar: AppBar(
        title: Text(getTranslated(context, "manage_keeper"),
            textAlign: TextAlign.center),
        actions: <Widget>[
          GestureDetector(
            onTap: () 
              showAlertView(context);
            ,
            child: Icon(
              Icons.add_circle_outline,
              size: 26.0,
            ),
          ),
        ], ,
      ),
      body: Container(),
    );
  


我该如何解决这个错误?

【问题讨论】:

我也遇到了同样的问题,你找到解决办法了吗? @Sneha Singh 我按照下面给出的答案***.com/a/65699614/10563627 【参考方案1】:

删除final

 GlobalKey<FormState> addFormKey = GlobalKey<FormState>();

【讨论】:

嗨,你能解释一下为什么会这样吗?【参考方案2】:

将密钥从 static final 更改为 just final 并添加 debugLabel 为我解决了它

类_SomeState扩展状态

最终的 GlobalKey _formKey = GlobalKey(debugLabel: '_SomeState'); ....

使用final解决这个问题

使用这个--v

最终的 GlobalKey _formKey = GlobalKey();

【讨论】:

【参考方案3】:

返回一个Future,它解析为关闭对话框时传递给Navigator.pop的值。

class KeeperManageScreenState extends StatelessWidget 

  Future<AlertDialog> _onLogOutPressed(BuildContext context) 
    return showDialog<AlertDialog>(
      context: context,
      builder: (BuildContext context) 
        return AlertDialog(
          title: Text("Log out?"),
          content: Text("Are you sure you want to log out?"),
          actions: <Widget>[
            FlatButton(
              child: const Text('CANCEL'),
              onPressed: () 
              ,
            ),
            FlatButton(
              child: const Text('Done'),
              onPressed: () 
              ,
            )
          ],
        );
      ,
    );
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
          title: Text("Test Popup",
              textAlign: TextAlign.center),
          actions: <Widget>[
            GestureDetector(
              onTap: () 
                _onLogOutPressed(context);
              ,
              child: Icon(
                Icons.expand_less,
                size: 26.0,
              ),
            ),
          ],
      ),
      body: Container(),
    );
  

【讨论】:

【参考方案4】:

这是由于 Flutter 中小部件的生命周期造成的。当调用 initState 时,框架正忙于将小部件渲染到小部件树。澄清一下,当当前的小部件尚未渲染时,您不能移动到另一个小部件或弹出对话框。

您要做的就是等到当前活动完全构建完成,然后再做您的工作,虽然我们无法知道活动是否完全构建,但我们需要明确建议等待一段时间。

在弹出语句前写下这段代码

await Future.delayed(Duration(seconds: 1));

希望它对所有人都有效。

【讨论】:

以上是关于Flutter - 断言失败:第 61 行第 12 行:'_route == ModalRoute.of(context)':不正确的主要内容,如果未能解决你的问题,请参考以下文章

颤动:使用navigator.dart时失败断言

断言失败:第 551 行 pos 12:'child.hasSize':不正确

断言失败:第 6075 行 pos 12:'child == _child':不正确

Flutter 错误 - 断言失败:第 213 行 pos 15:'data != null':在从 firestore 获取数据时不正确

Flutter 中的 Dart Futures 问题:断言失败:第 146 行:'<optimized out>': is not true

断言失败:/C:/Flutter/sdk/flutter/packages/flutter/lib/src/widgets/will_pop_scope.dart:135:12 _route == M