1
votes

Comment accéder à mediaquery.of (context) .width.height en dehors d'une méthode de construction?

Je n'ai pas spécifiquement besoin d'accéder à la méthode mediaquery, juste tout ce qui renverra la hauteur et la largeur des périphériques natifs. Ce que j'essaie de réaliser, c'est un thème réactif qui redimensionnera la taille du texte en fonction de la taille de l'appareil.


6 commentaires

À quoi essayez-vous réellement d'accéder? Votre question est un peu vague.


dimensions de l'appareil


Mais où auriez-vous besoin de cela, qui ne pourrait pas avoir accès à un contexte? Je suppose que vous avez besoin des dimensions pour rendre quelque chose et si vous voulez effectuer le rendu, vous êtes probablement couvert par un BuildContext .


Je définis un thème et je souhaite mettre le texte à l'échelle en fonction des dimensions de l'appareil d'un utilisateur. où je définis mon thème, je n'ai pas accès à un buildcontext.


Savez-vous qu’un Texte s’adapte déjà automatiquement à la densité de pixels, non? Si vous optez pour un thème qui a des conditions fontSize (c'est-à-dire, si la police grand écran: 40 sinon, à 20), je vous suggère de profiter du TextTheme de la propriété ThemeData , puis utilisez-la dans votre choix de build , par exemple, Theme.of (context) .textTheme.display3 si l'écran est grand de display1 s'il est petit. Mais ce n’est qu’un exemple, que j’essaie de dire, c'est que votre thème devrait idéalement utiliser des propriétés statiques.


Quoi qu'il en soit, jetez un œil au package flutter_screenutil . Peut être de votre intérêt.


3 Réponses :


-1
votes

Vous ne pouvez pas accéder directement à l'objet Context en dehors de la méthode de construction. Vous pouvez soit transmettre l'objet Context de l'intérieur de la méthode de construction à la fonction de construction séparée.

Widget build(BuildContext context){
  return Container(
    children: buildChildren(context)
  );
}

Widget buildChildren(BuildContext context){
  ...
}


0 commentaires

2
votes

C'est exactement ce que je fais dans mes applications, je ne veux pas utiliser mediacontext trop (car parfois je n'ai pas le contexte), jetez un œil à l'exemple suivant:

https://github.com/lhcdims/statemanagement02

Essayez de regarder la classe 'sv' dans lib / ScreenVariables.dart

Et appelez sv.init () dans main.dart, vous pouvez alors utiliser sv.screenwidth, sv.defaultfontsize ... etc n'importe où dans n'importe quel fichier de fléchettes.


0 commentaires

0
votes

C'est simple à faire. Voici comment je le fais dans un StatefulWidget:

class MyPage extends StatefulWidget {
 
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
 
   var screenHeight = window.physicalSize.height / window.devicePixelRatio;
   var screenWidth = window.physicalSize.width / window.devicePixelRatio;
   .    .    .    .
   .    .    .    .
   .    .    .    .


0 commentaires