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

时间:2020-11-11 09:29:23

标签: flutter dart popup flutter-layout flutter-widget

在我的应用程序中单击一个按钮后,将打开一个弹出窗口。单击一次按钮,然后工作正常,但是每当我连续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

enter image description here

这是我的代码

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(),
    );
  }

}

如何解决此错误?

2 个答案:

答案 0 :(得分:1)

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

class _SomeState 扩展状态 {

final GlobalKey _formKey = GlobalKey(debugLabel: '_SomeState'); ....

用final解决这个问题

使用这个--v

final GlobalKey _formKey = GlobalKey();

答案 1 :(得分:0)

删除final

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