根据数据类型执行不同Fetch却始终获取相同数据的问题求助
问题分析与解决方案
你的问题出在变量作用域和代码执行逻辑上:
- 每个
if块内的var dokumenti是局部变量,和后续setState中使用的dokumenti不是同一个,前面的请求结果根本没被用到。 - 最后一行的
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
相关产品推荐
相关产品推荐

