首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何设置定时器在颤动中定期更新API数据

如何设置定时器在颤动中定期更新API数据
EN

Stack Overflow用户
提问于 2020-05-22 11:31:10
回答 1查看 1.2K关注 0票数 0

我从API中获取数据并将其加载到列表视图中。我的listview显示了查询的结果,没有任何问题。我想通过定期从API获取数据来更新我的列表视图。做这件事最好的方法是什么?

这就是我在主屏幕的initState中调用API方法的方式。

代码语言:javascript
运行
AI代码解释
复制
@override
  void initState() {
    // TODO: implement initState
    super.initState();
    _fixtureData = getFixture();
  }

  Future<List<Fixtures>> getFixture() async {
    fixtureList = await FootballApi.getFixtureData();
    return fixtureList;
  }

这是我在主屏幕上用FutureBuilder呈现ListView的代码。

代码语言:javascript
运行
AI代码解释
复制
              FutureBuilder<List<Fixtures>>(
                  future: _fixtureData,
                  builder: (context, snapshot) {
                    if (snapshot.hasData) {
                      fixtureList = snapshot.data;

                      return AppListView(
                        matchList: fixtureList,
                        //callback function brings the matchCounter value from ListView class
                        onChange: (value) {
                          setState(() {
                            matchCounter = value;
                          });
                        },
                        finalBetList: (value) {
                          setState(() {
                            betList = value;
                          });
                        },
                      );
                    }
                    return Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        SizedBox(
                          child: CircularProgressIndicator(),
                          width: 60,
                          height: 60,
                        ),
                        const Padding(
                          padding: EdgeInsets.only(top: 16),
                          child: Text(
                            'Awaiting result...',
                            style: TextStyle(color: Colors.white),
                          ),
                        )
                      ],
                    );
                  },
                ),

这段代码就是我调用的API方法。

代码语言:javascript
运行
AI代码解释
复制
static Future<List<Fixtures>> getFixtureData() async {
    Map<String, String> queryParameters = {
      'league': '79',
      'next': '5',
    };


    http.Response response = await http.get(
      getUrl('fixtures', queryParameters),
      headers: requestHeaders,
    );

    if (response.statusCode == 200) {
      String data = response.body;
      List<dynamic> result = jsonDecode(data)['response'];

      for (int i = 0; i < result.length; i++) {
        Fixtures fixture = Fixtures();

        fixture.leagueID = jsonDecode(data)['response'][i]['league']['id'];
        fixture.country = jsonDecode(data)['response'][i]['league']['country'];
        fixture.leagueName = jsonDecode(data)['response'][i]['league']['name'];
        fixture.fixtureID = jsonDecode(data)['response'][i]['fixture']['id'];

        //get Odds to match with fixtures by fixtureID
        await getOddsData(fixture.fixtureID);

        fixture.dateTime =
            DateTime.parse(jsonDecode(data)['response'][i]['fixture']['date']);
        fixture.homeTeam =
            jsonDecode(data)['response'][i]['teams']['home']['name'];
        fixture.awayTeam =
            jsonDecode(data)['response'][i]['teams']['away']['name'];
        fixture.status =
            jsonDecode(data)['response'][i]['fixture']['status']['long'];
        fixture.homeGoals = jsonDecode(data)['response'][i]['goals']['home'];
        fixture.awayGoals = jsonDecode(data)['response'][i]['goals']['away'];
        fixture.htScoreHome =
            jsonDecode(data)['response'][i]['score']['halftime']['home'];
        fixture.htScoreAway =
            jsonDecode(data)['response'][i]['score']['halftime']['away'];
        fixture.ftScoreHome =
            jsonDecode(data)['response'][i]['score']['fulltime']['home'];
        fixture.ftScoreAway =
            jsonDecode(data)['response'][i]['score']['fulltime']['away'];

        if (oddsList.length > 0) {
          for (int j = 0; j < oddsList.length; j++) {
            if (oddsList[j].fixtureID == fixture.fixtureID) {
              fixture.homeOdds = oddsList[j].homeOdds;
              fixture.drawOdds = oddsList[j].drawOdds;
              fixture.awayOdds = oddsList[j].awayOdds;
              fixture.bookmakerName = oddsList[j].bookmakerName;
              FootballApi.fixtureList.add(
                  fixture);
            }
          }
        }
      }
    } else {
      print('statusCode: ' + response.statusCode.toString());
    }

    return FootballApi.fixtureList;
  }
