0

也许标题有点混乱,这就是问题所在。

当我导航到一个新页面时,我将发送一个 http 请求并显示加载微调器,当我返回 http 响应时,页面内容将被替换。

但是有时候,http响应太快了,我总是在动画还没有完成的时候得到响应,所以在动画期间加载微调器会被替换为页面内容。

在替换的那一刻,动画会卡住一点。

我试图在动画完成后发送http请求,但我还没有找到方法。

有没有人有解决这个问题的想法?

推送到新页面:

Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (BuildContext context) => NewPage(id)),
            );

新页面小部件:

class _NewPageState extends State<NewPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
  body: StreamBuilder(
    stream: Repository().getItem(widget.id),
    builder: (context, AsyncSnapshot<Model> itemsSnapshot) {
      if (itemsSnapshot.hasError) {
         return ErrorWigets();
      }

     if (itemsSnapshot.data == null) {
         return Spinner();
     }


      return ListView(
        children: <Widget>[
           // page content
        ],
      );
    },
  ),
);
}
}

Http请求:

class Repository {
  Observable<Model> getItem(String id) {
    return Observable.fromFuture(http.get(
        'api_url${id}'))
    .map((response) {
  if (response.statusCode == 200) {
    return Model.fromJson(json.decode(response.body));
  } else {
    throw Exception('request Failed');
  }
});

我目前的方法是使用流构建器,因此当我尝试导航到新页面时它会立即发出 http 请求。

4

0 回答 0