摇动FutureBuilder并使用Navigator.pushNamed

时间:2019-11-10 10:10:06

标签: flutter

我想做的是显示一个正在加载状态的小部件,同时我正在使用http客户端从Web上获取一些信息。然后根据结果自动导航到其他路线。

这是我的代码:

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
            child: FutureBuilder(
      future: http.get("https://exmaple.com"),
      builder: (BuildContext context, AsyncSnapshot<http.Response> snapshot) {
        switch (snapshot.connectionState) {
          case ConnectionState.none:
            return Text('ConnectionState.none.');
          case ConnectionState.active:
          case ConnectionState.waiting:
            return Text('Awaiting result...');
          case ConnectionState.done:
            if (snapshot.hasError) {
              return Text('Error: ${snapshot.error}');
            } else {
//              Navigator.pushNamed(context, '/route2');
              return Text('Result: ${snapshot.data.statusCode}');
            }
        }
        return null; // unreachable
      },
    )));
  }
}

问题是,如果我添加Navigator.pushNamed(context, '/route2');,它将引发错误。

我了解为什么它会引发错误。我不知道该如何实现。我发现的所有示例都表明,导航是在用户迭代onPressed之后发生的。

1 个答案:

答案 0 :(得分:0)

使小部件保持状态,并使用 initState 函数向服务器发出请求:

  @override
  void initState() {
    super.initState();
    http.get("https://exmaple.com").then((v) => Navigator.of(context).pushNamed('/route2'));
  }