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

如何将选中的Flutter单选按钮组JSON值存入变量供后续使用

问题原因&解决步骤

核心问题1:FutureBuilder重复触发接口请求

你直接把DocVisitDays()放在FutureBuilder的future参数里,每次调用setState触发页面重绘时,FutureBuilder都会重新执行一次接口请求,拿到新的snapshot实例,导致你之前选中的赋值逻辑被重置,甚至可能出现snapshot数据不一致的问题。
修复方法:在initState中提前初始化接口请求的Future实例,避免重复请求:

class _DocBookingState extends State<DocBooking> {
  String radioItemHolder = '03/09/2021';
  // 新增:定义存储接口请求结果的Future变量
  late Future _docVisitDaysFuture;
  // 给_radioValue设置初始值,默认选中第一个的话设为0即可
  int _radioValue = 0;

  @override
  void initState() {
    super.initState();
    // 初始化时只执行一次接口请求
    _docVisitDaysFuture = DocVisitDays();
  }

  // ... 其他原有代码
}

然后把FutureBuilder的future参数替换成这个预初始化的变量:

FutureBuilder(
  future: _docVisitDaysFuture,
  // ... 其他参数保持不变
)

核心问题2:索引取值逻辑有隐患

你在onChanged回调里直接用itemBuilder传入的index作为取值索引,当列表滚动后可能出现索引和实际数据匹配错位的问题,最好直接用onChanged返回的选中值作为索引:

onChanged: (value) {
  if (value == null) return;
  setState(() {
    // 用回调返回的value作为索引,取值更稳妥
    radioItemHolder = snapshot.data[value as int].visitDate;
    _radioValue = value as int;
  });
  // 可以加这行打印验证变量是否更新,在控制台查看输出即可
  debugPrint('更新后的选中日期:$radioItemHolder');
},

额外验证点

如果你是在UI上展示radioItemHolder,确保展示的代码写在build方法里,这样setState触发重绘后UI才会同步更新;如果你是在其他异步方法里用这个变量,确保调用时机是在选中操作之后,不要提前存了变量的静态副本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:54:04