Мы изучили новую перспективную технологию и реализовали на ней приложение. Flutter показал хороший результат и оправдал себя как средство быстрой мобильной разработки. Этот опыт и был для нас успешным. По своим качествам Flutter хорошо подходит для реализации MVP мобильных приложений стартапов.
Для организации доступа к нативным API Хamarin использует технику биндингов. Эти биндинги либо поставляются с очередным обновлением xamarin, либо генерируются самим разработчиком с помощью утилиты. Проблема тут в том, что эти нативные API в iOS и Android разрабатывались и тестировались именно для целевых языков, objC, Java, Swift, Kotlin. Очень часто некоторые вещи можно качественно реализовать только на нативном языке, например нельзя вызывать некоторые API в рабочем потоке. После генерации биндингов для какой-либо библиотеки разработчик остается один на один с подобными проблемами в контексте Xamarin и .NET, В то время, как для обычных средств разработки куча примеров и ответов на вопросы. Да, биндинги это быстро и удобно, но нативные плагины это надежно и любые платформенные вопросы такой подход решает лучше.
Для написания плагина Flutter можно использовать как objective-c, java, так и Swift, Kotlin. https://flutter.io/docs/development/packages-and-plugins/developing-packages.
Выбор может зависеть от опыта или наличия билиотек на конкретном языке, решающих требуемую задачу.
Dart код на выходе компилируется в платформенный код, но у iOS и Android разные API, поэтому создавая плагин, мы всего лишь создаем общую удобную точку входа, которую можно одинаково использовать на обеих платформах.
Например получение картинки камеры очень просто: var image = await ImagePicker.pickImage(source: ImageSource.camera);
У flutter есть набор официально поддерживаемых плагинов, которые уже включены в репозиторий самого flutter https://github.com/flutter/plugins.
Среди них есть:
1) image_picker: https://github.com/flutter/plugins/blob/master/packages/image_picker
на Dart получение картинки с камеры выглядит так:
var image = await ImagePicker.pickImage(source: ImageSource.camera);
2) если же нам нужен CameraView, например для AR приложения, то используем из коробки плагин camera https://github.com/flutter/plugins/blob/master/packages/camera
Сейчас medcorder можно скачать только в США. Но в скором будущем планируется расширение на другие страны.