在我的应用程序中,我需要在 call 之前执行代码Navigator.push
。但问题是如果用户在执行代码之前按下后退按钮,则会出现错误:
E/flutter(8415):[错误:flutter/lib/ui/ui_dart_state.cc(148)]未处理的异常:查找已停用小部件的祖先是不安全的。E/flutter (8415):此时小部件的元素树的状态不再稳定。E/flutter (8415):要在其 dispose() 方法中安全地引用小部件的祖先,请通过在小部件的 didChangeDependencies() 方法中调用 inheritFromWidgetOfExactType() 来保存对祖先的引用。
Navigator.push
问题是即使用户按下后退按钮(在 中) ,代码仍在执行并且正在调用Widget2
。
这是mwe:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Widget1(),
);
}
}
class Widget1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Widget2(),
));
},
),
),
);
}
}
class Widget2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(body: RaisedButton(
onPressed: () async {
// Press back button before Future complete
await Future.delayed(Duration(seconds: 5));
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Widget3(),
));
},
));
}
}
class Widget3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(child: Text('Widget 3'));
}
}