FutureBuilder返回数据后如何导航到屏幕?

时间:2020-04-01 18:18:17

标签: flutter dart

使用Future初始化应用后,我从远程JSON文件中获取数据。

return有数据时,我想导航至新屏幕,而不是widget中的FutureBuilder

我现在使用的方式:

@override
  Widget build(BuildContext context) {
    return FutureBuilder<void>(
        future: getDataFromJsonFile(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return CircularProgressIndicator();
          }
          return AnotherScreen();
        });
  }

相反,我想导航到新屏幕:

@override
  Widget build(BuildContext context) {
    return FutureBuilder<void>(
        future: getDataFromJsonFile(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return CircularProgressIndicator();
          }
          Navigator.pushReplacementNamed(context, "/manatx");
        });
  }

很明显,第二个代码块导致错误:setState() or markNeedsBuild() called during build

有人知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

使用WidgetsBinding.instance.addPostFrameCallback()将等待您的Widget构建调用其中的操作,如下所示:

@override
Widget build(BuildContext context) {
    return FutureBuilder<void>(
        future: getDataFromJsonFile(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return CircularProgressIndicator();
          }
          //Wait flutter finish build...
          WidgetsBinding.instance.addPostFrameCallback((_) {
            //When finish, call actions inside
            Navigator.pushReplacementNamed(context, "/manatx");
          });
        });
  }