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

Flutter中initState调用的readJson方法不执行 重启IDE后功能失效

问题根因

你的readJson方法实际已经执行,只是出现了两个典型的异步渲染问题:

  1. 异步方法执行完毕后没有调用setState通知框架刷新UI,冷启动时build方法先于异步回调执行,此时onboardingTasks为空,PageView渲染0个页面,你就会误以为方法没有执行。
  2. 热重载会触发页面强制重绘,此时异步加载已经完成,数据已经存在于onboardingTasks中,所以表现为热重载功能正常。

修复步骤

1. 异步加载完成后触发UI刷新

修改readJson方法,数据赋值后调用setState,建议同时增加异常捕获排查资源路径、JSON解析类错误:

Future<void> readJson() async {
  try {
    response = await rootBundle.loadString('assets/cfg/onboarding_tasks.json');
    final onboardingTodo = onboardingTodoFromJson(response);
    setState(() {
      onboardingTasks.addAll(onboardingTodo.values);
    });
    print("onboarding length - ${onboardingTasks.length}");
  } catch (e) {
    print("加载JSON出错: $e");
  }
}

2. 增加加载占位状态

冷启动加载阶段显示加载指示器,避免空页面误导你判断逻辑执行状态:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: SafeArea(
      child: onboardingTasks.isEmpty 
        ? const Center(child: CircularProgressIndicator())
        : Stack(
            // 原有Stack逻辑保持不变
          ),
    ),
  );
}

可选优化

你当前定义的全局bool value会导致所有复选框联动,勾选任意一个所有复选框都会同步状态,建议把选中状态存储到OnboardingTask实体类中,或者单独声明List<List<bool>> taskCheckStates存储每个复选框的选中状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:03