J'essaie de créer une feuille de fond qui a un champ de texte et la mise au point automatique est définie sur true pour que le clavier s'affiche. Mais, la feuille de fond est chevauchée par le clavier. Existe-t-il un moyen de déplacer la feuille de fond au-dessus du clavier?
Padding(
padding:
EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
child: Column(children: <Widget>[
TextField(
autofocus: true,
decoration: InputDecoration(hintText: 'Title'),
),
TextField(
decoration: InputDecoration(hintText: 'Details!'),
keyboardType: TextInputType.multiline,
maxLines: 4,
),
TextField(
decoration: InputDecoration(hintText: 'Additional details!'),
keyboardType: TextInputType.multiline,
maxLines: 4,
),]);
Après avoir combiné différentes solutions, j'ai obtenu ceci:
si vous ne voulez pas qu'il soit Plein écran et que vous ne voulez pas utiliser la solution de contournement Padding
showModalBottomSheet(
context: context,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
),
enableDrag: true,
isDismissible: true,
useRootNavigator: true,
builder: (BuildContext ctx) {
return Scaffold( // use CupertinoPageScaffold for iOS
backgroundColor: Colors.transparent,
resizeToAvoidBottomInset: true, // important
body: SingleChildScrollView(
child: Form(
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextFormField(),
TextFormField(),
],
),
),
),
),
);
},
);
on Flutter (Channel master, v1.15.3-pre.37, sur Mac OS X 10.15.2 19C57, locale en-US)
Essaye ça
Ma solution est
isScrollControlled: true,
padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom)
SingleChildScrollView
EXEMPLE DE CODE
Future<void> future = showModalBottomSheet(
context: context,
isDismissible: true,
isScrollControlled: true,
backgroundColor: Colors.white.withOpacity(0.2),
builder: (context) => SingleChildScrollView(
child: GestureDetector(
child: Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom),
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: Column(
children: <Widget>[
// add your widget here
],
),
),
)),
));
Enveloppez le Form
avec un widget Scaffold
, puis enveloppez le TextFormField
avec un SingleChildScrollView
:
return Container(
height: screenHeight * .66,
child: Scaffold(
body: Form(
key: _form,
child: SingleChildScrollView(
child:TextFormField()
)
)
)
)