1

我在 NodeJs 中构建的 REST API 托管在 Heroku 上。在我的颤振应用程序中,要显示一个小部件,我需要来自 7 条相互关联的路线的数据。我正在使用 http get 来获取数据。问题是,http get 请求是异步的,我需要从多个路由结果中获取 10-20 秒才能获取。这是我的代码片段:

void initState() {
    Future.delayed(Duration.zero).then((value) async {
      setState(() {
        _isLoading = true;
      });
      try {
        await Provider.of<UserProvider>(context, listen: false).fetchAllUser();
        await Provider.of<DoctorProfileProvider>(context, listen: false)
            .fetchAllDoctor();
        await Provider.of<CreatedAppointmentProvider>(context, listen: false)
            .fetchAllCreatedAppointment();
        await Provider.of<InstitutionProvider>(context, listen: false)
            .fetchAllInstitution();
        await Provider.of<ReviewProvider>(context, listen: false)
            .fetchAllReview();
        await Provider.of<ChamberProvider>(context, listen: false)
            .fetchAllChamber();
        await Provider.of<AvailableChamberProvider>(context, listen: false)
            .fetchAllAvailableChamber();
      } catch (err) {
        throw err;
      }
      setState(() {
        _isLoading = false;
      });
    });
    super.initState();
  }

我怎样才能最小化获取时间?

4

1 回答 1

2

尝试同时请求多个 API,并在收到结果后更新 UI:

import 'dart:async';
import 'dart:convert';

import 'package:http/http.dart' as http;

void main() async {
  final urlList = ['http://google.com', 'http://apple.com'];

  final responses = await Future.wait(
    urlList.map((String url) {
      return http.get(url);
    }),
  );

  final List<dynamic> caches = responses.map((response) {
    return json.decode(response.body);
  }).toList();
}
于 2020-10-12T10:30:29.747 回答