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)':不正确的主要内容,如果未能解决你的问题,请参考以下文章
断言失败:第 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