Проблема с пузырем курсора TextFormField и прокруткой во флаттере
При прокрутке страницы пузырек курсора перекрывает другие виджеты и
Appbar
. Вы можете мне помочь?
Этот файл GIF показывает мою проблему
Виджет
class Sample extends StatefulWidget {
Sample({Key? key}) : super(key: key);
@override
_SampleState createState() => _SampleState();
}
class _SampleState extends State<Sample> {
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: true,
extendBodyBehindAppBar: false,
extendBody: false,
appBar: AppBar(
title: Text('AppBar'),
backgroundColor: Colors.orange,
elevation: 0.0,
),
body: SafeArea(
child: Column(
children: [
ListView(
addAutomaticKeepAlives: true,
shrinkWrap: true,
children: [
Container(
color: Colors.yellow,
height: 70,
width: MediaQuery.of(context).size.width,
child: Center(
child: Text(
'This part want not be scrolled',
style: TextStyle(color: Colors.red),
),
),
)
],
),
Expanded(
child: Scrollbar(
child: ListView(
shrinkWrap: true,
scrollDirection: Axis.vertical,
children: [
Table(
children: [
TableRow(children: [
Column(
children: [Text('Name')],
),
Column(
children: [
TextFormField(decoration: InputDecoration())
],
)
]),
TableRow(
children: [
Column(
children: [Text('Name')],
),
Column(
children: [
TextFormField(decoration: InputDecoration())
],
)
],
),
TableRow(
children: [
Column(
children: [Text('Name')],
),
Column(
children: [
TextFormField(decoration: InputDecoration())
],
)
],
),
TableRow(
children: [
Column(
children: [Text('Name')],
),
Column(
children: [
TextFormField(decoration: InputDecoration())
],
)
],
),
],
),
],
),
),
),
],
),
),
);
}
}
1 ответ
Решение
виджет сделан для не прокручиваемого
GridView
. Он визуализирует полное дерево виджетов один раз и сохраняет его дочерние элементы в живых. Вы можете подумать, что это похоже на
SingleChildScrollView
. Здесь, в ваших дочерних элементах, генерируются только один раз и не вызываются утилиты, даже если они не отображаются на экране, и это природа
Table
Виджет. Чтобы проверить это, вы создаете виджет с полным состоянием и передаете его дочерним элементам столбца.
Для большего
Решение, которое вы можете просто использовать
ListView.Builder