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.
3 Réponses :
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){
...
}
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.
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;
. . . .
. . . .
. . . .
À 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
Textes’adapte déjà automatiquement à la densité de pixels, non? Si vous optez pour un thème qui a des conditionsfontSize(c'est-à-dire, si la police grand écran: 40 sinon, à 20), je vous suggère de profiter duTextTheme code> de la propriétéThemeData, puis utilisez-la dans votre choix debuild, par exemple,Theme.of (context) .textTheme.display3si l'écran est grand dedisplay1s'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.