阅读 55

Flutter Widget 之RepaintBoundary

想象你是一名油漆工,正在粉刷房屋的一部分,每当你尝试只粉刷一面墙时,都会不小心将几滴颜料滴在相邻的墙上。不知不觉中,你必须重新粉刷整个房间。这就像Flutter的渲染工作方式。

每个房间和我们假设的房子都是Flutter层树中的一个层,每当Flutter需要重新绘制一层中的某些内容时,它都会重新绘制整个层。

ezgif.com-gif-maker (1).gif

油漆工通过在边缘添加蓝色胶带使他们的油漆不会沾到相邻墙面来解决这个问题。

ezgif.com-gif-maker (3).gif

如果Flutter开发人员有类似的技巧那不是会很好吗?

幸运的是,我们做到了,它叫做RepaintBoundary

首先,在你的main方法中,将debugRepaintRainbowEnable设置为“true”,就在你调用runApp的上方。该标志告诉Flutter在每个重绘区域周围绘制彩色边框并在重绘区域时更改该颜色。

void main() {     debugRepaintRainbowEnable = true;     runApp(MyApp()); } 复制代码

现在,启动你的应用程序并查看哪些边框颜色发生了变化。

ezgif.com-gif-maker (4).gif

如果你有一个动画小部件,当然,它的区域会改变颜色。

但如果不相关的区域或你的整个应用程序也在改变颜色,那么你的Flutter应用程序中俄的小油漆工,可能正在重新粉刷整个空间。

ezgif.com-gif-maker (5).gif

想要解决此问题,请使用该动画小部件并将其包裹在RepaintBoundary中,RepaintBoundary的工作原理是将自小部件分离到自己的层中。

这样就不会不小心把油漆溅到相邻的小部件上,现在,请在此运行你的应用程序。

RepaintBoundary(     child: MyAnimatingWidget(), ) 复制代码

你会注意到即使动画小部件继续进行动画,它的邻居也不会不断地重新进行绘制。

ezgif.com-gif-maker (6).gif

但请记住,你最好在将所有内容包裹到RepaintBoundary之前检查这些不必要的重绘。因为RepaintBounary确实消耗一点儿CPU和内存。

如果想了解有关RepaintBoundary的内容,或者关于Flutter的其他功能,请访问pu b.dev


作者:程序员界的小学生
链接:https://juejin.cn/post/7169091691012915213


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