Что имеет начало, имеет и конец
Поговорим о маркетинге и инструментах, бизнесе и конкуренции. Команда разработки линтера DCM решила отказаться от бесплатной версии, а крупные корпорации, вроде Apple, Microsoft и JetBrains пытаются отобрать у Flutter долю рынка. Напоследок расскажем, как получить детальную информацию об устройстве, на котором запущено приложение. Приятного чтения!
Закат бесплатного DCM
Грустная новость для всех Flutter-разработчиков. Линтер DCM (dart_code_metrics) становится платным и полностью меняет модель распространения. В блоге разработчики DCM объяснили своё решение сразу несколькими причинами.
DCM создавался и дорабатывался на голом энтузиазме усилиями небольшой группы разработчиков. Никакого внешнего спонсорства не было, работа над проектом велась урывками и линтер топтался на месте, а не развивался. Переход на коммерческую модель позволит закрепить за DCM отдельную команду и наладить стабильное развитие продукта. При этом авторы не исключают, что в будущем бесплатная версия вновь появится.
Ещё одним фактором, повлиявшим на решение создателей DCM, было желание выпилить подключаемые модули (API в бесплатной версии). Предполагается, что это поможет сильно увеличить производительность. Проверить эту гипотезу без ущерба для пользователей бесплатной версии было бы невозможно.
После прекращения работы бесплатной версии, останется три варианта подписки на выбор:
- Individuals (для физических лиц): $10 в месяц при ежемесячной оплате или $8 в месяц при оплате за год.
- Teams (для команд от 5 до 30 человек): $18 в месяц за каждого разработчика при ежемесячной оплате или $14 в месяц при оплате за год.
- Custom (без ограничений): цена по запросу.
Оправдает ли себя такой шаг, сказать сложно. Возможно, было бы разумнее обратиться в фонды открытого программного обеспечения и получить финансирование. Поддержать развитие этого инструмента или обратить внимание на альтернативы — выбор за вами.
Пора ли пересмотреть маркетинговую стратегию Flutter?
Flutter, на момент своего появления, был уникальным явлением. Его часто сравнивали с React Native, а блоги пестрили статьями со смелыми предположениями, что Flutter заменит его. Правда, сами разработчики Flutter вытеснять с рынка React Native не собирались. Они шли собственным путём и на тот момент у них не было каких-либо конкурентов. С того момента прошло 6 лет и игнорировать конкурентов у Flutter более не получится.
Android обзавёлся Jetpack Compose, Apple вложился в разработку SwiftUI, Microsoft присоединилась к тренду со своим .NET MAUI, а JetBrains с Kotlin Multiplatform. Идея кроссплатформенности и единой кодовой базы стала настолько лакомым куском пирога, образовался настоящий рынок и началась борьба за место под солнцем. Беда в том, что разработчики Flutter продолжают делать вид, что ничего не произошло.
Команде Flutter необходимо срочно осознать тот факт, что они конкурируют с множеством сильных продуктов, утверждает Мэтью Керолл (Matthew Caroll), экс-разработчик Flutter, а ныне преподаватель и независимый программист. Чем быстрее они начнут предпринимать конкретные шаги по завоеванию доли рынка, тем больше шансы вернуть себе лидерство. Мэтью предлагает следующее:
- Создать крутой тулинг для разработчиков. Это можно рассматривать, как аналог DevTools, помогающий пройти весь жизненный цикл приложения от разработки до деплоя.
- Построить удобную IDE для создания Dart и Flutter приложений. Включить туда такие фичи и оптимизации, которые будут недоступны при использовании сторонних IDE.
- Продвигать высококачественное обучение Flutter-разработке. У Google достаточно маркетинговых ресурсов, которые можно безболезненно переориентировать на достижение этой цели. Чем постоянно твердить о наличии экспертности, лучше направить силы на реальное взращивание экспертов.
- Работать с сообществом разработчиков не только по Flutter, но и по другим близким фреймворкам, языкам и технологиям. Рынок ставит простое условие: чем больше людей заинтересуется Flutter, тем больше шанс на его стремительное развитие. И тем меньше Flutter-разработчики захотят менять стек.
Плагин device_info_plus
Напоследок расскажем о полезном плагине device_info_plus, задача которого собирать и предоставлять наиболее полную информацию о пользовательском устройстве. Он работает на всех операционных системах, где работают Flutter-приложения и является частью целой пачки плагинов с общим названием plus_plugins. Работа над ним ведётся уже второй год, а первые issues были заведены в рамках мероприятия Hacktoberfest 2021.
Чтобы попробовать плагин в своём проекте, подключите его стандартным импортом:
import 'package:device_info_plus/device_info_plus.dart';
Далее создайте экземпляры DeviceInfoPlugin():
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
Теперь можно получать данные через платформо специфичные геттеры.
Для Android:
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
print('Running on ${androidInfo.model}'); // e.g. "Moto G (4)"
Для iOS:
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
print('Running on ${iosInfo.utsname.machine}'); // e.g. "iPod7,1"
Для веб-приложений:
WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo;
print('Running on ${webBrowserInfo.userAgent}'); // e.g. "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
Или можно воспользоваться методом data и получить все данные в общем виде:
import 'package:device_info_plus/device_info_plus.dart';
final deviceInfoPlugin = DeviceInfoPlugin();
final deviceInfo = await deviceInfoPlugin.deviceInfo;
final allInfo = deviceInfo.data;
Единственный минус: сериализации оно пока что не подлежит, то есть его нельзя разобрать на красивый JSON. В будущем, вероятно, такая фича будет реализована. Но для отчётов об ошибках даже общих данных будет вполне достаточно.
Интересно посмотреть
Неделю назад у нас состоялся Flutter-митап в формате онлайн. Три крутых, заранее записанных доклада в 4K-качестве с отличным студийным звуком.
Кирилл Адещенко из РСХБ рассказал нам о рядовых случаях, вызывающих боль у разработчиков мобильных приложений. От изменений нативного API при использовании Android выше определённой версии и до меняющихся требований заказчиков. Чтобы каждый раз не хвататься за голову и не перелопачивать куски готового кода, стоит обратить внимание на чистую архитектуру. Она расставит границы зон ответственности и позволит быстро вносить необходимые изменения:
Андрей Малахов, независимый Flutter-разработчик, раскрыл особенности создания приложений под носимые устройства на базе Wear OS. Такие девайсы имеют ограниченные ресурсы и требовательны к создаваемому коду. Вместе с этим под них нужно создавать адаптивный пользовательский интерфейс, который будет удобен для взаимодействия на миниатюрных экранах:
Зачем переписывать сразу всё приложение на Flutter? Почему бы не начать с малого и интегрировать вначале какую-нибудь библиотеку или модуль. Всё это реально сделать при помощи технологии разработки App to app, но у неё есть существенные препятствия. Например, можно подключить только один модуль в нативное приложение. Михаил Половов из «Финам» поделился опытом, как внедрить сразу несколько модулей, не выходя за рамки существующих ограничений.
А если вам интересны не только сами доклады, но и ответы спикеров на вопросы, то на нашем канале доступна полная версия онлайн-трансляции:
Подписывайтесь и ставьте 🔔колокольчик, чтобы получать уведомления о будущих трансляциях и видео! А ещё присоединяйтесь к Telegram-каналу и будьте в курсе всех наших будущих мероприятий.
Вакансии
Evrone
Мы открыты для новых Flutter-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.