来自 FutureBuilder 的 Navigator.pop

poi*_*rez 2 state navigator flutter

我有一个第一个屏幕,要求用户输入内容,然后当用户单击按钮时,应用程序会进入第二个屏幕,该屏幕使用 FutureBuilder 调用 API。

如果 API 返回错误,我想使用 Navigator.pop 返回到上一个屏幕。当我尝试在 FutureBuilder 的构建器中执行此操作时,我收到错误,因为我在构建树时修改了树......

在构建期间调用 setState() 或 markNeedsBuild()。该 Overlay 小部件无法标记为需要构建,因为框架已经在构建小部件的过程中

如果发生错误,转到上一屏幕的正确方法是什么?

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();
            },
          )
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

PS:我尝试使用addPostFrameCallback并使用里面的Navigator.pop,但由于某种未知的原因,它被多次调用

Vir*_*iya 8

当构建方法运行时,您无法直接导航,因此最好显示一些错误屏幕并给用户机会返回到上一个屏幕。

但是,如果您想这样做,则可以使用以下语句来执行此操作。

Future.microtask(() => Navigator.pop(context));
Run Code Online (Sandbox Code Playgroud)