Flutter 使用 ifdef 来移除函数
问题描述
我有一个 Dart 库,被引入到我的 Flutter 应用中。
这个 Dart 库有一些数据和一些调试函数/方法,我希望在我的应用程序中完全排除它们,这样代码既不会被调用也不会占用任何空间。
我知道可以使用 kReleaseMode 和/或 assert 来在调试模式下调用函数,但在生产模式下不调用。
然而我希望确保调试函数在我的应用程序中不占用任何空间,也就是说,在生产模式下,调试函数甚至没有被定义或声明,就像我从代码库中删除了调试数据和方法一样。
在某些语言中,我会做类似这样的操作:
class MyClass
{
void prodFunction()
{
// do something ...
}
#ifdef DEBUG_MODE
static const debugData = [];
void debugFunction()
{
// this method and the above List is not defined in production mode ...
}
#endif
}
在Dart/Flutter中是否可以实现同样的操作?
解决方案
不需要手动删除调试代码,因为Dart优化(树摇)会处理它:如果kReleaseMode==true
,则未调用的函数和仅被这些函数改变或访问的变量将不会出现在发布模式可执行文件中。
当然,对于导入库的应用程序,如果您想从此优化中受益,必须不调用debugFunction(或仅在kReleaseMode==false
时调用)。但无论如何,如果使用#ifdef
之类的东西来删除debugFunction是可能的话,您也不能调用那个函数。