首页 文章

Flutter:ListView.builder中的Textfield

提问于
浏览
0

大家好,我在Cloud Firestore和ListView.builder上有一些数据来加载数据 . 在这个ListView.builder中我有Network.Image,ListTile用于显示 Headers 和副 Headers ,另一个ListTile有一个Textfield来添加一些注释和一个iconbutton . 我的目标是获取文本字段的文本,并在单击按钮时显示为alertDialog . 到目前为止,我在文本字段中添加了一个控制器,但每当我在文本字段中输入任何内容时,它都会更改所有文本字段 . 我已经尝试创建一个List来指定一个独特的控制器,所以我可以停止文本字段中的所有更改,但我失败了 . 有什么方法可以做到这一点 . 所有这些textfields和iconbuttons必须是唯一的,所以当我点击图标按钮时,我需要查看键入的文本字段的文本 .

2 回答

  • 1

    尝试使用

    List<TextEditingController> _controllers = new List();
    

    ListView.builder 内为每个项目添加一个新控制器 .

    ListView.builder(
                itemBuilder: (context,index){
                  _controllers.add(new TextEditingController());
    
                  //Your code here
    
                }),
    

    要访问控制器的文本,您需要索引值

    _controllers[index].text

    确保最后处理所有textControllers .

  • 2

    你可能想考虑制作一个 new type of custom Widget for each row .

    你可以利用一个

    • TextEditingController (您在其中调用相应的控制器 on click

    • TextFieldonChanged 回调(存储相应项目的新值 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可能是最简单的,但我想提及两个选项供您考虑 .

相关问题