首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Navigator.push在onTap witth异步内抛出未处理的异常

Navigator.push在onTap witth异步内抛出未处理的异常
EN

Stack Overflow用户
提问于 2021-07-14 13:27:23
回答 2查看 73关注 0票数 0

我有一个快速的问题,为什么当Navigator.push在onTap中时,不能在async中使用async。删除asyncawait函数很好。Navigator.push就像它应该工作的那样工作。但是,由于onTap中有了未来的函数调用,我无法导航到新类。

代码语言:javascript
运行
复制
  onTap: () async {
       String _courierOrderID = await model.placeCourierOrder(widget.orderInfoMap);
    // placeCourierOrder is just a Future<String> type function and it works fine. Order get placed successfully.
  
print("------- Courier Order Placed  " + _courierOrderID.toString());
print("context: " + _courierOrderID.toString());
  
  Navigator.push(context,
     MaterialPageRoute(
        builder: (context) => CourierOrderSummaryView(singleCourierDataID: _courierOrderID),
                 ),
               );
             },

输出从下面的代码输出,您可以看到我的订单成功放置,但是在Navigator.push行上它会出现未处理的异常。

代码语言:javascript
运行
复制
------- Courier Order Placed  501-1c614
I/flutter (16526): context: LayoutBuilder(renderObject: _RenderLayoutBuilder#f6291 relayoutBoundary=up1 NEEDS-LAYOUT DETACHED)

E/flutter (16526): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe.
E/flutter (16526): At this point the state of the widget's element tree is no longer stable.
E/flutter (16526): To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.
E/flutter (16526): #0      Element._debugCheckStateIsActiveForAncestorLookup.<anonymous closure>
package:flutter/…/widgets/framework.dart:3864
E/flutter (16526): #1      Element._debugCheckStateIsActiveForAncestorLookup
package:flutter/…/widgets/framework.dart:3878
E/flutter (16526): #2      Element.findAncestorStateOfType
package:flutter/…/widgets/framework.dart:3926
E/flutter (16526): #3      Navigator.of
package:flutter/…/widgets/navigator.dart:2706
E/flutter (16526): #4      Navigator.push
package:flutter/…/widgets/navigator.dart:2116
E/flutter (16526): #5      _CourDelivReviewState.build.<anonymous closure>.<anonymous closure>.<anonymous closure>
package:storeifie/…/courierViews/courDelivReview.dart:560
E/flutter (16526): <asynchronous suspension>
E
EN

回答 2

Stack Overflow用户

发布于 2021-07-14 13:34:47

也许这对你有用

代码语言:javascript
运行
复制
  onTap: () async {
       String _courierOrderID = await model.placeCourierOrder(widget.orderInfoMap);
  
  
    await Navigator.push(context,
     MaterialPageRoute(
        builder: (context) => CourierOrderSummaryView(singleCourierDataID: _courierOrderID),
             ),
         );
      },
票数 0
EN

Stack Overflow用户

发布于 2021-07-14 13:37:15

代码语言:javascript
运行
复制
onTap: () async {
       String _courierOrderID = await model.placeCourierOrder(widget.orderInfoMap);
    // placeCourierOrder is just a Future<String> type function and it works fine. Order get placed successfully.
  
print("------- Courier Order Placed  " + _courierOrderID.toString());
print("context: " + _courierOrderID.toString());
  
  if(!mounted){
    print('you are not in this context anymore");
    // you changed the page and now you can't use this context.
  }
  Navigator.push(context,
     MaterialPageRoute(
        builder: (context) => CourierOrderSummaryView(singleCourierDataID: _courierOrderID),
    ),
  );
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68379025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档