#flutter
Вопрос:
Я очень новичок в flutter, но прочитал много документации. Хотя я, кажется, не могу понять эту часть этого.
Я почти уверен, что React Native оборачивает некоторые API-интерфейсы устройств (например, вибрацию) независимо от устройства, чтобы вы могли получить к ним общий доступ. Для дополнительных API потребуются плагины, и вы будете использовать условные операторы и файлы для выполнения на разных платформах.
Это React Native, на flutter, как это работает?
- Все ли это буквально плагин для этого?
- И я не могу найти никаких канонических примеров выполнения кода, например, для Android, а не для iOS.
тай!
Ответ №1:
1. Все ли буквально является плагином для этого?
Да, в значительной степени. Однако многие из основных плагинов, о которых вы говорите, поддерживаются самой командой flutter. Смотрите здесь список таких пакетов.
Я точно не знаю причину, по которой они не включены в основной SDK, но я бы сказал, что это для удобства обслуживания.
2. Канонические примеры выполнения кода, например, для Android, а не для iOS.
Этот вопрос имеет 2 подкатегории:
- Выполнение различного кода dart в зависимости от текущей платформы
- Вызов собственного кода из dart для доступа к функциям, специфичным для платформы.
Выполнение различного кода dart в зависимости от текущей платформы
Это самый простой из двух, простая проверка значения Platform.is...
:
main() {
if (Platform.isIOS) {
runApp(MyCupertinoApp())
} else {
runApp(MyAndroidApp())
}
}
Вы можете использовать это в любом месте, от изменения всего приложения до цвета кнопки.
Вызов собственного кода из dart для доступа к функциям, специфичным для платформы
При этом используется механизм, называемый Platform channels
. Вот как, например, создаются такие пакеты, как camera (они с открытым исходным кодом, поэтому вы можете проверить их код непосредственно на github).
Канал платформы — это более важная тема, чем я могу осветить здесь, но вы можете ознакомиться с этим замечательным руководством команды flutter или просто выполнить поиск Platform Channel flutter
в Google.
Комментарии:
1. Если я правильно понимаю, везде, где вы используете такой плагин, вы должны выполнить условную проверку, верно? Существуют ли кросс-платформенные плагины?
2. Вовсе нет! Должно быть, плагины являются кроссплатформенными, на pub.dev вы можете увидеть ниже название, какая платформа поддерживается. Например, для
camera
пакета вы можете видетьFlutter | Android iOS web
, что означает, что ОС для настольных компьютеров не поддерживается, но другие поддерживаются. Иногда у вас есть параметры, специфичные для платформы (которые не имеют эквивалента на другой платформе) -в этом случае название параметра должно отражать это и должно игнорироваться без сбоев в других ОС. Что-то еще, с чем вы можете столкнуться (camera
является хорошим примером), — это настройки для конкретной платформы, которые вам необходимо3. изменение (часто в
Info.plist
илиbuild.gradle
). Они встречаются редко, но если они существуют, их следует указать в файле README на pub.dev (вы можете проверитьcamera
пакет для примера)