EN

回答 1

Stack Overflow用户

发布于 2020-05-22 13:04:29

定时器是个不错的选择。一旦你的状态被初始化,启动一个计时器,一旦小部件被释放,它就被释放。在计时器内部,调用小部件的API和setState

代码语言:javascript
运行
AI代码解释
复制
 @override
 void initState() {
   getFixture();
   _timer = new Timer.periodic(Duration(seconds: 30), 
   (_) => getFixture());
   super.initState();
 }

 @override
 void dispose() {
   _timer.cancel();
   super.dispose();
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61954029

复制
相关文章
Linux中设置定期备份oracle数据库
昨天装好了oracle,今天尝试一下自动备份,我这两天装linux和oracle的目的就是这个。
明年我18
2019/09/18
1.9K0
定期更新 Homebrew
Homebrew 是使用 Mac OS 的一件利器,Homebrew 可以安装 Apple 没有预装但非常需要的东西。Homebrew 会将软件包安装到独立目录,并将其文件软链接至 /usr/local。
spilledyear
2021/09/07
1.3K0
[转]你应该定期更新 Homebrew
这篇文章是关于定期更新 Homebrew 的话题。它会告诉你定期更新的好处,常用的命令,以及用 brew pin 尽可能无痛地更新。
FungLeo
2019/05/26
1.5K0
JS设置定时器_js设置定时器
每个JS定时器产生时会被系统分配一个id,这个id是正整数,而且一个页面里面的定时器id不重复,我们能用一个变量接收这个id,但是如果重复执行一条接收创建语句,那么你只能接收到最新创建的定时器的id,之前创建的定时器的id会被覆盖,但是定时器数量在增加,这就会导致界面一些功能错乱,解决方法就是在重复按开始按钮时,如果已经有了一个定时器那么就不执行语句,我列出了错误代码和三种解决方法,可以解决定时器重复创建问题。 ps:定时器id的配发是递增的,从1开始累加,但是有一个小细节,就是当你在一次页面运行的过程中,打个比方,你创建了第五个定时器,它的id为5,然后你把它销毁,再创建一个定时器,那么这个定时器的编号会是6,而不是5,5号id是不会因为第五个定时器器的销毁而可以被再次使用。
全栈程序员站长
2022/11/15
30K0
在 Linux 上使用 systemd 设置定时器
定时器增加了另一种启动服务的方式,基于……时间。尽管与定时任务很相似,但 systemd 定时器稍微地灵活一些。让我们看看它是怎么工作的。
用户8989785
2021/09/10
1.7K0
在腾讯云容器服务中对容器实例日志设置定期清理和回卷
腾讯云容器服务团队
2017/07/17
5.8K1
在腾讯云容器服务中对容器实例日志设置定期清理和回卷
Tomcat调优(不定期更新)
之后会多出两个文件夹 进入org/apache/catalina/util编辑配置文件ServerInfo.properties 修改为
仙人技术
2020/04/29
9580
如何使用RAUDI定期自动更新你的Docker镜像
RAUDI是一款功能强大的Docker镜像自动更新工具,RAUDI基于GitHub Actions实现其功能,在该工具的帮助下,广大研究人员可以轻松地定期自动更新Docker镜像,并保持你所使用的Docker镜像为最新版本。
FB客服
2022/02/25
1.4K0
如何使用RAUDI定期自动更新你的Docker镜像
Excel函数(不定期持续更新)
vlookup有个缺点是无法从右向左查询,可以用index和match嵌套查询实现
hankleo
2020/09/16
5950
Excel函数(不定期持续更新)
Perl 工作积累(不定期更新)
s1mba
2017/12/28
1.4K0
Perl 工作积累(不定期更新)
PowerPoint中如何设置现在时间并实时更新
在工作中,PowerPoint做实时时间可以通过Add-in也可以通过VB来做,下面我用VB来做,本文最后还有做好的模板文件。
繁华是客
2023/03/03
2K0
PowerPoint中如何设置现在时间并实时更新
SQL Server 2008数据库定期自动备份的设置
SQL Server2008 本身具有定期自动备份功能,我们只需要通过简单的配置就可以实现非常简单高效的自动备份功能。
星哥玩云
2022/08/17
2.9K0
SQL Server 2008数据库定期自动备份的设置
Oracle_杂货箱_不定期更新
或者 pl/sql developer 里查看【Reports】——>【DBA】——>【NLS Database Parameters】下的NLS_RDMBS_VERSION。
小小工匠
2021/08/16
2920
在iis中如何设置站点的编码格式?
二、步骤        打开iis,选择一个站点,在右侧的asp.net区域里,找到‘.NET全球化’项。
习惯说一说
2019/08/08
7.1K0
在iis中如何设置站点的编码格式?
Discourse 如何设置 API 的 key
在用户级别部分,你可以为这个 API Key 设置为全局访问还是只能是针对一个特定的用户使用这个 key。
HoneyMoose
2021/01/18
9660
Discourse 如何设置 API 的 key
WordPress 教程:在 WordPress 中如何设置定时作业
我们知道 Linux 服务器有个 Cron 的功能,可以用来设置定时执行的作业,但是并不是每个人都熟悉 Linux 系统,并且也不是所有的主机管理面板都有 Cron 栏目。
Denis
2023/04/13
2.4K0
WordPress 教程:在 WordPress 中如何设置定时作业
windows 小技巧搜集(不定期更新)
1、更改cmd的默认路径 你可以在注册表的“HKEY_CURRENT_USER\Software\Microsoft\CommandProcessor” 下面新建一个名为AutoRun的字串,并设置该字串值为 cd /d "C:\Users\june\Desktop" 来改变该默认路径。 下次用CMD进入DOS提示符窗口,默认路径就是 C:\Users\june\Desktop 了。 2、windows8 锁屏时间及其超时关闭显示器时间 锁屏后超时关闭屏幕时间: Windows Registry Edito
用户1177713
2018/02/24
3.6K0
python 多线程实现定期更新ip库
    通过最近监控发现,使用第三方Cdn公司的带宽偏高。由于最近没有增加新的业务。感觉其中肯定有问题。按照我们的Cahe架构,用户首先到我们自建Cache节点获取数据,如果该区域没有我们的节点,会去第三方节点进行取数据。具体架构如下:
py3study
2020/01/07
8240
RN调试坑点总结(不定期更新)
众所周知,RN经常遇到无可奈何的超级Bug, 那么对于这些问题的终极解决办法是什么呢?
啦啦啦321
2020/06/19
4K0
在 Ubuntu 中如何设置和管理 root 用户权限?
在 Ubuntu 操作系统中,root 用户是具有最高权限的用户,可以执行对系统的所有操作。但是,在默认情况下,Ubuntu 禁用了 root 用户,而是使用 sudo 命令来实现管理员权限。本文将详细介绍在 Ubuntu 中如何设置和管理 root 用户权限,并讨论一些常见的安全风险和预防措施。
网络技术联盟站
2023/06/04
7.9K0

相似问题

在颤动中定期更新显示

14

使用颤动中的服务器定期更新本地数据

121

定期更新数据和搜索API

11

在iOS 8中/定期更新定时器背景中的位置

26

在颤动中调用api后更新ModalBottomSheet

130
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文