【发布时间】:2020-02-24 16:04:21
【问题描述】:
在我的应用程序中,我需要在调用 Navigator.push 之前执行代码。但问题是如果用户在执行代码之前按下返回按钮则会出现错误:
E/flutter (8415): [错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:查找已停用小部件的祖先是 不安全。 E/flutter (8415):此时小部件的状态 元素树不再稳定。 E/flutter(8415):安全参考 在它的 dispose() 方法中到一个小部件的祖先,保存一个对 通过调用小部件的inheritFromWidgetOfExactType() 的祖先 didChangeDependencies() 方法。
问题是代码仍在执行,即使用户按下后退按钮(Widget2),也会调用Navigator.push。
这是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'));
}
}
【问题讨论】:
标签: flutter dart flutter-navigation flutter-onpressed