Flutter中TextFieldTags点击GridView标签不显示,setState无效问题
问题核心在于TextFieldTags的initialTags仅负责初始化标签,后续直接修改_skillsLists并调用setState不会触发组件更新——因为组件的标签状态是由textfieldTagsController内部维护的,和外部列表没有实时绑定关系。
正确解决方案:直接操作控制器添加标签
放弃通过修改_skillsLists触发更新的思路,改用textfieldTagsController提供的addTag方法添加标签,同时可同步更新本地列表保持数据一致性:
修改GridView的点击事件代码:
GridView.builder( shrinkWrap: true, itemCount: _data.length, itemBuilder: (_, index) { final skillName = _data[index].name; return Padding( padding: const EdgeInsets.all(8.0), child: Containers( onTap: () { // 先判断标签是否已存在,避免重复添加 if (!_controller.getTags!.contains(skillName)) { // 调用控制器方法添加标签,这才会触发TextFieldTags更新 _controller.addTag(skillName); // 同步更新本地列表(可选,若需用此列表做其他逻辑) setState(() { _skillsLists.add(skillName); }); } print(_controller.getTags); // 打印控制器内的标签列表,确认添加结果 }, width: size.width, color: Colors.pink, height: 30, child: Texts(texts: skillName), ), ); }, ),
额外说明
- TextFieldTags的标签状态完全由
textfieldTagsController掌控,所有增删操作都需通过控制器提供的方法(addTag/removeTag等)执行。 - 若需获取当前标签列表,直接使用
_controller.getTags即可,无需依赖_skillsLists,能保证数据完全同步。
内容的提问来源于stack exchange,提问作者Mr.Robot
相关产品推荐
相关产品推荐

