Я использую флаттер для написания приложения для платформ 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.
@CopsOnRoad Так это предположение? Я действительно ожидаю надежного ответа, потому что мне нужно использовать альтернативные планы для кода, если то, что вы сказали, верно.
Вас могут заинтересовать github.com/dart-lang/sdk/issues/33920 и stackoverflow.com/questions/52822353/…
@RockingDice, это мое предположение, Реми тоже упоминает об этом.
@jamesdlin Спасибо за ссылки. Они действительно полезны.
Это зависит от того, какое выражение вы оцениваете.
Встряхивание дерева Dart основано на постоянных переменных. Таким образом, следующее будет встряхиваться деревом:
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)
не будет встряхиваться деревом.
Я думаю, что ответ на этот вопрос для моего случая понятен, я найду другой способ. Но на самом деле от кодов зависит, нужно ли делать встряхивание дерева для других ситуаций. Было бы лучше, если бы вы могли поделиться дополнительной информацией о части «Dart tree-shaking на основе постоянных переменных» :)
Я не претендую на звание эксперта в этом, но я думаю, что ваш скомпилированный код Android также будет содержать часть if (для iOS)