zoukankan      html  css  js  c++  java
  • Flutter 在使用MaterialApp之前获取MediaQueryData 2

    在使用 flutter_screenutil 这个插件的时候,需要注册

     ScreenUtil.init(context,  750, height: 1560, allowFontScaling: true);

    这句话,需要放那里呢?一般情况下都是放到MaterialApp之后的HomePage上。

    这样子就出现一个问题了。我需要在MaterialApp配置主题上就需要用到 flutter_screenutil 插件

    ScreenUtil().setSp(getPrimaryTextSize())

    所以必须需要将  ScreenUtil.init 放到MaterialApp之前。

    代码如下:

    void main() {
      runApp(MediaQueryFromWindow(
        child: ScreenApp(),
      ));
    }
    
    class MediaQueryFromWindow extends StatefulWidget {
      const MediaQueryFromWindow({
        Key key,
        @required this.child,
      }) : super(key: key);
    
      final Widget child;
    
      @override
      _MediaQueryFromWindowsState createState() => _MediaQueryFromWindowsState();
    }
    
    class _MediaQueryFromWindowsState extends State<MediaQueryFromWindow> with WidgetsBindingObserver {
      @override
      void initState() {
        super.initState();
        WidgetsBinding.instance.addObserver(this);
      }
    
      // ACCESSIBILITY
    
      @override
      void didChangeAccessibilityFeatures() {
        setState(() {
          // The properties of window have changed. We use them in our build
          // function, so we need setState(), but we don't cache anything locally.
        });
      }
    
      // METRICS
    
      @override
      void didChangeMetrics() {
        setState(() {
          // The properties of window have changed. We use them in our build
          // function, so we need setState(), but we don't cache anything locally.
        });
      }
    
      @override
      void didChangeTextScaleFactor() {
        setState(() {
          // The textScaleFactor property of window has changed. We reference
          // window in our build function, so we need to call setState(), but
          // we don't need to cache anything locally.
        });
      }
    
      // RENDERING
      @override
      void didChangePlatformBrightness() {
        setState(() {
          // The platformBrightness property of window has changed. We reference
          // window in our build function, so we need to call setState(), but
          // we don't need to cache anything locally.
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return MediaQuery(
          data: MediaQueryData.fromWindow(WidgetsBinding.instance.window),
          child: widget.child,
        );
      }
    
      @override
      void dispose() {
        WidgetsBinding.instance.removeObserver(this);
        super.dispose();
      }
    }
    
    class ScreenApp extends StatefulWidget {
      @override
      _ScreenAppState createState() => _ScreenAppState();
    }
    
    class _ScreenAppState extends State<ScreenApp> with WidgetsBindingObserver {
      @override
      Widget build(BuildContext context) {
        // 注册
        ScreenUtil.init(context,  750, height: 1560, allowFontScaling: true);
        return MyApp();
      }
    }
  • 相关阅读:
    字段与表的对应关系
    java初学代码,还不太熟练
    编程学习心得
    ps中经常遇到的问题
    R语言矩阵运算加速
    写代码过程中一些数字推理公式
    EXCEL中常用的函数
    css样式中常见的属性
    R语言的基本矩阵运算
    excel常用的函数
  • 原文地址:https://www.cnblogs.com/hbolin/p/12605085.html
Copyright © 2011-2022 走看看