大家好,我在Cloud Firestore和ListView.builder上有一些数据来加载数据 . 在这个ListView.builder中我有Network.Image,ListTile用于显示 Headers 和副 Headers ,另一个ListTile有一个Textfield来添加一些注释和一个iconbutton . 我的目标是获取文本字段的文本,并在单击按钮时显示为alertDialog . 到目前为止,我在文本字段中添加了一个控制器,但每当我在文本字段中输入任何内容时,它都会更改所有文本字段 . 我已经尝试创建一个List来指定一个独特的控制器,所以我可以停止文本字段中的所有更改,但我失败了 . 有什么方法可以做到这一点 . 所有这些textfields和iconbuttons必须是唯一的,所以当我点击图标按钮时,我需要查看键入的文本字段的文本 .
2 回答
尝试使用
在
ListView.builder
内为每个项目添加一个新控制器 .要访问控制器的文本,您需要索引值
_controllers[index].text
确保最后处理所有textControllers .
你可能想考虑制作一个 new type of custom Widget for each row .
你可以利用一个
TextEditingController
(您在其中调用相应的控制器on click
或TextField
的onChanged
回调(存储相应项目的新值on change
在这两种情况下,你都有点 nasty list of either text controllers or String values .
请记住,ListView.builder仅用于构建视口中或附近的项目(滚动时) .
这意味着你可以拥有 same row built multiple times (
Consider using a custom widget for each row (扩展
StatefulWidget
)这将减轻与所有角色相关的协调,并且它将任何结果状态进一步向下推送到叶节点
如果使用
TextEditingController
:你只需担心一个控制器
在小部件的
dispose()
方法中调用_textController.dispose()
如果使用onChanged回调(
TextField
上没有TextFormField
)在自定义小部件中创建一个String变量作为状态
inputValue
处理空案例
_309_点击按钮时从中读取
看起来TextEditingController可能是最简单的,但我想提及两个选项供您考虑 .