В флаттере 1.7.X и более поздних версиях в BottomSheetDialog
добавлено больше функциональных возможностей, поэтому в дополнение к ответу @anmol.majhail вы можете добавить isScrollControlled = true
к showModalBottomSheet
это позволит нижнему листу занять всю необходимую высоту, что дает дополнительную гарантию того, что TextField
не покрывается клавиатурой.
Например:
showModalBottomSheet(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(25.0))),
backgroundColor: Colors.black,
context: context,
isScrollControlled: true,
builder: (context) => Padding(
padding: const EdgeInsets.symmetric(horizontal:18 ),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0),
child: Text('Enter your address',
style: TextStyles.textBody2),
),
SizedBox(
height: 8.0,
),
Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom),
child: TextField(
decoration: InputDecoration(
hintText: 'adddrss'
),
autofocus: true,
controller: _newMediaLinkAddressController,
),
),
SizedBox(height: 10),
],
),
));
Обратите внимание:
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(25.0))),
Не требуется.Просто я создаю закругленный нижний лист.
Обновление
Если ваш BottomSheetModel
равен Column
, убедитесь, что вы добавили mainAxisSize: MainAxisSize.min,
в противном случае листпокроет весь экран.