Что касается пункта 1 вашего вопроса:
Вы можете создать функцию слушателя для listScrollController
, содержащую вызов анонимного FocusNode
(идея взята из этого высоко оцененного ответа ), и когда происходит любое событие прокрутки, фокус будет взят из ваш TextField
и клавиатура будут отклонены:
class _MessagesPageState extends State<MessagesPage> {
final ScrollController listScrollController = ScrollController();
@override
void initState() {
listScrollController.addListener(_scrollListener);
super.initState();
}
_scrollListener() {
FocusScope.of(context).requestFocus(FocusNode());
}
@override
Widget build(BuildContext context) {
return Scaffold(
....
body: Stack(
children: [
ListView.builder(
controller: listScrollController
....
),
InputWidget(controller: listScrollController)]
);
}
Точка 2:
Вы заметите, что я изменил ваш InputWidget
, чтобы он принял ScrollController
в качестве параметра, чтобы вы могли передать ему свой контроллер ListView
. и когда нажата IconButton
, listScrollController
будет прыгать до конца по вашему желанию.
class InputWidget extends StatelessWidget {
InputWidget({Key key,this.controller}) : super(key: key);
final ScrollController controller ;
final TextEditingController _textEditingController = TextEditingController();
....
Row (
children: [
TextField(
controller: _textEditingController
),
IconButton(icon: ...., onPressed: (){
controller.jumpTo(controller.position.maxScrollExtent);
})
]
)}