大家好,我在Cloud Firestore和ListView.builder上有一些数据来加载数据。在这个ListView.builder中我有Network.Image,ListTile用于显示标题和副标题,另一个ListTile有一个Textfield来添加一些注释和一个iconbutton。我的目标是获取文本字段的文本,并在单击按钮时显示为alertDialog。到目前为止,我在文本字段中添加了一个控制器,但每当我在文本字段中输入任何内容时,它都会更改所有文本字段。我已经尝试创建一个List来指定一个独特的控制器,所以我可以停止文本字段中的所有更改,但我失败了。有什么方法可以做到这一点。所有这些textfields和iconbuttons必须是唯一的,所以当我点击图标按钮时,我需要查看键入的文本字段的文本。
尝试使用
List<TextEditingController> _controllers = new List();
在你的ListView.builder
里面为每个项目添加一个新的控制器。
ListView.builder(
itemBuilder: (context,index){
_controllers.add(new TextEditingController());
//Your code here
}),
要访问控制器的文本,您需要索引值
_controllers[index].text
确保最后处理所有textControllers。
您可能需要考虑为每一行创建一种新类型的自定义Widget。
你可以利用一个
TextEditingController
(你称之为相应的控制器on click
或者TextField
的onChanged
回调(你存储相应项目的新值on change
在这两种情况下,您都有一个令人讨厌的文本控制器或字符串值列表。
请记住,ListView.builder只会构建视口中或附近的项目(滚动时)。
只为那些实际可见的子项调用构建器
这意味着您可以多次构建相同的行(
考虑为每一行使用自定义小部件(扩展StatefulWidget
)
这将减轻与所有角色相关的协调,并且它将任何结果状态进一步向下推送到叶节点
如果使用TextEditingController
:
_textController.dispose()
方法中调用dispose()
如果使用onChanged回调(可在TextField
上找到TextFormField
)
inputValue
中创建一个String变量作为状态看起来TextEditingController可能是最简单的,但我想提及两个选项供您考虑。