代码之家  ›  专栏  ›  技术社区  ›  Doua Beri

Flutter FutureBuilder并使用Navigator.pushNamed导航到不同的路线

  •  0
  • Doua Beri  · 技术社区  · 5 年前

    我要做的是在使用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 回复  |  直到 5 年前
        1
  •  0
  •   Igor Kharakhordin    5 年前

    使您的小部件有状态并使用 初始状态 向服务器发出请求的函数:

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