美文网首页Flutter
Flutter 知识点

Flutter 知识点

作者: __Simon__ | 来源:发表于2021-03-26 13:43 被阅读0次

    获取屏幕各种尺寸

    获取屏幕各种尺寸主要主要使用 MediaQuery.of(context) 或者 MediaQueryData.fromWindow(window)MediaQuery.of(context)需要拿到 BuildContext 之后才能调用。MediaQueryData.fromWindow(window) 需要 import 'dart:ui';

    1、获取屏幕尺寸

    MediaQuery.of(context).size;
    // 或
    MediaQueryData.fromWindow(window).size;
    

    2、获取屏幕宽度

    MediaQuery.of(context).size.width;
    // 或
    MediaQueryData.fromWindow(window).size.width;
    

    3、获取屏幕高度

    MediaQuery.of(context).size.height;
    // 或
    MediaQueryData.fromWindow(window).size.height;
    

    4、获取状态栏高度(顶部安全距离)

    MediaQuery.of(context).padding.top;
    // 或
    MediaQueryData.fromWindow(window).padding.top;
    

    5、获取底部安全距离

    MediaQuery.of(context).padding.bottom;
    // 或
    MediaQueryData.fromWindow(window).padding.bottom;
    

    键盘相关

    • 为指定的输入框弹出键盘
    FocusScope.of(context).requestFocus(yourFocusNode);
    
    • 关闭键盘
    FocusScope.of(context).unfocus();
    
    • 点击页面空白处收回键盘
    GestureDetector(
    onTap: (){
        FocusScope.of(context).unfocus();
    },
    child: <Widget>
    )
    
    • 监听键盘是否弹起

    通过监测 MediaQuery.of(context).viewInsets.bottom 的数值来判断键盘是否弹起,当键盘弹起的时候 MediaQuery.of(context).viewInsets.bottom 的值为键盘的高度。

    可以在 didChangeMetrics 方法中监测

    完成代码如下:

    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
      FocusNode firstFocusNode = FocusNode();
    
      @override
      void initState() {
        super.initState();
        // 注册监听
        WidgetsBinding.instance.addObserver(this);
      }
    
      @override
      void dispose() {
        // 移除监听
        WidgetsBinding.instance.removeObserver(this);
        super.dispose();
      }
    
      // 页面大小规模发生变化的回调方法
      @override
      void didChangeMetrics() {
        super.didChangeMetrics();
        // 在页面重新渲染完成之后再去获取 `MediaQuery.of(context).viewInsets.bottom`
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
          final value = MediaQuery.of(context).viewInsets.bottom;
          if (value > 0) {
            print("键盘弹起:$value");
          }
        });
      }
    
    ...
    ...
    ...
    

    相关文章

      网友评论

        本文标题:Flutter 知识点

        本文链接:https://www.haomeiwen.com/subject/wvujhltx.html