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

Flutter国际化:ListView Builder翻译仅重启生效问题求助

问题解决:ListView Builder切换语言后需重启才更新翻译

问题根源

你的Exercise1Model静态列表在应用启动时就执行了.tr翻译,把结果存在final类型的name和subtitle变量中,这些值是固定的字符串,不会随语言切换自动刷新。而其他组件是在每次Widget重建时调用.tr方法获取最新翻译,所以能实时更新。

解决方案(最直接的实现方式)

1. 修改模型类,存储翻译key而非翻译后的字符串

class Exercise1Model {
  final String nameKey;
  final String subtitleKey;

  Exercise1Model({
    required this.subtitleKey,
    required this.nameKey,
  });

  static List<Exercise1Model> list = [
    Exercise1Model(
      nameKey: "warm_up",
      subtitleKey: 'warming_sub',
    ),
    // 其他条目
  ];
}

2. 在ListView Builder中动态获取翻译

修改Text组件的内容,在Widget构建时调用.tr获取当前语言的翻译结果:

ListView.builder(
    itemCount: Exercise1Model.list.length,
    scrollDirection: Axis.vertical,
    shrinkWrap: true,
    itemBuilder: (context, index) {
      return Container(
          height: 200,
          padding: const EdgeInsets.all(25),
          child: Stack(
            children: [
              Text(
                Exercise1Model.list[index].nameKey.tr,
                style: const TextStyle(
                    fontSize: 20,
                    color: Colors.white,
                    wordSpacing: 10,
                    fontWeight: FontWeight.bold),
              ),
              // 其他组件内容
            ],
          )
      );
    }),

额外注意

切换语言后,需调用setState(StatefulWidget环境下)或通过状态管理工具触发Widget树重建,确保ListView重新执行itemBuilder以加载最新翻译内容。

内容的提问来源于stack exchange,提问作者Faizan Abbas Bangash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:20:38