页面有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即可。
网友评论