Existe-t-il un moyen simple (non-LayoutBuilder) de dimensionner un élément par rapport à la taille de l'écran (largeur / hauteur)? Par exemple: comment définir la largeur d'un CardView à 65% de la largeur de l'écran.
Cela ne peut pas être fait dans la build
méthode (évidemment), il faudrait donc le différer jusqu'à la post-construction. Y a-t-il un endroit préféré pour mettre une telle logique?
Réponses:
FractionallySizedBox
peut également être utile. Vous pouvez également lire la largeur de l'écran directement à partir deMediaQuery.of(context).size
et créer une boîte de taille basée sur celasi vous voulez vraiment dimensionner comme une fraction de l'écran quelle que soit la disposition.
la source
Ceci est une réponse supplémentaire montrant la mise en œuvre de quelques-unes des solutions mentionnées.
FractionallySizedBox
Si vous avez un seul widget, vous pouvez utiliser un
FractionallySizedBox
widget pour spécifier un pourcentage de l'espace disponible à remplir. Ici, le vertContainer
est configuré pour remplir 70% de la largeur disponible et 30% de la hauteur disponible.Étendu
Le
Expanded
widget permet à un widget de remplir l'espace disponible, horizontalement s'il est dans une ligne, ou verticalement s'il est dans une colonne. Vous pouvez utiliser laflex
propriété avec plusieurs widgets pour leur donner des pondérations. Ici, le vertContainer
occupe 70% de la largeur et le jauneContainer
30% de la largeur.Si vous voulez le faire verticalement, remplacez simplement
Row
parColumn
.Code supplémentaire
Voici le
main.dart
code pour votre référence.la source
Dialog
style :)Cela pourrait être un peu plus clair:
J'espère que cela a résolu votre problème.
la source
Vous pouvez créer une colonne / ligne avec des enfants flexibles ou étendus qui ont des valeurs flex qui correspondent aux pourcentages souhaités.
Vous pouvez également trouver le widget AspectRatio utile.
la source
la source
Il y a plusieurs façons de faire cela
1. Utilisation de MediaQuery: son retour en plein écran de votre appareil, y compris la barre d'applications, la barre d'outils
2. Utilisation de Expanded: vous pouvez définir le rapport largeur / hauteur
3. D'autres comme Flexible et AspectRatio et FractionallySizedBox
la source
vous pouvez utiliser MediaQuery avec le contexte actuel de votre widget et obtenir une largeur ou une hauteur comme celle-ci
double width = MediaQuery.of(context).size.width double height = MediaQuery.of(context).size.height
après cela, vous pouvez le multiplier par le pourcentage souhaitéla source
Obtenez d'abord la taille de l'écran.
Après cela, vous pouvez l'obtenir
width
et le multiplier avec0.5
pour obtenir 50% de la largeur de l'écran.Mais le problème survient généralement
height
, par défaut lorsque nous utilisonsLa hauteur que nous obtenons est la hauteur globale qui comprend
StatusBar
+notch
+ laAppBar
hauteur. Ainsi, pour obtenir la hauteur gauche de l'appareil, nous devons soustraire lapadding
hauteur (StatusBar
+notch
) et laAppBar
hauteur de la hauteur totale. Voici comment nous procédons.Maintenant, nous pouvons utiliser le suivant pour obtenir 50% de notre écran en hauteur.
la source
si vous utilisez GridView, vous pouvez utiliser quelque chose comme la solution d'Ian Hickson.
la source
Utilisez le widget LayoutBuilder qui vous donnera des contraintes que vous pouvez utiliser pour obtenir la hauteur qui exclut l'AppBar et le remplissage. Ensuite, utilisez un SizedBox et fournissez la largeur et la hauteur en utilisant les contraintes du LayoutBuilder
la source