我有一个小部件,它有一个图像元素和一个扩展的表单元素列表视图,当我填写并滚动数据时,当它在图像后面滚动时,它们就会消失。在调试时它不会引发任何错误,它发生在滚动到窗口小部件顶部图像后面的任何字段上。有任何想法吗?
@override Widget build(BuildContext context) { var _children = <Widget>[ new Center( child: new Text(widget.prov.fname + widget.prov.lname, style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold), ), ), new Center( child: new Container( padding: new EdgeInsets.only( left: 125.0, right: 125.0, bottom: 50.0), child: new Image.network('http://$baseurl:8080/getimage/'+widget.prov.pic.assetName), ) ), new Form( key: _formKey, autovalidate: _autovalidate, onWillPop: _warnUserAboutInvalidData, child: new Expanded( child: new ListView( padding: const EdgeInsets.symmetric(horizontal: 16.0), children: <Widget>[ new TextFormField( decoration: const InputDecoration( icon: const Icon(Icons.person), hintText: 'First Name?', labelText: 'First Name *', ), onSaved: (String value) { referral.fname = value; }, validator: _validateName, ), new TextFormField( decoration: const InputDecoration( icon: const Icon(Icons.person), hintText: 'Last Name?', labelText: 'Last Name *', ), onSaved: (String value) { referral.lname = value; }, validator: _validateName, ), new TextFormField( decoration: const InputDecoration( icon: const Icon(Icons.phone), hintText: 'How to contact?', labelText: 'Phone Number *', prefixText: '+1' ), keyboardType: TextInputType.phone, onSaved: (String value) { referral.contact = value; }, validator: _validatePhoneNumber, // TextInputFormatters are applied in sequence. inputFormatters: <TextInputFormatter> [ WhitelistingTextInputFormatter.digitsOnly, // Fit the validating format. _phoneNumberFormatter, ], ), new TextFormField( decoration: const InputDecoration( hintText: 'Tell us about patient', helperText: 'It does not have to be detailed yet', labelText: 'Referral Details', ), maxLines: 5, ), new _DateTimePicker( labelText: 'DOB', selectedDate: _fromDate, selectDate: (DateTime date) { setState(() { referral.dob = date; }); }, ), new InputDecorator( decoration: const InputDecoration( labelText: 'Type of Appointment', hintText: 'Choose an Appointment Type', ), isEmpty: _typeAppt == null, child: new DropdownButton<String>( value: _typeAppt, isDense: true, onChanged: (String newValue) { setState(() { _typeAppt = newValue; }); }, items: _allTypeAppt.map((String value) { return new DropdownMenuItem<String>( value: value, child: new Text(value), ); }).toList(), ), ), ], ) ) ), /*new RefreshIndicator( child: new ListView.builder( itemBuilder: _itemBuilder, itemCount: listcount, ), onRefresh: _onRefresh, ),*/ ]; return new Scaffold( appBar: new AppBar(title: new Text("My Provider")), body: new Column( children: _children, ), ); }
我认为问题在于您不保存输入到TextFields中的值(例如,保存为状态)。 从您的代码中,我假设您正在使用ListView.builder()来设置ListView。如文档中所述,此方法仅呈现可见的子级。一旦将子级滚动到视图外,将其从ListView中删除,并且在将其滚动到视图中后才再次添加。因为删除了TextField,所以值也被删除了。
为了永久保存该值,我建议使用TextFields并将输入保存onChanged()为TextField方法中的状态,或者使用TextEditingController。
onChanged()