Флаттер и специфическая функциональность устройства

#flutter

Вопрос:

Я очень новичок в flutter, но прочитал много документации. Хотя я, кажется, не могу понять эту часть этого.

Я почти уверен, что React Native оборачивает некоторые API-интерфейсы устройств (например, вибрацию) независимо от устройства, чтобы вы могли получить к ним общий доступ. Для дополнительных API потребуются плагины, и вы будете использовать условные операторы и файлы для выполнения на разных платформах.

Это React Native, на flutter, как это работает?

  1. Все ли это буквально плагин для этого?
  2. И я не могу найти никаких канонических примеров выполнения кода, например, для 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 пакет для примера)