【发布时间】:2020-07-11 00:47:51
【问题描述】:
我有一个要求用户输入的第一个屏幕,然后当用户单击一个按钮时,应用程序会进入第二个屏幕,该屏幕使用 FutureBuilder 调用 API。
如果 API 返回错误,我想使用 Navigator.pop 返回上一个屏幕。当我尝试在 FutureBuilder 的构建器中执行此操作时,我收到一个错误,因为我在构建树时修改了它...
setState() 或 markNeedsBuild() 在构建期间调用。这个覆盖 无法将小部件标记为需要构建,因为框架是 已经在构建小部件的过程中
如果发生错误,转到上一个屏幕的正确方法是什么?
class Stackoverflow extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FutureBuilder<Flight>(
future: fetchData(context),
builder: (context, snapshot) {
if (snapshot.hasData) {
return ScreenBody(snapshot.data);
} else if (snapshot.hasError) {
Navigator.pop(context, "an error");
}
// By default, show a loading spinner.
return CircularProgressIndicator();
},
)
),
);
}
}
PS:我尝试使用 addPostFrameCallback 并使用里面的 Navigator.pop,但由于某些未知原因,它被多次调用
【问题讨论】:
-
请分享您的代码????
-
也发布错误。
-
错误是什么?
-
你能确认它在这条线上崩溃了吗?
Navigator.pop(context, "an error"); -
是的。我确认它在这条线上崩溃了。