Flutter-延迟JSON请求每次执行一次

时间:2018-08-01 11:20:45

标签: json dart flutter delay

我正在尝试使用多个jsons请求创建仪表板,但我希望该请求一个接一个地工作,例如当完成第一个请求时启动第二个请求,当第二个完成时启动第三个请求,而第三个完成时启动N。

我的列表代码:

new CustomScrollView(
          cacheExtent: height * 6,
            slivers: [
              new SliverList(
                  delegate: new SliverChildListDelegate(
                    [
                      new RelatorioVendPeriodoAPeriodo(),
                      new RelatorioMensals(),
                      new RelatorioDiasDaSemanas(),
                      new RelatorioVendasTotalidasPorPeriodo(),
                      new RelatorioDasVendasTotsProdutos(),
                    ]
                  )
              )
            ]
        ),

这个新类调用,为我返回请求。有人知道如何延迟吗?

2 个答案:

答案 0 :(得分:0)

首先,当没有必要的数据时,父窗口小部件应返回进度条。

一个服务将被称为initState以从后端获取数据。数据准备就绪后,将调用setState()来重绘窗口小部件。

看这个例子:

class _TestWidgetState extends State<TestWidget> {
  var data;

  @override
  void initState() {
   data = NetworkService.getData().then((data) {
     setState(() {
       this.data = data;
     });
   });
  }

  @override
  Widget build(BuildContext context) {
    if (data == null) {
      return CircularProgressIndicator();
    } else {
      return
        new CustomScrollView(
            cacheExtent: height * 6,
            slivers: [
              new SliverList(
                  delegate: new SliverChildListDelegate(
                      [
                        new RelatorioVendPeriodoAPeriodo(data: data),
                        new RelatorioMensals(data: data),
                        new RelatorioDiasDaSemanas(data: data),
                        new RelatorioVendasTotalidasPorPeriodo(data: data),
                        new RelatorioDasVendasTotsProdutos(data: data),
                      ]
                  )
              )
            ]
        );
  }
  }
}

class NetworkService {
  final JsonDecoder _decoder = new JsonDecoder();

  static String data1;
  static String data2;

  static getData() async {
    if (data1 == null || data2 == null) {
      await fetchFromServer();
    }
    return {'data1': data1, 'data2': data2};
  }

  static fetchFromServer() async {
    data1 = (await http.get('url')).body;
    data2 = (await http.get('url')).body;
  }
}

答案 1 :(得分:0)

 Future.delayed(const Duration(milliseconds: 500), () {

      print(" This line is executed after 5 seconds");

   });