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
相关产品推荐
相关产品推荐

