#flutter #rendering
#флаттер #рендеринг
Вопрос:
у меня на экране есть пара текстовых полей и кнопок, но в конце много неиспользуемого пространства. Когда я ввожу текстовое поле для ввода текста, возникает проблема renderflexproblem … возможно, потому, что клавиатура поднимается снизу. Я пытаюсь использовать «Развернуть» для последней кнопки, но это приведет к расширению кнопки до нижней части экрана, и проблема renderflexproblem все еще возникает. Я хочу использовать полный размер экрана, даже если клавиатура поднимается снизу
Вот мой код:
body: Container(
margin: EdgeInsets.all(15.0),
alignment: Alignment.centerLeft,
child: Column(
children: <Widget>[
TextField(
controller: _todoNameController,
decoration: InputDecoration(labelText: 'Todoname'),
),
Padding(padding: new EdgeInsets.all(5.0)),
TextField(
controller: _jobController,
decoration: InputDecoration(labelText: 'Job'),
),
Padding(padding: new EdgeInsets.all(5.0)),
TextField(
controller: _priorityController,
decoration: InputDecoration(labelText: 'Priority'),
),
Padding(padding: new EdgeInsets.all(5.0)),
DropdownButton<String>(
items: teamList.map((String value) {
return new DropdownMenuItem<String>(
value: value,
child: Row(
children: <Widget>[
SizedBox(width: 10,),
Text(value),
]
)
);
}).toList(),
hint: Text("Choose team"),
value: selectedTeam,
onChanged: (value) {
setState(() {
_teamController.text = value;
selectedTeam = value;
});
},
),
Padding(padding: new EdgeInsets.all(5.0)),
TextField(
controller: _noteController,
decoration: InputDecoration(labelText: 'Note'),
),
Padding(padding: new EdgeInsets.all(5.0)),
Row(
children: <Widget>[
Expanded(
// child: Text(
// db.formatMsIntoString(int.parse(_startingDateController.text)).substring(0, 10)),
child: TextField(
controller: _startingDateController,
decoration: InputDecoration(labelText: 'Starting date'),
enabled: false,
),
),
Expanded(
child: RaisedButton(
onPressed: () => _selectStartingDate(context),
child: Text(
'Select starting date',
style:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
color: Colors.teal,
),
),
],
),
Padding(padding: new EdgeInsets.all(5.0)),
Row(
children: <Widget>[
Expanded(
// child: Text(
// db.formatMsIntoString(int.parse(_startingDateController.text)).substring(0, 10)),
child: TextField(
controller: _endingDateController,
decoration: InputDecoration(labelText: 'Ending date'),
enabled: false,
),
),
Expanded(
child: RaisedButton(
onPressed: () => _selectEndingDate(context),
child: Text(
'Select ending date',
style:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
color: Colors.teal,
),
),
],
),
Padding(padding: new EdgeInsets.all(5.0)),
RaisedButton(
child: (widget.todo.id != null) ? Text('Update') : Text('Add'),
onPressed: () {
if (widget.todo.id != null) {
db.updateTodo(Todo.fromMap({
'id': widget.todo.id,
'todoName': _todoNameController.text,
'job': _jobController.text,
'priority': _priorityController.text,
'team': _teamController.text,
'note': _noteController.text,
'startingDate': db.formatStringIntoMs(selectedStartingDate.toString()),
'endingDate': db.formatStringIntoMs(selectedEndingDate.toString()),
})).then((_) {
Navigator.pop(context, 'update');
});
}else {
db.saveTodo(Todo(_todoNameController.text,
_jobController.text,
_priorityController.text,
_teamController.text,
_noteController.text,
db.formatStringIntoMs(selectedStartingDate.toString()),
db.formatStringIntoMs(selectedEndingDate.toString()))).then((_) {
Navigator.pop(context, 'save');
});
}
},
),
],
),
),
Ответ №1:
Вы должны прокручивать, потому что он не помещается на странице. Если вы прокручиваете всю страницу, это должно исправиться. С помощью expanded вам не нужно оборачивать его. Использование расширенных страниц прокрутки в уже обычной логике написания кода — это призыв к дизайну. Это может привести к ошибкам. образцовый:
SingleChildScrollView(
child:Column(
children:[
....
...