美文网首页
Flutter疑难杂症系列二:context中报错 To saf

Flutter疑难杂症系列二:context中报错 To saf

作者: a_simple_coder | 来源:发表于2021-11-25 20:52 被阅读0次

页面有Dialog,如下:


  Future<dynamic> showCompleteMoveDialog(BuildContext context) {
    return showDialog(
        context: context,
        builder: (context) {
          return CommonDialog('确认*****?', ' ',
              cancelTxt: '取消', confirmClick: () => _toDetailPage(context, _locationItem?.billNo));
        });
  }

  _toDetailPage(BuildContext context, String? billNo) {
    Navigator.push(
      context,
      MaterialPageRoute(builder: (con) {
        return MoveStockDetailPage(
          params: {'billNo': billNo},
        );
      }),
    );
  }

弹出dialog后,点击确定,跳转页面时报以下错误:


E/flutter (21072): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe.
E/flutter (21072): At this point the state of the widget's element tree is no longer stable.
E/flutter (21072): 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 (21072): #0      Element._debugCheckStateIsActiveForAncestorLookup.<anonymous closure> (package:flutter/src/widgets/framework.dart:4032:9)
E/flutter (21072): #1      Element._debugCheckStateIsActiveForAncestorLookup (package:flutter/src/widgets/framework.dart:4046:6)
E/flutter (21072): #2      Element.findAncestorStateOfType (package:flutter/src/widgets/framework.dart:4093:12)
E/flutter (21072): #3      Navigator.of (package:flutter/src/widgets/navigator.dart:2736:40)
E/flutter (21072): #4      Navigator.push (package:flutter/src/widgets/navigator.dart:2137:22)
E/flutter (21072): #5      _MoveStockCompletionPageState._toDetailPage (package:flutter_xms/wms/inside/movestock/move_stock_completion_page.dart:312:15)
E/flutter (21072): #6      _MoveStockCompletionPageState._completeMoving (package:flutter_xms/wms/inside/movestock/move_stock_completion_page.dart:303:7)

翻译过来是:

要在dispose()方法中安全地引用小部件的祖先,请通过在小部件的didChangeDependencies()方法中调用inheritFromWidgetOfExactType()来保存对祖先的引用。

意思就是context引用的组件已经被销毁,context不可用。

所以最终原因是context引用错误;
我这里是dialog点击了确定后,dialog已销毁,所以报引用错误;这里改成页面的context即可。

相关文章

网友评论

      本文标题:Flutter疑难杂症系列二:context中报错 To saf

      本文链接:https://www.haomeiwen.com/subject/wpyztrtx.html