【问题标题】:Flutter - Delaying json requests to do once per timeFlutter - 每次延迟 json 请求执行一次
【发布时间】:2018-08-01 11:20:44
【问题描述】:

我正在尝试使用多个 jsons 请求做一个仪表板,但我希望该请求一个一个地工作,例如当完成第一个请求时开始第二个,当完成第二个时开始第三个,当完成第三个时开始 N。

我的清单代码:

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

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

【问题讨论】:

    标签: json dart flutter delay


    【解决方案1】:

    首先,当必要的数据不可用时,父窗口小部件应该返回一个进度条。

    服务将被称为 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;
      }
    }
    

    【讨论】:

    • 但是在这种方法中,我需要加载我的 json,但将它们设置在同一个变量“数据”中?我在这个类中有不同的数据。
    • 您可以为每个数据使用多个变量,并且可以将 json 保存在这些变量中。你的例子不完整。编辑您的问题并输入您的整个代码,然后我会更新我的答案。
    【解决方案2】:
     Future.delayed(const Duration(milliseconds: 500), () {
    
          print(" This line is executed after 5 seconds");
    
       });
    

    【讨论】:

    • 500 毫秒是半秒,而不是 5 秒。
    • @JoãoSoares 是的,我分享了一个示例,说明如何延迟处理时间会增加。
    猜你喜欢
    • 2021-06-01
    • 2012-02-14
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    相关资源
    最近更新 更多