dart支持反射,而flutter禁用了dart的这个能力。
为什么?flutter认为凡是需要用到反射的地方,都能够通过代码生成来解决,反射不仅会导致运行时效率降低,还会导致无法进行tree-shaking,进而导致包大小膨胀。
Google在Android项目中允许使用Java放射,事实已经证明这个能力被过分的滥用了,私有API被应用滥用、sdk因为使用了反射而强迫用户配置不合理的proguard规则、无法通过代码分析删去过时的资源…大量无用的代码和资源都因为反射而被无法通过工具自动的消除。
为了规避上述问题,flutter禁用了反射,带来的好处是:flutter应用开发中,不需要像Android一样配置奇怪的proguard规则,即可获得经过tree-shaking的编译结果;负面则是一切原本在Android应用开发中能够通过反射解决的问题,在flutter中都得通过代码生成来解决(比如Json映射)。