je suis confronté à des difficultés pour le rendre sensible aux différentes tailles d'écran. Merci d'avance
@override
Widget build(BuildContext context) {
return new Container(
decoration: new BoxDecoration(color: Colors.white),
child: new Stack(
children: [
new Padding(
padding: const EdgeInsets.only(bottom: 350.0),
child: new GradientAppBar(" "),
),
new Positioned(
bottom: 150.0,
height: 260.0,
left: 10.0,
right: 10.0,
child: new Padding(
padding: new EdgeInsets.all(10.0),
child: new Card(
child: new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const ListTile(
title: const Text(
'LOGIN',
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 16.50,
fontFamily: "Helvetica",
fontWeight: FontWeight.bold,
color: Colors.black87,
letterSpacing: 1.00,
),
),
),
new ListTile(
leading: const Icon(Icons.person),
title: new TextField(
controller: _user1,
decoration: new InputDecoration(
labelText: ' Enter a username'),
),
),
new ListTile(
leading: const Icon(Icons.person_pin),
title: new TextField(
controller: _pass1,
decoration: new InputDecoration(
labelText: ' Enter a password'),
obscureText: true,
),
),
],
),
),
),
),
new Positioned(
bottom: 70.0,
left: 15.0,
right: 05.0,
child: new ButtonTheme.bar(
// make buttons use the appropriate styles for cards
child: new ButtonBar(
children: <Widget>[
new FlatButton(
padding: new EdgeInsets.only(right: 13.0),
child: new Text(
'REGISTER HERE',
style: new TextStyle(
color: Colors.black87,
fontFamily: "Helvetica",
fontSize: 15.00,
fontWeight: FontWeight.bold),
),
onPressed: () {
Navigator.of(context).pushNamed('/facebook');
},
),
new FlatButton(
padding: new EdgeInsets.only(right: 22.0),
child: new Text(
'FORGOT PASSWORD?',
style: new TextStyle(
color: Colors.black87,
fontFamily: "Helvetica",
fontSize: 15.00,
fontWeight: FontWeight.bold),
),
onPressed: () {
Navigator.of(context).pushNamed('/Forgot');
},
),
],
),
),
),
new Positioned(
bottom: 73.0,
height: 180.0,
left: 20.0,
right: 52.0,
child: new Padding(
padding: new EdgeInsets.all(0.00),
child: new ButtonTheme(
minWidth: 10.0,
height: 20.0,
padding: new EdgeInsets.only(right: 37.0),
child: new ButtonBar(children: <Widget>[
new CupertinoButton(
borderRadius:
const BorderRadius.all(const Radius.circular(36.0)),
padding: new EdgeInsets.only(left: 70.0),
color: const Color(0xFF426DB7),
child: new Text(
" LOGIN ",
style: new TextStyle(
color: Colors.white,
fontSize: 12.50,
fontFamily: "Handwriting",
fontWeight: FontWeight.w500,
letterSpacing: 0.00),
),
onPressed: () {})
]),
),
),
),
],
),
);
}
}
Utilisation de MediaQuery
classe:
MediaQueryData queryData;
queryData = MediaQuery.of(context);
MediaQuery : établit une sous-arborescence dans laquelle les requêtes multimédia sont résolues aux données données.
MediaQueryData : Informations sur un média (par exemple, une fenêtre ).
Pour obtenir le rapport de pixels de périphérique:
queryData.devicePixelRatio
Pour obtenir la largeur et la hauteur de l'écran du périphérique:
queryData.size.width
queryData.size.height
Pour obtenir le facteur d'échelle du texte:
queryData.textScaleFactor
Utilisation de AspectRatio
class:
De doc:
Un widget qui tente de dimensionner l'enfant à un rapport d'aspect spécifique.
Le widget essaie d'abord la plus grande largeur autorisée par la présentation contraintes. La hauteur du widget est déterminée en appliquant le fichier rapport d'aspect donné à la largeur, exprimé en tant que rapport de largeur à la taille.
Par exemple, un rapport largeur/hauteur de 16: 9 aurait une valeur de 16,0/9,0. Si la largeur maximale est infinie, la largeur initiale est déterminée en appliquant le rapport de format à la hauteur maximale.
Considérons maintenant un deuxième exemple, cette fois-ci avec un rapport de format de 2,0 et des contraintes d’agencement qui exigent que la largeur soit comprise entre 0,0 et 100.0 et la hauteur doit être comprise entre 0.0 et 100.0. Nous choisirons une largeur de 100,0 (la plus grande autorisée) et une hauteur de 50,0 (pour correspondre au rapport de format ).
//example
new Center(
child: new AspectRatio(
aspectRatio: 100 / 100,
child: new Container(
decoration: new BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.orange,
)
),
),
),
consultez cette page du wiki Flutter:
Création d'applications responsive
Utilisez la classe LayoutBuilder: À partir de sa propriété de générateur, vous obtenez un BoxConstraints. Examinez les propriétés de la contrainte pour décider quoi faire afficher. Par exemple, si votre largeur maximale est supérieure à votre largeur point d'arrêt, retourne un objet Scaffold avec une ligne qui a une liste sur le la gauche. S'il est plus étroit, renvoyez un objet Scaffold avec un tiroir contenant cette liste. Vous pouvez également ajuster votre affichage en fonction du hauteur de l'appareil, le rapport d'aspect, ou une autre propriété. Quand le les contraintes changent (par exemple, l'utilisateur fait pivoter le téléphone ou place votre application dans une interface utilisateur en mosaïque dans Nougat), la fonction de création sera réexécutée.
static height(double height, BuildContext context) {
return height * MediaQuery.of(context).size.height / 750.0587997700522;
}
static width(double width, BuildContext context) {
return width * MediaQuery.of(context).size.width / 423.5293998850261;
}
Check MediaQuery
class
Par exemple, pour connaître la taille du média actuel (par exemple, la fenêtre contenant votre application), vous pouvez lire la propriété
MediaQueryData.size
à partir de laMediaQueryData
renvoyée parMediaQuery.of
:MediaQuery.of(context).size
.
Donc, vous pouvez faire ce qui suit:
new Container(
height: MediaQuery.of(context).size.height/2,
.. )