Будут ли удалены коды дротиков для iOS при компиляции для Android? - PullRequest
3 голосов
/ 25 мая 2019

Я использую флаттер, чтобы написать приложение для платформ iOS и Android.Некоторые функции не совпадают.

Например:

if (Platform.isIOS) {
    int onlyForiOS = 10;
    onlyForiOS++;
    print("$onlyForiOS");
}
else if (Platform.isAndroid){
    int onlyForAndroid = 20;
    onlyForAndroid++;
    print("$onlyForAndroid");
}

Когда я соберу для платформы Android, будут ли коды для iOS скомпилированы в двоичный файл?Или они просто удалены для оптимизации?Из соображений безопасности я не хочу, чтобы какие-либо коды для iOS появлялись в двоичном файле Android.

1 Ответ

2 голосов
/ 27 мая 2019

Это зависит от того, какое выражение вы оцениваете.

Дрожание дерева дротиков основано на постоянных переменных.Таким образом, следующее будет в виде дерева:

const foo = false;
if (foo) {
  // will be removed on release builds
}

Но этот пример не будет:

final foo = false;
if (foo) {
  // foo is not a const, therefore this if is not tree-shaked
}

Теперь, если мы посмотрим на реализацию Platform.isAndroid, мы можем видеть, что это не константа, а вместо этого получатель.

Поэтому мы можем сделать вывод, что if (Platform.isAndroid) не будет расшатан деревом.

...