從技術上講,Flutter 可能允許您撰寫一次代碼并為多個平臺構建應用程式,但實際上您不希望在移動設備上獲得與在 Web 或桌面上相同的體驗。很容易想到解決方案 - “如果在 iOS 上使用此小部件,則使用此小部件”,或“如果在移動其他桌面上使用移動視圖”。
顫振還會處理機器代碼的 treeshaking 以使 web 應用程式的包不會比它需要的大 5 倍嗎?
uj5u.com熱心網友回復:
treeshaker 僅洗掉在編譯時已知未使用的代碼。撰寫代碼時需要注意這一點,因為它不是魔術。
您可以對常量使用條件分支來實作此目的。
const isPlatform = true;
class SomeWidget extends StatelessWidget {
@override
Widget build(context) {
if (isPlatform) {
return PlatformWidget(); // will appear in build
} else {
return SomeOtherWidget(); // will be removed from build
}
}
}
對于 web,我們有kIsWeb,但對于其他平臺,遺憾的是沒有編譯時間常數。
但是,您可以使用 dart-define 將常量傳遞給構建。
const isAndroid = bool.fromEnvironment('IS_ANDROID'); // defaults to false if not supplied
class SomeWidget extends StatelessWidget {
@override
Widget build(context) {
if (isAndroid) {
return AndroidWidget(); // will appear in build
} else {
return SomeOtherWidget(); // will be removed from build
}
}
}
flutter build apk --dart-define=IS_ANDROID=true
Treeshaking 僅在發布版本上執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475438.html
上一篇:鑄造復雜JSON飛鏢
