Flutter 如何检查一个小部件是否可见? visbility_detector 来帮你实现

在本文中,我们将学习一个重要的Flutter小部件。很多时候,在应用程序中,我们必须知道一个小部件是否可见。

类似Android的onResum事件,在Flutter中,需要使用一些额外的方法来实现这个事件检测。

简单的应用场景就是在A页面中点击一个按钮打开B页面,A页面失去焦点,然后B页面关闭消失,A页面重新获取得了焦点,同时回调onResum事件。

要回调这个事件,我非就是想在B页面消失的时候,再做一事内容处理,我一般使用的方法是使用 future await 来实现处理,核心代码如下:

TextButton buildTextButton(BuildContext context) {
  return TextButton(
    onPressed: () async {
      //打开其他页面
      await Navigator.of(context)
          .push(MaterialPageRoute(builder: (BuildContext context) {
        return OnePage();
      }));
      //处理其他事情
    },
    child: const Text("测试"),
  );
}

现我也可以使用 visibilityDetector 在页面中做统一的处理。

添加依赖如下:

visibility_detector: ^0.4.0+2

图片

然后在页面中引入依赖:

import 'package:visibility_detector/visibility_detector.dart';

核心使用代码如下:

//核心使用代码
VisibilityDetector buildVisibilityDetector(BuildContext context) {
  return VisibilityDetector(
    onVisibilityChanged: (visibilityInfo) {
      setState(() {
        //当前页面可见
        _isVisible = visibilityInfo.visibleFraction > 0;
        // It will show how much percentage the widget is visible
        var visiblePercentage = visibilityInfo.visibleFraction * 100;
        //页面的可见度
        print('Widget is ${visiblePercentage}% visible');
      });
    },
    key: const Key('my-widget-key'),
    child: Center(
      //页面的其他布局
      child: buildTextButton(context),
    ),
  );
}

如果你有兴趣,可以关注一下微信公众号 biglead 程序员知识架构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早起的年轻人

创作源于分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值