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