Ответ
Flutter поддерживает кроссплатформенную разработку для следующих целевых платформ:
📱 Мобильные ОС (стабильная поддержка):
- Android (API 19+, Android 4.4 KitKat и выше)
- iOS (iOS 11.0 и выше, включает iPhone, iPad)
💻 Десктопные ОС (стабильная поддержка):
- Windows (Windows 7 и выше, 64-битная архитектура)
- macOS (macOS 10.11 El Capitan и выше)
- Linux (64-битные дистрибутивы: Ubuntu, Debian, Fedora и др.)
🌐 Веб (стабильная поддержка):
- Современные браузеры через Flutter Web (компиляция в JavaScript)
- Поддерживает Chrome, Firefox, Safari, Edge
- Два режима рендеринга:
html(DOM-based) иcanvaskit(Skia-based)
🔧 Встраиваемые системы (Embedded) и другие платформы:
- Поддержка через Flutter Embedder API
- Экспериментальная поддержка для Raspberry Pi, автомобильных систем, IoT-устройств
- Возможность интеграции в существующие нативные приложения
Пример определения платформы в коде:
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart' show kIsWeb;
String getPlatformInfo() {
if (kIsWeb) {
return 'Запущено в веб-браузере';
} else if (Platform.isAndroid) {
return 'Запущено на Android ${Platform.version}';
} else if (Platform.isIOS) {
return 'Запущено на iOS';
} else if (Platform.isWindows) {
return 'Запущено на Windows';
} else if (Platform.isMacOS) {
return 'Запущено на macOS';
} else if (Platform.isLinux) {
return 'Запущено на Linux';
}
return 'Неизвестная платформа';
}
// Условная компиляция для платформо-специфичного кода
void setupPlatformSpecificFeatures() {
if (Platform.isAndroid) {
// Настройки специфичные для Android
setupAndroidNotifications();
} else if (Platform.isIOS) {
// Настройки специфичные для iOS
requestIOSPermissions();
}
}
Важные особенности:
- Один кодовая база для всех платформ
- Нативные производительность и внешний вид через собственный движок рендеринга (Skia)
- Доступ к нативным API через платформенные каналы (platform channels) и пакеты (plugins)
- Поддержка адаптивных интерфейсов, которые учитывают особенности каждой платформы
Ответ 18+ 🔞
Да ты посмотри, на что этот Flutter способен! Прям ёперный театр получается, а не фреймворк. Одна кодовая база, а запускается везде, куда ни ткни — хитрая жопа, а не технология.
📱 Телефоны (тут всё стабильно, можно не бздеть):
- Android (от какого-то древнего KitKat 4.4) — там половина девайсов уже в утиль, а приложение твоё ещё пашет.
- iOS (от 11-й оси) — для айфонов и айпадов. Главное, макбук иметь, чтобы собрать, вот это пизда рулю.
💻 Компы (тоже стабильно):
- Windows (от семёрки) — для тех, кто в игры рубится или отчёты строчит.
- macOS (от El Capitan) — для дизайнеров и тех, кто делает вид, что работает в кофейне.
- Linux (всякие Ubuntu там) — для бородатых гиков, которые в консоли как у себя дома. Хуй с горы, зато бесплатно.
🌐 Интернет (Flutter Web):
Твоё приложение в браузере! Chrome, Firefox — да похуй. Оно может в DOM рендериться (html), а может и в какой-то ебанько движок Skia (canvaskit) — для сложных анимаций, но весит овердохуища.
🔧 Всякая другая хуйня (Embedded): Тут уже подозрение ебать чувствую — экспериментально. Хочешь на Raspberry Pi запустить или в бортовой компьютер машины впендюрить? Теоретически можно, через их Embedder API. Но это уже для пидарасов шерстяных, которые с паяльником на "ты".
И самое главное — как узнать, где твой код сейчас выполняется? Э, бошка, думай! Вот смотри кусок кода, всё просто:
import 'dart:io' show Platform;
import 'package:flutter/foundation.dart' show kIsWeb;
String getPlatformInfo() {
if (kIsWeb) {
return 'Запущено в веб-браузере';
} else if (Platform.isAndroid) {
return 'Запущено на Android ${Platform.version}';
} else if (Platform.isIOS) {
return 'Запущено на iOS';
} else if (Platform.isWindows) {
return 'Запущено на Windows';
} else if (Platform.isMacOS) {
return 'Запущено на macOS';
} else if (Platform.isLinux) {
return 'Запущено на Linux';
}
return 'Неизвестная платформа';
}
// Условная компиляция для платформо-специфичного кода
void setupPlatformSpecificFeatures() {
if (Platform.isAndroid) {
// Настройки специфичные для Android
setupAndroidNotifications();
} else if (Platform.isIOS) {
// Настройки специфичные для iOS
requestIOSPermissions();
}
}
Видишь? kIsWeb проверил — и всё, привет. Потом по Platform щупаешь. Хочешь для андроида одни пуш-уведомления, а для iOS — другие разрешения? Ёпта, нет проблем, оберни в if и делай что надо.
Итог: Пишешь один раз, а приложение во все дыры давалка — и на телефон, и на комп, и в браузер. Движок свой (Skia), поэтому рисует быстро, не через эту мартышлюшку DOM. А если надо к какому-то нативному функционалу докопаться — есть платформенные каналы. Волнение ебать, конечно, но работает.