Flutter ListView.builder中的文本字段正在消失

Flutter ListView.builder中的文本字段正在消失,flutter,listview,texteditingcontroller,Flutter,Listview,Texteditingcontroller,为了进行库存控制,我从Firebase数据(一个“Alimento”列表)构建了一个列表视图,并创建了一个文本字段来编辑每个“Alimento”的数量 当我的“Alimentos”屏幕不到一个时,它工作正常,但当我有一些“Alimentos”页面时,我的文本字段就消失了。我知道会发生这种情况,因为ListView.builder只会生成视口中或视口附近的项目(当您滚动时),但我不知道如何解决它 我读到,@Ashton Thomas建议每行实现一个自定义小部件,但我不知道如何实现 这是我的List

为了进行库存控制,我从Firebase数据(一个“Alimento”列表)构建了一个列表视图,并创建了一个文本字段来编辑每个“Alimento”的数量

当我的“Alimentos”屏幕不到一个时,它工作正常,但当我有一些“Alimentos”页面时,我的文本字段就消失了。我知道会发生这种情况,因为ListView.builder只会生成视口中或视口附近的项目(当您滚动时),但我不知道如何解决它

我读到,@Ashton Thomas建议每行实现一个自定义小部件,但我不知道如何实现

这是我的ListView.Builder

  Widget _crearListado(BuildContext context, AlimentoBloc alimentoBloc) {

    final _size = MediaQuery.of(context).size;

    return Container(
      height: _size.height * 0.5,
      child: StreamBuilder(
          stream: alimentoBloc.alimentoStream ,
          builder: (BuildContext context, AsyncSnapshot<List<AlimentoModel>> snapshot){
            if (snapshot.hasData) {
              List<AlimentoModel> alimentos = snapshot.data;
              alimentos.sort((a, b) => a.proteina.compareTo(b.proteina));
              return Stack(
                children: <Widget>[
                  ListView.builder(
                    itemCount: alimentos.length,
                    itemBuilder: (context, i) { //Esta variable es gráfica, sólo se crea para lo que se está viendo
                      _controlList.add(new ControlInventarioModel());
                      return _crearItem(context, alimentoBloc, alimentos[i], i);
                    },

                    padding: EdgeInsets.only(left: 10.0, right: 10.0, top: 0.0, bottom: 20.0),
                  ),
                ],
              );
            } else {
              return Center (child: Image(image: AssetImage('assets/Aplians-fish-Preloader.gif'), height: 200.0,));
            }
          },
      ),
    );
  }
Widget\u crearListado(BuildContext上下文,AlimentoBloc AlimentoBloc){
final _size=MediaQuery.of(context).size;
返回容器(
高度:_size.height*0.5,
孩子:StreamBuilder(
流:alimentoBloc.alimentoStream,

生成器:(BuildContext上下文,AsyncSnapshot添加属性TextFormField:
initialValue
。 这对我很有效,我也经历了同样的事情

像这样

TextField(
    style: TextStyle(fontSize: 20.0),
    initialValue: _controlList[i].cantControll ?? '0',
    onChanged: (value) {
            if(utils.isNumeric(value) && double.parse(value)>=0) {
              _controlList[i].cantControl = double.parse(value);
            } 
            else {
              _controlList[i].cantControl = null;
            }
            },
    onEditingComplete: () {
      FocusScope.of(context).unfocus();
    },
    onSubmitted: (value) {
    },
  ),
因为,当您滚动并输入下一个文本字段时,文本字段将重新生成。
但是您的数据已经存储在
\u controlList[i]中。cantControl

您能在UI上提供一些屏幕截图吗?@John Joe我刚刚附加了一个动画gif以澄清感谢您尝试将textEditingController添加到TextField的控制器属性中
TextField(
    style: TextStyle(fontSize: 20.0),
    initialValue: _controlList[i].cantControll ?? '0',
    onChanged: (value) {
            if(utils.isNumeric(value) && double.parse(value)>=0) {
              _controlList[i].cantControl = double.parse(value);
            } 
            else {
              _controlList[i].cantControl = null;
            }
            },
    onEditingComplete: () {
      FocusScope.of(context).unfocus();
    },
    onSubmitted: (value) {
    },
  ),