You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据数据类型执行不同Fetch却始终获取相同数据的问题求助

问题分析与解决方案

你的问题出在变量作用域和代码执行逻辑上:

  1. 每个if块内的var dokumenti是局部变量,和后续setState中使用的dokumenti不是同一个,前面的请求结果根本没被用到。
  2. 最后一行的var dokumenti = await ...是无条件执行的,不管前面的条件是否匹配,最终setState都会用这行的结果。

修复后的代码

Future.delayed(Duration.zero, () async {
  late var dokumenti; // 在外层声明变量,覆盖整个作用域
  if (widget.vrstaDokumenta == "Moji zadaci") {
    dokumenti = await _dokumentiService!.getForApprovalByType(widget.tipId ?? 0);
  } else if (widget.vrstaDokumenta == "Moji dokumenti") {
    dokumenti = await _dokumentiService!.getMojiDokumentiByType(widget.tipId ?? 0);
  } else {
    // 默认情况,执行共享文档请求
    dokumenti = await _dokumentiService!.getSharedDocumentsByType(widget.tipId ?? 0);
  }

  setState(() {
    _dokumenti = dokumenti;
    _dokumentiSearch = dokumenti;
    isLoading = false;
  });
});

关键修改点

  • 把dokumenti变量声明移到if块外面,使用late var(或者提前初始化一个默认值),确保所有分支都赋值给同一个变量。
  • 改用else if和else结构,保证只有一个分支会被执行,避免最后无条件执行默认请求。
  • 移除每个分支内的var关键字,防止创建局部变量。

如果需要更严谨的处理,可以给dokumenti指定具体类型(比如late List<Dokument> dokumenti;),提升代码可读性和类型安全性。

内容的提问来源于stack exchange,提问作者Ranko Koturic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:55:23