web-dev-qa-db-fra.com

Comment faire en sorte que l'application Flutter réagisse en fonction de la taille de l'écran?

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: () {})
                ]),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
6
praveen Dp

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,
      )
    ),
  ),
),

Vous pouvez aussi utiliser :

12
Blasanka

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.

0
Raouf Rahiche
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;
}
0
Vithani Ravi

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 la MediaQueryData renvoyée par MediaQuery.of: MediaQuery.of(context).size.

Donc, vous pouvez faire ce qui suit:

 new Container(
                      height: MediaQuery.of(context).size.height/2,
..            )
0
aziza