Flutter | 嵌套地狱好阔怕?不要慌,官方解决方案来了!

请添加图片描述

网上有很多关于解决 Flutter 嵌套地狱的分享,大部分还是不错的。今天我再分享一个更直接、更有底气的,毕竟我是直接参考的 Flutter 源码。

通俗易懂、简单易行、行之有效、官方采用!


用官方组件举例

如下,是 Flutter 的日期选择器 CupertinoDatePicker 组件:

这是它的部分代码目录:

学会了吧?

什么你没懂?

那再看下 build 方法里的代码:

当 case 为 ymd(年月日) 的时候,pickerBuilders 为 [_buildYearPicker, _buildMonthPicker, _buildDayPicker]

注意这三个 build 是方法,返回值是 Widget:

到这里你肯定能理解官方的做法了:

将 Widget 抽取成方法,大幅度减少代码嵌套。


学以致用

如下:几个弹窗:

image.png

底部按钮可能有一个,也可能有两个,你觉得这个地方它的代码会有多少行?

几行而已:

我就是跟 Flutter 源码学的,将 Widget 抽取成方法:

通过这招让逻辑代码非常简洁清晰,根本不存在什么嵌套地狱。

还有,当 if 和 else 两个分支里的代码都很多的时候,会严重影响代码的可读性,这点务必牢记!


如何写出惊艳女同事的 build?

当我们准备查看一个页面的代码的时候,通常是从 build 方法里的 return 入手,所以提高 build 的可读性将大大降低代码阅读难度。

一个好的 build 应该满足:只需看一遍这个 build 的 return,代码阅读者就可以知晓整个 Widget 的布局与结构

还是用上面那个弹窗举例,我的 build 最终的 return 是这样写的:

从外到内,一眼即可览全貌,嵌套得更是恰到好处,谁能比这更惊艳?

注意我说的恰到好处,嵌套地狱很阔怕,但并不是说不嵌套就是最好的,凡事不能走极端,Flutter 完全不嵌套就是反 Flutter、反程序员。

比如上面那段代码,我如果通过再次抽取 Widget 改成完全不嵌套的:

return xxWidget;

这TM还看个毛?谁能通过这句代码看出整个 Widget 的结构?

听好,一个 Widget 的核心是 build,build 的核心是 return。


还有那些抽取方式?

通过上面的内容我们已经知道解决嵌套地狱的核心就是抽取 Widet,除了抽取成方法还有这些方式:

  1. 抽取成类

这个就不说了,程序员都懂。

  1. 抽取成局部变量

这个也很常用,比如我上面的弹窗代码:

closeButtontitleText 等其实都是局部变量,通过抽取成局部变量而不是直接写在 Column 里面,较少嵌套层数的同时提升代码的可读性。


总结

解决嵌套地狱的方案:

  1. 抽取成类
  2. 抽取成局部变量
  3. 抽取成方法

这些在 Flutter 的源码里都很常见,实施起来也很简单,下次不要再说什么 Flutter 嵌套地狱怎么怎么了,说,就是还没入门。


最后

谁能带我打王者?

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

祖安狂人学编程

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值