Dans la dernière version de flutter, vous pouvez déplacer votre bottomSheet en utilisant isScrollControlled
propriété/paramètre nommé. Supposons que j'ai une fonction (_showModal) qui sera invoquée lorsqu'un bouton est pressé. Et je définis la fonctionnalité de la feuille de fond sur cette fonction.
void _showModal() {
showModalBottomSheet(
isScrollControlled: true,
context: context,
builder: (BuildContext context) {
return Column(
children: <Widget>[
TextField(// your other code),
SizedBox(height: 5.0),
TextField(// your other code),
SizedBox(height: 5.0),
TextField(// your other code),
]
);
},
);
}
Ici, une ModalBottomSheet apparaîtra mais avec un fullscreen de hauteur. Et vous n'avez pas besoin de cette hauteur. Donc, vous avez besoin de la colonne mainAxisSize
a min
.
Column(
mainAxisSize: MainAxisSize.min,
// your other code
)
Le problème du plein écran en hauteur est résolu, mais ModalBottomSheet ne se déplace pas vers le haut lorsque le clavier apparaît. Ok, pour résoudre ce problème, vous devez définir les paramètres suivants viewInsets
le remplissage du fond de votre feuille modale. Pour définir le remplissage, nous devons donc envelopper notre colonne avec Container ou Padding, puis définir le remplissage. Le code final ressemblera à ceci
void _showModal() {
showModalBottomSheet(
isScrollControlled: true,
context: context,
builder: (BuildContext context) {
return Container(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom,
),
// You can wrap this Column with Padding of 8.0 for better design
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextField(// your other code),
SizedBox(height: 5.0),
TextField(// your other code),
SizedBox(height: 5.0),
TextField(// your other code),
]
),
);
},
);
}
J'espère que votre problème est résolu. Merci.
1 votes
Il y a également quelques problèmes ouverts sur Github : question principale y un autre avec un commentaire qui propose une solution animée.
1 votes
Pour moi, cela se règle simplement en ajoutant un
Padding
comme dernier enfant de l'élémentColumn
et définir son remplissage commepadding: MediaQuery.of(context).viewInsets