我想做的是显示一个正在加载状态的小部件,同时我正在使用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
之后发生的。
答案 0 :(得分:0)
使小部件保持状态,并使用 initState 函数向服务器发出请求:
@override
void initState() {
super.initState();
http.get("https://exmaple.com").then((v) => Navigator.of(context).pushNamed('/route2'));
}